From 33db4118abd76af6b6437e797a7941c87949d8a5 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Sun, 21 Dec 2025 15:42:18 +0700 Subject: [PATCH 1/2] [internal] Fix inline replace block removal not removed on deep block for InlineIfToExplicitIfRector + ReplaceBlockToItsStmtsRector --- .../Fixture/fixture.php.inc | 31 +++++++++++++++++++ .../InlineIfReplaceBlockTest.php | 28 +++++++++++++++++ .../config/configured_rule.php | 10 ++++++ 3 files changed, 69 insertions(+) create mode 100644 tests/Issues/InlineIfReplaceBlock/Fixture/fixture.php.inc create mode 100644 tests/Issues/InlineIfReplaceBlock/InlineIfReplaceBlockTest.php create mode 100644 tests/Issues/InlineIfReplaceBlock/config/configured_rule.php diff --git a/tests/Issues/InlineIfReplaceBlock/Fixture/fixture.php.inc b/tests/Issues/InlineIfReplaceBlock/Fixture/fixture.php.inc new file mode 100644 index 00000000000..5b885c93241 --- /dev/null +++ b/tests/Issues/InlineIfReplaceBlock/Fixture/fixture.php.inc @@ -0,0 +1,31 @@ + +----- + diff --git a/tests/Issues/InlineIfReplaceBlock/InlineIfReplaceBlockTest.php b/tests/Issues/InlineIfReplaceBlock/InlineIfReplaceBlockTest.php new file mode 100644 index 00000000000..b8c554fada0 --- /dev/null +++ b/tests/Issues/InlineIfReplaceBlock/InlineIfReplaceBlockTest.php @@ -0,0 +1,28 @@ +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/Issues/InlineIfReplaceBlock/config/configured_rule.php b/tests/Issues/InlineIfReplaceBlock/config/configured_rule.php new file mode 100644 index 00000000000..46ff9c42981 --- /dev/null +++ b/tests/Issues/InlineIfReplaceBlock/config/configured_rule.php @@ -0,0 +1,10 @@ +withRules([InlineIfToExplicitIfRector::class, ReplaceBlockToItsStmtsRector::class]); From 94375d1833312cba5dbdd074891d5f9baa05ed28 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Sun, 21 Dec 2025 15:44:45 +0700 Subject: [PATCH 2/2] Fix --- src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php b/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php index 0015c3ba50a..c20c0a94499 100644 --- a/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php +++ b/src/PhpParser/NodeTraverser/AbstractImmutableNodeTraverser.php @@ -197,7 +197,7 @@ protected function traverseArray(array $nodes): array if ($originalNodeNodeClass !== $return::class) { // stop traversing as node type changed and visitors won't work - return $nodes; + continue 2; } } elseif (\is_array($return)) { $doNodes[] = [$i, $return];