[DeadCode] Skip RemoveUnusedVariableAssignRector on assign to dynamic variable (#1884)

Co-authored-by: Jack Leigh <leighman@users.noreply.github.com>
This commit is contained in:
Abdul Malik Ikhsan 2022-03-01 17:00:51 +07:00 committed by GitHub
parent 2ad95b64eb
commit 10de06f33f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 2 deletions

View File

@ -0,0 +1,14 @@
<?php
namespace Rector\Tests\DeadCode\Rector\Assign\RemoveUnusedVariableAssignRector\Fixture;
final class SkipDynamicVariable
{
public function run($something)
{
foreach($something as $key => $mapped)
{
${$key . "_key"} = $mapped;
}
}
}

View File

@ -25,6 +25,7 @@ use Rector\DeadCode\NodeAnalyzer\ExprUsedInNextNodeAnalyzer;
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 @@ final class RemoveUnusedVariableAssignRector extends AbstractRector
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 @@ CODE_SAMPLE
}
if (! $variable->name instanceof Variable) {
return false;
return $this->followedByCurlyBracketAnalyzer->isFollowed($this->file, $variable);
}
return (bool) $this->betterNodeFinder->findFirstNext(