diff --git a/rules-tests/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector/Fixture/no_params_duplicated_in_use.php.inc b/rules-tests/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector/Fixture/no_params_duplicated_in_use.php.inc new file mode 100644 index 00000000..096855f9 --- /dev/null +++ b/rules-tests/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector/Fixture/no_params_duplicated_in_use.php.inc @@ -0,0 +1,89 @@ + $param; + } + + public function singleArrayAssignment() + { + $callable = fn($param) => $arr[] = $param; + } + + public function multiple() + { + $callable = fn($param, $param2) => $param + $param2; + } + + public function multipleArrayAssignment() + { + $callable = fn($param, $param2) => $arr[] = $param + $param2; + } + + public function mixed() + { + $callable = fn($param) => $param + $param2; + } + + public function mixedArrayAssignment() + { + $callable = fn($param) => $arr[] = $param + $param2; + } +} + +?> +----- + diff --git a/rules/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector.php b/rules/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector.php index b45f3fc8..a2d471a8 100644 --- a/rules/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector.php +++ b/rules/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector.php @@ -98,7 +98,17 @@ public function refactor(Node $node): Closure ); if (! $isFound) { - $anonymousFunctionFactory->uses[] = new ClosureUse($node->expr->expr); + $isAlsoParam = in_array( + $node->expr->expr->name, + array_map( + static fn ($param) => $param->var instanceof Variable ? $param->var->name : null, + $node->params + ) + ); + + if (! $isAlsoParam) { + $anonymousFunctionFactory->uses[] = new ClosureUse($node->expr->expr); + } } }