From ff58c2e82a840434b8e73ba84aa17d3e46d027ae Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 29 Apr 2026 14:04:27 +0700 Subject: [PATCH 1/6] [CodeQuality] Skip multiple uses variable as arg after defined on BareCreateMockAssignToDirectUseRector --- .../multiple_uses_as_no_connection.php.inc | 51 ------------------- .../Fixture/skip_multiple_uses.php.inc | 26 ++++++++++ .../BareCreateMockAssignToDirectUseRector.php | 3 +- 3 files changed, 27 insertions(+), 53 deletions(-) delete mode 100644 rules-tests/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector/Fixture/multiple_uses_as_no_connection.php.inc create mode 100644 rules-tests/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector/Fixture/skip_multiple_uses.php.inc diff --git a/rules-tests/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector/Fixture/multiple_uses_as_no_connection.php.inc b/rules-tests/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector/Fixture/multiple_uses_as_no_connection.php.inc deleted file mode 100644 index 2734ca02..00000000 --- a/rules-tests/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector/Fixture/multiple_uses_as_no_connection.php.inc +++ /dev/null @@ -1,51 +0,0 @@ -createMock(\Rector\PHPUnit\Tests\CodeQuality\Rector\ClassMethod\BareCreateMockAssignToDirectUseRector\Source\AnotherClass::class); - - $this->useMock($someMock); - $this->useMockAgain($someMock); - } - - private function useMock($someMock) - { - } - - private function useMockAgain($someMock) - { - } -} - -?> ------ -useMock($this->createMock(\Rector\PHPUnit\Tests\CodeQuality\Rector\ClassMethod\BareCreateMockAssignToDirectUseRector\Source\AnotherClass::class)); - $this->useMockAgain($this->createMock(\Rector\PHPUnit\Tests\CodeQuality\Rector\ClassMethod\BareCreateMockAssignToDirectUseRector\Source\AnotherClass::class)); - } - - private function useMock($someMock) - { - } - - private function useMockAgain($someMock) - { - } -} - -?> diff --git a/rules-tests/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector/Fixture/skip_multiple_uses.php.inc b/rules-tests/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector/Fixture/skip_multiple_uses.php.inc new file mode 100644 index 00000000..092047ff --- /dev/null +++ b/rules-tests/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector/Fixture/skip_multiple_uses.php.inc @@ -0,0 +1,26 @@ +createMock(\Rector\PHPUnit\Tests\CodeQuality\Rector\ClassMethod\BareCreateMockAssignToDirectUseRector\Source\AnotherClass::class); + + // behaviour can already changed on first use + $this->useMock($someMock); + $this->useMockAgain($someMock); + } + + private function useMock($someMock) + { + $someMock->method('someMethod'); + } + + private function useMockAgain($someMock) + { + } +} diff --git a/rules/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector.php b/rules/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector.php index e19862b1..22f5f468 100644 --- a/rules/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector.php +++ b/rules/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector.php @@ -227,8 +227,7 @@ private function isUsedMoreOftenThanInCallLikeArgs(ClassMethod|Foreach_ $stmtsAw } } - // not suitable for direct replacing - return (count($foundVariables) - 1) > ($callLikeVariableUseCount); + return (count($foundVariables) - 1) > 1; } /** From 9641c3510ac59b363233ddf5b7b1fb7ea8265e43 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 29 Apr 2026 07:06:18 +0000 Subject: [PATCH 2/6] [rector] Rector fixes --- .../Rector/ClassMethod/TestWithAnnotationToAttributeRector.php | 1 - rules/CodeQuality/Rector/Class_/AddSeeTestAnnotationRector.php | 1 - .../ClassMethod/ExpressionCreateMockToCreateStubRector.php | 1 - 3 files changed, 3 deletions(-) diff --git a/rules/AnnotationsToAttributes/Rector/ClassMethod/TestWithAnnotationToAttributeRector.php b/rules/AnnotationsToAttributes/Rector/ClassMethod/TestWithAnnotationToAttributeRector.php index 30f59c69..763cfda7 100644 --- a/rules/AnnotationsToAttributes/Rector/ClassMethod/TestWithAnnotationToAttributeRector.php +++ b/rules/AnnotationsToAttributes/Rector/ClassMethod/TestWithAnnotationToAttributeRector.php @@ -129,7 +129,6 @@ public function refactor(Node $node): ?Node // test from doc blocks $this->phpDocTagRemover->removeTagValueFromNode($phpDocInfo, $testWithPhpDocTagNode); - /** @var GenericTagValueNode $genericTagValueNode */ $genericTagValueNode = $testWithPhpDocTagNode->value; $testWithItems = explode("\n", trim($genericTagValueNode->value)); diff --git a/rules/CodeQuality/Rector/Class_/AddSeeTestAnnotationRector.php b/rules/CodeQuality/Rector/Class_/AddSeeTestAnnotationRector.php index 2e8708b6..43306e35 100644 --- a/rules/CodeQuality/Rector/Class_/AddSeeTestAnnotationRector.php +++ b/rules/CodeQuality/Rector/Class_/AddSeeTestAnnotationRector.php @@ -134,7 +134,6 @@ private function shouldSkipClass(Class_ $class): bool continue; } - /** @var GenericTagValueNode $genericTagValueNode */ $genericTagValueNode = $seePhpDocTagNode->value; $seeTagClass = ltrim($genericTagValueNode->value, '\\'); diff --git a/rules/PHPUnit120/Rector/ClassMethod/ExpressionCreateMockToCreateStubRector.php b/rules/PHPUnit120/Rector/ClassMethod/ExpressionCreateMockToCreateStubRector.php index 5c1df1b1..acf54efc 100644 --- a/rules/PHPUnit120/Rector/ClassMethod/ExpressionCreateMockToCreateStubRector.php +++ b/rules/PHPUnit120/Rector/ClassMethod/ExpressionCreateMockToCreateStubRector.php @@ -106,7 +106,6 @@ public function refactor(Node $node): ?ClassMethod continue; } - /** @var Assign $assign */ $assign = $stmt->expr; if (! $assign->var instanceof Variable) { From c4eca408f20a26111ffac19632a246bb1a55f1de Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 29 Apr 2026 14:15:08 +0700 Subject: [PATCH 3/6] fix --- .../ClassMethod/BareCreateMockAssignToDirectUseRector.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector.php b/rules/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector.php index 22f5f468..110e50e9 100644 --- a/rules/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector.php +++ b/rules/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector.php @@ -227,7 +227,7 @@ private function isUsedMoreOftenThanInCallLikeArgs(ClassMethod|Foreach_ $stmtsAw } } - return (count($foundVariables) - 1) > 1; + return $callLikeVariableUseCount > 1 || (count($foundVariables) - 1) > $callLikeVariableUseCount; } /** From 9640fac472759b90f00e9a0f8b3534a2cdfeff67 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 29 Apr 2026 14:15:33 +0700 Subject: [PATCH 4/6] more fixture --- .../Fixture/skip_used_later.php.inc | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 rules-tests/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector/Fixture/skip_used_later.php.inc diff --git a/rules-tests/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector/Fixture/skip_used_later.php.inc b/rules-tests/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector/Fixture/skip_used_later.php.inc new file mode 100644 index 00000000..9d540a9f --- /dev/null +++ b/rules-tests/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector/Fixture/skip_used_later.php.inc @@ -0,0 +1,28 @@ +createMock(stdClass::class); + $this->configureMainDocMetadata($classMetadata); + + $documentManager = $this->createMock(ObjectManager::class); + $documentManager->expects($this->atLeastOnce()) + ->method('getClassMetadata') + ->willReturn($classMetadata); + } + + private function configureMainDocMetadata(MockObject $classMetadata) + { + $classMetadata->expects($this->atLeastOnce()) + ->method('getName') + ->willReturn('SomeClass'); + } +} From 2a7ed0073bd48c51443c2727011c2eb678f03380 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 29 Apr 2026 14:31:46 +0700 Subject: [PATCH 5/6] final touch; rename fixture --- ..._multiple_uses.php.inc => skip_multiple_uses_as_arg.php.inc} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename rules-tests/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector/Fixture/{skip_multiple_uses.php.inc => skip_multiple_uses_as_arg.php.inc} (91%) diff --git a/rules-tests/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector/Fixture/skip_multiple_uses.php.inc b/rules-tests/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector/Fixture/skip_multiple_uses_as_arg.php.inc similarity index 91% rename from rules-tests/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector/Fixture/skip_multiple_uses.php.inc rename to rules-tests/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector/Fixture/skip_multiple_uses_as_arg.php.inc index 092047ff..a10fa864 100644 --- a/rules-tests/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector/Fixture/skip_multiple_uses.php.inc +++ b/rules-tests/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector/Fixture/skip_multiple_uses_as_arg.php.inc @@ -4,7 +4,7 @@ namespace Rector\PHPUnit\Tests\CodeQuality\Rector\ClassMethod\BareCreateMockAssi use PHPUnit\Framework\TestCase; -final class MultipleUsesAsNoConnection extends TestCase +final class SkipMultipleUsesAsArg extends TestCase { public function test() { From cbb08745c9100a0127fca77d6d3acddfe89cbff6 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Wed, 29 Apr 2026 14:32:35 +0700 Subject: [PATCH 6/6] clean up --- .../Fixture/skip_used_later.php.inc | 28 ------------------- 1 file changed, 28 deletions(-) delete mode 100644 rules-tests/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector/Fixture/skip_used_later.php.inc diff --git a/rules-tests/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector/Fixture/skip_used_later.php.inc b/rules-tests/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector/Fixture/skip_used_later.php.inc deleted file mode 100644 index 9d540a9f..00000000 --- a/rules-tests/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector/Fixture/skip_used_later.php.inc +++ /dev/null @@ -1,28 +0,0 @@ -createMock(stdClass::class); - $this->configureMainDocMetadata($classMetadata); - - $documentManager = $this->createMock(ObjectManager::class); - $documentManager->expects($this->atLeastOnce()) - ->method('getClassMetadata') - ->willReturn($classMetadata); - } - - private function configureMainDocMetadata(MockObject $classMetadata) - { - $classMetadata->expects($this->atLeastOnce()) - ->method('getName') - ->willReturn('SomeClass'); - } -}