From 5ebf2414c4d2cef7bb2c750a30cb5e41625683ad Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Mon, 17 Feb 2020 01:24:19 +0100 Subject: [PATCH] fix remove alwasy else for anonymous function jump --- rules/solid/src/Rector/If_/RemoveAlwaysElseRector.php | 4 ++++ .../Fixture/function_foreach_continue.php.inc | 1 - src/PhpParser/Node/Commander/NodeAddingCommander.php | 6 ++---- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/rules/solid/src/Rector/If_/RemoveAlwaysElseRector.php b/rules/solid/src/Rector/If_/RemoveAlwaysElseRector.php index e161a3924c21..545408927b1f 100644 --- a/rules/solid/src/Rector/If_/RemoveAlwaysElseRector.php +++ b/rules/solid/src/Rector/If_/RemoveAlwaysElseRector.php @@ -73,14 +73,18 @@ public function refactor(Node $node): ?Node if ($this->lastStatementBreaksFlow($node)) { return null; } + if ($node->elseifs !== []) { $newNode = new If_($node->cond); $newNode->stmts = $node->stmts; + $this->addNodeBeforeNode($newNode, $node); + /** @var ElseIf_ $firstElseIf */ $firstElseIf = array_shift($node->elseifs); $node->cond = $firstElseIf->cond; $node->stmts = $firstElseIf->stmts; + return $node; } diff --git a/rules/solid/tests/Rector/If_/RemoveAlwaysElseRector/Fixture/function_foreach_continue.php.inc b/rules/solid/tests/Rector/If_/RemoveAlwaysElseRector/Fixture/function_foreach_continue.php.inc index a54fb252bd3e..88b6df5757d5 100644 --- a/rules/solid/tests/Rector/If_/RemoveAlwaysElseRector/Fixture/function_foreach_continue.php.inc +++ b/rules/solid/tests/Rector/If_/RemoveAlwaysElseRector/Fixture/function_foreach_continue.php.inc @@ -33,7 +33,6 @@ class FunctionForeachContinue if ($flag && empty($key)) { continue; } - if (empty($val)) { $val = $key; } diff --git a/src/PhpParser/Node/Commander/NodeAddingCommander.php b/src/PhpParser/Node/Commander/NodeAddingCommander.php index b2986d749d8c..45429aa5aec9 100644 --- a/src/PhpParser/Node/Commander/NodeAddingCommander.php +++ b/src/PhpParser/Node/Commander/NodeAddingCommander.php @@ -8,12 +8,12 @@ use PhpParser\Node\Expr; use PhpParser\Node\Stmt; use PhpParser\Node\Stmt\Expression; +use PhpParser\Node\Stmt\If_; use PhpParser\NodeTraverser; use PhpParser\NodeVisitor; use PhpParser\NodeVisitorAbstract; use Rector\Core\Contract\PhpParser\Node\CommanderInterface; use Rector\Core\PhpParser\Node\BetterNodeFinder; -use Rector\NodeTypeResolver\Node\AttributeKey; /** * This class collects all to-be-added expresssions (= 1 line in code) @@ -94,9 +94,7 @@ private function resolveNearestExpressionPosition(Node $node): string } // special case for "If_" - $parentNode = $node->getAttribute(AttributeKey::CURRENT_STATEMENT); - - if ($parentNode === null) { + if ($node instanceof If_) { return spl_object_hash($node); }