From 8d33eb84e32947d7692f2b62ec6481acf14e7da6 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Tue, 6 Jan 2026 17:58:17 +0700 Subject: [PATCH 1/5] Fix use of removed parent attribute --- .../StaticConnectionHelperRector.php | 21 ++++++------ .../Fixture/fixture.php.inc | 32 +++++++++++++++++++ .../StaticConnectionHelperRectorTest.php | 29 +++++++++++++++++ .../config/configured_rule.php | 10 ++++++ 4 files changed, 81 insertions(+), 11 deletions(-) create mode 100644 tests/TestCase/Rector/MethodCall/StaticConnectionHelperRector/Fixture/fixture.php.inc create mode 100644 tests/TestCase/Rector/MethodCall/StaticConnectionHelperRector/StaticConnectionHelperRectorTest.php create mode 100644 tests/TestCase/Rector/MethodCall/StaticConnectionHelperRector/config/configured_rule.php diff --git a/src/Rector/Rector/MethodCall/StaticConnectionHelperRector.php b/src/Rector/Rector/MethodCall/StaticConnectionHelperRector.php index 5f3319f..47e60e2 100644 --- a/src/Rector/Rector/MethodCall/StaticConnectionHelperRector.php +++ b/src/Rector/Rector/MethodCall/StaticConnectionHelperRector.php @@ -10,8 +10,8 @@ use PhpParser\Node\Expr\New_; use PhpParser\Node\Expr\StaticCall; use PhpParser\Node\Stmt\Expression; +use PhpParser\NodeVisitor; use PHPStan\Type\ObjectType; -use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\ConfiguredCodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; @@ -40,25 +40,24 @@ public function getRuleDefinition(): RuleDefinition public function getNodeTypes(): array { - return [MethodCall::class, Assign::class]; + return [Expression::class, MethodCall::class]; } - public function refactor(Node $node): ?Node + /** + * @return null|NodeVisitor::REMOVE_NODE|Node + */ + public function refactor(Node $node): null|int|Node { - if ($node instanceof Assign) { - if ($node->expr instanceof New_ && $this->isName($node->expr->class, 'ConnectionHelper')) { - // Remove the instantiation statement - $parent = $node->getAttribute(AttributeKey::PARENT_NODE); - if ($parent instanceof Expression) { - $this->removeNode($parent); - } + if ($node instanceof Expression) { + if ($node->expr instanceof Assign && $node->expr->expr instanceof New_ && $this->isName($node->expr->expr->class, 'ConnectionHelper')) { + return NodeVisitor::REMOVE_NODE; } return null; } // Ensure the node is a method call on the ConnectionHelper instance - if (! $this->isObjectType($node->var, new ObjectType(ConnectionHelper::class))) { + if (! $this->isObjectType($node->var, new ObjectType('ConnectionHelper'))) { return null; } diff --git a/tests/TestCase/Rector/MethodCall/StaticConnectionHelperRector/Fixture/fixture.php.inc b/tests/TestCase/Rector/MethodCall/StaticConnectionHelperRector/Fixture/fixture.php.inc new file mode 100644 index 0000000..b0a783f --- /dev/null +++ b/tests/TestCase/Rector/MethodCall/StaticConnectionHelperRector/Fixture/fixture.php.inc @@ -0,0 +1,32 @@ +getConnection('default'); + + return $connection; + } +} + +?> +----- + diff --git a/tests/TestCase/Rector/MethodCall/StaticConnectionHelperRector/StaticConnectionHelperRectorTest.php b/tests/TestCase/Rector/MethodCall/StaticConnectionHelperRector/StaticConnectionHelperRectorTest.php new file mode 100644 index 0000000..18747be --- /dev/null +++ b/tests/TestCase/Rector/MethodCall/StaticConnectionHelperRector/StaticConnectionHelperRectorTest.php @@ -0,0 +1,29 @@ +doTestFile($filePath); + } + + public static function provideData(): Iterator + { + return self::yieldFilesFromDirectory(__DIR__ . '/Fixture'); + } + + public function provideConfigFilePath(): string + { + return __DIR__ . '/config/configured_rule.php'; + } +} diff --git a/tests/TestCase/Rector/MethodCall/StaticConnectionHelperRector/config/configured_rule.php b/tests/TestCase/Rector/MethodCall/StaticConnectionHelperRector/config/configured_rule.php new file mode 100644 index 0000000..a5e94ff --- /dev/null +++ b/tests/TestCase/Rector/MethodCall/StaticConnectionHelperRector/config/configured_rule.php @@ -0,0 +1,10 @@ +rule(StaticConnectionHelperRector::class); +}; From 75684157a499856d6488cc284347092217b48323 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Tue, 6 Jan 2026 18:04:30 +0700 Subject: [PATCH 2/5] clean up notice --- src/Rector/Rector/MethodCall/StaticConnectionHelperRector.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Rector/Rector/MethodCall/StaticConnectionHelperRector.php b/src/Rector/Rector/MethodCall/StaticConnectionHelperRector.php index 47e60e2..a296a34 100644 --- a/src/Rector/Rector/MethodCall/StaticConnectionHelperRector.php +++ b/src/Rector/Rector/MethodCall/StaticConnectionHelperRector.php @@ -43,9 +43,6 @@ public function getNodeTypes(): array return [Expression::class, MethodCall::class]; } - /** - * @return null|NodeVisitor::REMOVE_NODE|Node - */ public function refactor(Node $node): null|int|Node { if ($node instanceof Expression) { From 84bc90b4800d1c90f9f20ff8281952ee139096bf Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Tue, 6 Jan 2026 18:06:01 +0700 Subject: [PATCH 3/5] clean up notice --- src/Rector/Rector/MethodCall/StaticConnectionHelperRector.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Rector/Rector/MethodCall/StaticConnectionHelperRector.php b/src/Rector/Rector/MethodCall/StaticConnectionHelperRector.php index a296a34..0de1090 100644 --- a/src/Rector/Rector/MethodCall/StaticConnectionHelperRector.php +++ b/src/Rector/Rector/MethodCall/StaticConnectionHelperRector.php @@ -43,7 +43,7 @@ public function getNodeTypes(): array return [Expression::class, MethodCall::class]; } - public function refactor(Node $node): null|int|Node + public function refactor(Node $node): int|Node|null { if ($node instanceof Expression) { if ($node->expr instanceof Assign && $node->expr->expr instanceof New_ && $this->isName($node->expr->expr->class, 'ConnectionHelper')) { From 459bcb682da6c4103a53f4417be28dfb5129b797 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Tue, 6 Jan 2026 18:06:30 +0700 Subject: [PATCH 4/5] cs fix --- .../Rector/MethodCall/StaticConnectionHelperRector.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Rector/Rector/MethodCall/StaticConnectionHelperRector.php b/src/Rector/Rector/MethodCall/StaticConnectionHelperRector.php index 0de1090..4e2abc8 100644 --- a/src/Rector/Rector/MethodCall/StaticConnectionHelperRector.php +++ b/src/Rector/Rector/MethodCall/StaticConnectionHelperRector.php @@ -46,7 +46,11 @@ public function getNodeTypes(): array public function refactor(Node $node): int|Node|null { if ($node instanceof Expression) { - if ($node->expr instanceof Assign && $node->expr->expr instanceof New_ && $this->isName($node->expr->expr->class, 'ConnectionHelper')) { + if ( + $node->expr instanceof Assign && + $node->expr->expr instanceof New_ && + $this->isName($node->expr->expr->class, 'ConnectionHelper') + ) { return NodeVisitor::REMOVE_NODE; } From f6d266b4f23688a90990c3a87b5f6514f0f4469b Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Tue, 6 Jan 2026 18:09:29 +0700 Subject: [PATCH 5/5] Fix use of Cake\TestSuite\ConnectionHelper --- src/Rector/Rector/MethodCall/StaticConnectionHelperRector.php | 4 ++-- .../StaticConnectionHelperRector/Fixture/fixture.php.inc | 2 +- .../upgraded/RectorCommand-testApply51/src/SomeTest.php | 1 - 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Rector/Rector/MethodCall/StaticConnectionHelperRector.php b/src/Rector/Rector/MethodCall/StaticConnectionHelperRector.php index 4e2abc8..03fa99c 100644 --- a/src/Rector/Rector/MethodCall/StaticConnectionHelperRector.php +++ b/src/Rector/Rector/MethodCall/StaticConnectionHelperRector.php @@ -49,7 +49,7 @@ public function refactor(Node $node): int|Node|null if ( $node->expr instanceof Assign && $node->expr->expr instanceof New_ && - $this->isName($node->expr->expr->class, 'ConnectionHelper') + $this->isName($node->expr->expr->class, ConnectionHelper::class) ) { return NodeVisitor::REMOVE_NODE; } @@ -58,7 +58,7 @@ public function refactor(Node $node): int|Node|null } // Ensure the node is a method call on the ConnectionHelper instance - if (! $this->isObjectType($node->var, new ObjectType('ConnectionHelper'))) { + if (! $this->isObjectType($node->var, new ObjectType(ConnectionHelper::class))) { return null; } diff --git a/tests/TestCase/Rector/MethodCall/StaticConnectionHelperRector/Fixture/fixture.php.inc b/tests/TestCase/Rector/MethodCall/StaticConnectionHelperRector/Fixture/fixture.php.inc index b0a783f..15307b6 100644 --- a/tests/TestCase/Rector/MethodCall/StaticConnectionHelperRector/Fixture/fixture.php.inc +++ b/tests/TestCase/Rector/MethodCall/StaticConnectionHelperRector/Fixture/fixture.php.inc @@ -6,7 +6,7 @@ class Fixture { public function run() { - $connectionHelper = new \ConnectionHelper(); + $connectionHelper = new \Cake\TestSuite\ConnectionHelper(); $connection = $connectionHelper->getConnection('default'); return $connection; diff --git a/tests/test_apps/upgraded/RectorCommand-testApply51/src/SomeTest.php b/tests/test_apps/upgraded/RectorCommand-testApply51/src/SomeTest.php index 5906488..32955fd 100644 --- a/tests/test_apps/upgraded/RectorCommand-testApply51/src/SomeTest.php +++ b/tests/test_apps/upgraded/RectorCommand-testApply51/src/SomeTest.php @@ -27,7 +27,6 @@ public function testSomething() public function testConnectionHelper() { - $connectionHelper = new ConnectionHelper(); $connection = ConnectionManager::get('test'); \Cake\TestSuite\ConnectionHelper::runWithoutConstraints($connection, function ($connection) { $connection->execute('SELECT * FROM table');