From 10de06f33fd090baa4bb7e5743ef4a525779ad88 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Tue, 1 Mar 2022 17:00:51 +0700 Subject: [PATCH] [DeadCode] Skip RemoveUnusedVariableAssignRector on assign to dynamic variable (#1884) Co-authored-by: Jack Leigh --- .../Fixture/skip_dynamic_variables.php.inc | 14 ++++++++++++++ .../Assign/RemoveUnusedVariableAssignRector.php | 6 ++++-- 2 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 rules-tests/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector/Fixture/skip_dynamic_variables.php.inc diff --git a/rules-tests/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector/Fixture/skip_dynamic_variables.php.inc b/rules-tests/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector/Fixture/skip_dynamic_variables.php.inc new file mode 100644 index 00000000000..99332345401 --- /dev/null +++ b/rules-tests/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector/Fixture/skip_dynamic_variables.php.inc @@ -0,0 +1,14 @@ + $mapped) + { + ${$key . "_key"} = $mapped; + } + } +} diff --git a/rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php b/rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php index e297618634e..b3181d9f8c2 100644 --- a/rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php +++ b/rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php @@ -25,6 +25,7 @@ use Rector\DeadCode\NodeAnalyzer\UsedVariableNameAnalyzer; use Rector\DeadCode\SideEffect\SideEffectNodeDetector; use Rector\NodeTypeResolver\Node\AttributeKey; +use Rector\Php74\Tokenizer\FollowedByCurlyBracketAnalyzer; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; @@ -38,7 +39,8 @@ public function __construct( private readonly ConditionSearcher $conditionSearcher, private readonly UsedVariableNameAnalyzer $usedVariableNameAnalyzer, private readonly SideEffectNodeDetector $sideEffectNodeDetector, - private readonly ExprUsedInNextNodeAnalyzer $exprUsedInNextNodeAnalyzer + private readonly ExprUsedInNextNodeAnalyzer $exprUsedInNextNodeAnalyzer, + private readonly FollowedByCurlyBracketAnalyzer $followedByCurlyBracketAnalyzer ) { } @@ -135,7 +137,7 @@ private function shouldSkip(Assign $assign): bool } if (! $variable->name instanceof Variable) { - return false; + return $this->followedByCurlyBracketAnalyzer->isFollowed($this->file, $variable); } return (bool) $this->betterNodeFinder->findFirstNext(