From 157258eeafe598600389a914b6721c4fdf2836ac Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Fri, 6 Feb 2026 22:05:34 +0100 Subject: [PATCH 1/2] improve DecorateWillReturnMapWithExpectsMockRector edge cases --- .../Fixture/skip_already_defined.php.inc | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 rules-tests/CodeQuality/Rector/Expression/DecorateWillReturnMapWithExpectsMockRector/Fixture/skip_already_defined.php.inc diff --git a/rules-tests/CodeQuality/Rector/Expression/DecorateWillReturnMapWithExpectsMockRector/Fixture/skip_already_defined.php.inc b/rules-tests/CodeQuality/Rector/Expression/DecorateWillReturnMapWithExpectsMockRector/Fixture/skip_already_defined.php.inc new file mode 100644 index 00000000..91bdd6dd --- /dev/null +++ b/rules-tests/CodeQuality/Rector/Expression/DecorateWillReturnMapWithExpectsMockRector/Fixture/skip_already_defined.php.inc @@ -0,0 +1,16 @@ +createMock(\stdClass::class); + $someMock + ->expects($this->exactly(2)) + ->method('some')->willReturnMap([1, 2]); + } +} From dc0c0a7f1f6596906ea88af8ffe486aacf1af762 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Fri, 6 Feb 2026 22:06:36 +0100 Subject: [PATCH 2/2] skip setup method in DecorateWillReturnMapWithExpectsMockRector --- .../Fixture/skip_from_setup.php.inc | 14 ++++++++++++++ .../DecorateWillReturnMapWithExpectsMockRector.php | 9 +++++++++ 2 files changed, 23 insertions(+) create mode 100644 rules-tests/CodeQuality/Rector/Expression/DecorateWillReturnMapWithExpectsMockRector/Fixture/skip_from_setup.php.inc diff --git a/rules-tests/CodeQuality/Rector/Expression/DecorateWillReturnMapWithExpectsMockRector/Fixture/skip_from_setup.php.inc b/rules-tests/CodeQuality/Rector/Expression/DecorateWillReturnMapWithExpectsMockRector/Fixture/skip_from_setup.php.inc new file mode 100644 index 00000000..fb036913 --- /dev/null +++ b/rules-tests/CodeQuality/Rector/Expression/DecorateWillReturnMapWithExpectsMockRector/Fixture/skip_from_setup.php.inc @@ -0,0 +1,14 @@ +createMock(\stdClass::class); + $someMock->method('some')->willReturnMap([1, 2]); + } +} diff --git a/rules/CodeQuality/Rector/Expression/DecorateWillReturnMapWithExpectsMockRector.php b/rules/CodeQuality/Rector/Expression/DecorateWillReturnMapWithExpectsMockRector.php index 2b9ea26b..d1b03f21 100644 --- a/rules/CodeQuality/Rector/Expression/DecorateWillReturnMapWithExpectsMockRector.php +++ b/rules/CodeQuality/Rector/Expression/DecorateWillReturnMapWithExpectsMockRector.php @@ -12,7 +12,9 @@ use PhpParser\Node\Identifier; use PhpParser\Node\Scalar\Int_; use PhpParser\Node\Stmt\Expression; +use Rector\PHPStan\ScopeFetcher; use Rector\Rector\AbstractRector; +use Rector\ValueObject\MethodName; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; @@ -92,6 +94,13 @@ public function refactor(Node $node) return null; } + $scope = ScopeFetcher::fetch($node); + + // allowed as can be flexible + if ($scope->getFunctionName() === MethodName::SET_UP) { + return null; + } + $topmostCall = $this->resolveTopmostCall($methodCall); // already covered