From dc19c4d7eada84754ea7add806f761d142ed172f Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Sun, 5 Oct 2025 20:56:21 +0700 Subject: [PATCH 1/2] [DeadCode] Skip used via compact() on RemoveUnusedClosureVariableUseRector --- .../Fixture/skip_used_via_func_get_arg.php.inc | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 rules-tests/DeadCode/Rector/Closure/RemoveUnusedClosureVariableUseRector/Fixture/skip_used_via_func_get_arg.php.inc diff --git a/rules-tests/DeadCode/Rector/Closure/RemoveUnusedClosureVariableUseRector/Fixture/skip_used_via_func_get_arg.php.inc b/rules-tests/DeadCode/Rector/Closure/RemoveUnusedClosureVariableUseRector/Fixture/skip_used_via_func_get_arg.php.inc new file mode 100644 index 00000000000..7c955712180 --- /dev/null +++ b/rules-tests/DeadCode/Rector/Closure/RemoveUnusedClosureVariableUseRector/Fixture/skip_used_via_func_get_arg.php.inc @@ -0,0 +1,18 @@ + Date: Sun, 5 Oct 2025 21:05:50 +0700 Subject: [PATCH 2/2] Fix --- .../Concat/RemoveUnusedClosureVariableUseRector.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/rules/DeadCode/Rector/Concat/RemoveUnusedClosureVariableUseRector.php b/rules/DeadCode/Rector/Concat/RemoveUnusedClosureVariableUseRector.php index f6322046f11..b3de1ff6c82 100644 --- a/rules/DeadCode/Rector/Concat/RemoveUnusedClosureVariableUseRector.php +++ b/rules/DeadCode/Rector/Concat/RemoveUnusedClosureVariableUseRector.php @@ -6,6 +6,7 @@ use PhpParser\Node; use PhpParser\Node\Expr\Closure; +use Rector\DeadCode\NodeAnalyzer\ExprUsedInNodeAnalyzer; use Rector\PhpParser\Node\BetterNodeFinder; use Rector\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -17,7 +18,8 @@ final class RemoveUnusedClosureVariableUseRector extends AbstractRector { public function __construct( - private readonly BetterNodeFinder $betterNodeFinder + private readonly BetterNodeFinder $betterNodeFinder, + private readonly ExprUsedInNodeAnalyzer $exprUsedInNodeAnalyzer ) { } @@ -72,7 +74,10 @@ public function refactor(Node $node): ?Node continue; } - $isUseUsed = (bool) $this->betterNodeFinder->findVariableOfName($node->stmts, $useVariableName); + $isUseUsed = (bool) $this->betterNodeFinder->findFirst( + $node->stmts, + fn (Node $subNode): bool => $this->exprUsedInNodeAnalyzer->isUsed($subNode, $useVariable->var) + ); if ($isUseUsed) { continue; }