diff --git a/rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php b/rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php index f5324f669be..45d297514e6 100644 --- a/rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php +++ b/rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php @@ -15,6 +15,7 @@ use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Expression; use PHPStan\Analyser\Scope; +use Rector\Core\NodeAnalyzer\VariableAnalyzer; use Rector\Core\Php\ReservedKeywordAnalyzer; use Rector\Core\Rector\AbstractScopeAwareRector; use Rector\DeadCode\SideEffect\SideEffectNodeDetector; @@ -30,6 +31,7 @@ final class RemoveUnusedVariableAssignRector extends AbstractScopeAwareRector public function __construct( private readonly ReservedKeywordAnalyzer $reservedKeywordAnalyzer, private readonly SideEffectNodeDetector $sideEffectNodeDetector, + private readonly VariableAnalyzer $variableAnalyzer ) { } @@ -217,6 +219,14 @@ private function resolvedAssignedVariablesByStmtPosition(array $stmts): array continue; } + if ($this->variableAnalyzer->isStaticOrGlobal($assign->var)) { + continue; + } + + if ($this->variableAnalyzer->isUsedByReference($assign->var)) { + continue; + } + $assignedVariableNamesByStmtPosition[$key] = $variableName; } diff --git a/src/Kernel/RectorKernel.php b/src/Kernel/RectorKernel.php index d76182c3905..71d933c0d47 100644 --- a/src/Kernel/RectorKernel.php +++ b/src/Kernel/RectorKernel.php @@ -17,7 +17,7 @@ final class RectorKernel /** * @var string */ - private const CACHE_KEY = 'v23'; + private const CACHE_KEY = 'v24'; private ContainerInterface|null $container = null; diff --git a/tests/Issues/RemoveUnusedVariableDefault/Fixture/skip_use_static.php.inc b/tests/Issues/RemoveUnusedVariableDefault/Fixture/skip_use_static.php.inc new file mode 100644 index 00000000000..a87e89126b1 --- /dev/null +++ b/tests/Issues/RemoveUnusedVariableDefault/Fixture/skip_use_static.php.inc @@ -0,0 +1,24 @@ + diff --git a/tests/Issues/RemoveUnusedVariableDefault/RemoveUnusedVariableDefaultTest.php b/tests/Issues/RemoveUnusedVariableDefault/RemoveUnusedVariableDefaultTest.php new file mode 100644 index 00000000000..05efb1d78f5 --- /dev/null +++ b/tests/Issues/RemoveUnusedVariableDefault/RemoveUnusedVariableDefaultTest.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/RemoveUnusedVariableDefault/config/configured_rule.php b/tests/Issues/RemoveUnusedVariableDefault/config/configured_rule.php new file mode 100644 index 00000000000..3d18e769432 --- /dev/null +++ b/tests/Issues/RemoveUnusedVariableDefault/config/configured_rule.php @@ -0,0 +1,13 @@ +rules([ + RemoveUnusedVariableAssignRector::class, + AddDefaultValueForUndefinedVariableRector::class + ]); +};