From c448f7258e1accfe4c030bb3605b7190b0a1043c Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Tue, 27 Jan 2026 07:02:44 +0700 Subject: [PATCH 1/7] [CodeQuality] Skip indirect parent is PHPUnit\Framework\TestCase on NoSetupWithParentCallOverrideRector --- .../skip_indirect_parent_testcase.php.inc | 16 ++++++++++++++++ .../Source/SomeFunctionalTestCase.php | 13 +++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 rules-tests/CodeQuality/Rector/ClassMethod/NoSetupWithParentCallOverrideRector/Fixture/skip_indirect_parent_testcase.php.inc create mode 100644 rules-tests/CodeQuality/Rector/ClassMethod/NoSetupWithParentCallOverrideRector/Source/SomeFunctionalTestCase.php diff --git a/rules-tests/CodeQuality/Rector/ClassMethod/NoSetupWithParentCallOverrideRector/Fixture/skip_indirect_parent_testcase.php.inc b/rules-tests/CodeQuality/Rector/ClassMethod/NoSetupWithParentCallOverrideRector/Fixture/skip_indirect_parent_testcase.php.inc new file mode 100644 index 00000000..beb72f3b --- /dev/null +++ b/rules-tests/CodeQuality/Rector/ClassMethod/NoSetupWithParentCallOverrideRector/Fixture/skip_indirect_parent_testcase.php.inc @@ -0,0 +1,16 @@ + Date: Tue, 27 Jan 2026 07:05:20 +0700 Subject: [PATCH 2/7] eol --- .../Source/SomeFunctionalTestCase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules-tests/CodeQuality/Rector/ClassMethod/NoSetupWithParentCallOverrideRector/Source/SomeFunctionalTestCase.php b/rules-tests/CodeQuality/Rector/ClassMethod/NoSetupWithParentCallOverrideRector/Source/SomeFunctionalTestCase.php index 9c736980..d46fcb5f 100644 --- a/rules-tests/CodeQuality/Rector/ClassMethod/NoSetupWithParentCallOverrideRector/Source/SomeFunctionalTestCase.php +++ b/rules-tests/CodeQuality/Rector/ClassMethod/NoSetupWithParentCallOverrideRector/Source/SomeFunctionalTestCase.php @@ -10,4 +10,4 @@ protected function setUp(): void init_db(); } -} \ No newline at end of file +} From 067679bf74b7e0e89e539a14bbd745ee1447e2bd Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Tue, 27 Jan 2026 07:10:17 +0700 Subject: [PATCH 3/7] fix: add TestsNodeAnalyzer::isDirectlyExtendsTestCase() --- .../NoSetupWithParentCallOverrideRector.php | 2 +- src/NodeAnalyzer/TestsNodeAnalyzer.php | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/rules/CodeQuality/Rector/ClassMethod/NoSetupWithParentCallOverrideRector.php b/rules/CodeQuality/Rector/ClassMethod/NoSetupWithParentCallOverrideRector.php index cfc0e27b..a778d0c3 100644 --- a/rules/CodeQuality/Rector/ClassMethod/NoSetupWithParentCallOverrideRector.php +++ b/rules/CodeQuality/Rector/ClassMethod/NoSetupWithParentCallOverrideRector.php @@ -78,7 +78,7 @@ public function getNodeTypes(): array */ public function refactor(Node $node): ?Node { - if (! $this->testsNodeAnalyzer->isInTestClass($node)) { + if (! $this->testsNodeAnalyzer->isDirectlyExtendsTestCase($node)) { return null; } diff --git a/src/NodeAnalyzer/TestsNodeAnalyzer.php b/src/NodeAnalyzer/TestsNodeAnalyzer.php index d2b90e5a..99904128 100644 --- a/src/NodeAnalyzer/TestsNodeAnalyzer.php +++ b/src/NodeAnalyzer/TestsNodeAnalyzer.php @@ -43,6 +43,27 @@ public function isInTestClass(Node $node): bool return false; } + public function isDirectlyExtendsTestCase(Node $node): bool + { + $classReflection = $this->reflectionResolver->resolveClassReflection($node); + if (! $classReflection instanceof ClassReflection) { + return false; + } + + $parents = $classReflection->getParents(); + if ($parents === []) { + return false; + } + + foreach (PHPUnitClassName::TEST_CLASSES as $testCaseObjectClass) { + if ($parents[0]->getName() === $testCaseObjectClass) { + return true; + } + } + + return false; + } + public function isTestClassMethod(ClassMethod $classMethod): bool { if (! $classMethod->isPublic()) { From bcd0ffa6be054ca98271f747b64432674c3aa856 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 27 Jan 2026 00:12:29 +0000 Subject: [PATCH 4/7] [rector] Rector fixes --- src/NodeAnalyzer/TestsNodeAnalyzer.php | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/NodeAnalyzer/TestsNodeAnalyzer.php b/src/NodeAnalyzer/TestsNodeAnalyzer.php index 99904128..77954a4c 100644 --- a/src/NodeAnalyzer/TestsNodeAnalyzer.php +++ b/src/NodeAnalyzer/TestsNodeAnalyzer.php @@ -54,14 +54,7 @@ public function isDirectlyExtendsTestCase(Node $node): bool if ($parents === []) { return false; } - - foreach (PHPUnitClassName::TEST_CLASSES as $testCaseObjectClass) { - if ($parents[0]->getName() === $testCaseObjectClass) { - return true; - } - } - - return false; + return in_array($parents[0]->getName(), PHPUnitClassName::TEST_CLASSES, true); } public function isTestClassMethod(ClassMethod $classMethod): bool From a5bf1abab46a9b0d0bd8351e2291b9cced707e54 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 27 Jan 2026 00:13:19 +0000 Subject: [PATCH 5/7] [rector] Rector fixes --- src/NodeAnalyzer/TestsNodeAnalyzer.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/NodeAnalyzer/TestsNodeAnalyzer.php b/src/NodeAnalyzer/TestsNodeAnalyzer.php index 77954a4c..d4f7b562 100644 --- a/src/NodeAnalyzer/TestsNodeAnalyzer.php +++ b/src/NodeAnalyzer/TestsNodeAnalyzer.php @@ -54,6 +54,7 @@ public function isDirectlyExtendsTestCase(Node $node): bool if ($parents === []) { return false; } + return in_array($parents[0]->getName(), PHPUnitClassName::TEST_CLASSES, true); } From 1adc50b010ff451d279288438ff1e95ff74bfcab Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Tue, 27 Jan 2026 07:15:06 +0700 Subject: [PATCH 6/7] fix phpstan --- src/NodeAnalyzer/TestsNodeAnalyzer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NodeAnalyzer/TestsNodeAnalyzer.php b/src/NodeAnalyzer/TestsNodeAnalyzer.php index d4f7b562..43b55f23 100644 --- a/src/NodeAnalyzer/TestsNodeAnalyzer.php +++ b/src/NodeAnalyzer/TestsNodeAnalyzer.php @@ -43,7 +43,7 @@ public function isInTestClass(Node $node): bool return false; } - public function isDirectlyExtendsTestCase(Node $node): bool + public function isDirectlyExtendsTestCase(ClassMethod $node): bool { $classReflection = $this->reflectionResolver->resolveClassReflection($node); if (! $classReflection instanceof ClassReflection) { From 15ae62b078a402ce1ed7e46227d9e74a8235c7fc Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 27 Jan 2026 00:15:43 +0000 Subject: [PATCH 7/7] [rector] Rector fixes --- src/NodeAnalyzer/TestsNodeAnalyzer.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NodeAnalyzer/TestsNodeAnalyzer.php b/src/NodeAnalyzer/TestsNodeAnalyzer.php index 43b55f23..4c162443 100644 --- a/src/NodeAnalyzer/TestsNodeAnalyzer.php +++ b/src/NodeAnalyzer/TestsNodeAnalyzer.php @@ -43,9 +43,9 @@ public function isInTestClass(Node $node): bool return false; } - public function isDirectlyExtendsTestCase(ClassMethod $node): bool + public function isDirectlyExtendsTestCase(ClassMethod $classMethod): bool { - $classReflection = $this->reflectionResolver->resolveClassReflection($node); + $classReflection = $this->reflectionResolver->resolveClassReflection($classMethod); if (! $classReflection instanceof ClassReflection) { return false; }