From 0d47d4cae32543261df58c829f7d37892c198001 Mon Sep 17 00:00:00 2001 From: Bryan Nielsen Date: Wed, 19 Mar 2025 16:59:43 -0400 Subject: [PATCH 1/5] Check for variable name in parameters before adding to uses --- .../ArrowFunctionToAnonymousFunctionRector.php | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/rules/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector.php b/rules/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector.php index b45f3fc8..7dfe8ec3 100644 --- a/rules/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector.php +++ b/rules/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector.php @@ -98,7 +98,16 @@ public function refactor(Node $node): Closure ); if (! $isFound) { - $anonymousFunctionFactory->uses[] = new ClosureUse($node->expr->expr); + $isAlsoParam = in_array( + $node->expr->expr->name, + array_map(function($param) { + return $param->var->name; + }, $node->params) + ); + + if (! $isAlsoParam) { + $anonymousFunctionFactory->uses[] = new ClosureUse($node->expr->expr); + } } } From 7d6e9880668c2d232ecb4fe24bea2a6f69261d7e Mon Sep 17 00:00:00 2001 From: Bryan Nielsen Date: Wed, 19 Mar 2025 20:23:45 -0400 Subject: [PATCH 2/5] Add test for variable duplicated in parameter and use --- .../no_params_duplicated_in_use.php.inc | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 rules-tests/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector/Fixture/no_params_duplicated_in_use.php.inc 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; + } +} + +?> +----- + From ea5ccb7204107a495905c5e8d8d08c508bfb76a6 Mon Sep 17 00:00:00 2001 From: Bryan Nielsen Date: Thu, 20 Mar 2025 09:47:57 -0400 Subject: [PATCH 3/5] Resolve undefined property access error --- .../ArrowFunction/ArrowFunctionToAnonymousFunctionRector.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector.php b/rules/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector.php index 7dfe8ec3..c6766614 100644 --- a/rules/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector.php +++ b/rules/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector.php @@ -101,7 +101,7 @@ public function refactor(Node $node): Closure $isAlsoParam = in_array( $node->expr->expr->name, array_map(function($param) { - return $param->var->name; + return $param->var instanceof Variable ? $param->var->name : null; }, $node->params) ); From a0e55bf02b5d9409cc7f7c14f86c0ad14f226ae4 Mon Sep 17 00:00:00 2001 From: Bryan Nielsen Date: Thu, 27 Mar 2025 13:36:33 -0400 Subject: [PATCH 4/5] Fix coding style --- .../ArrowFunction/ArrowFunctionToAnonymousFunctionRector.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/rules/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector.php b/rules/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector.php index c6766614..4bf1b89c 100644 --- a/rules/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector.php +++ b/rules/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector.php @@ -100,9 +100,7 @@ public function refactor(Node $node): Closure if (! $isFound) { $isAlsoParam = in_array( $node->expr->expr->name, - array_map(function($param) { - return $param->var instanceof Variable ? $param->var->name : null; - }, $node->params) + array_map(static fn ($param) => $param->var instanceof Variable ? $param->var->name : null, $node->params) ); if (! $isAlsoParam) { From 865bc4e60f171f0b7a0b384a54467f79c6165d1d Mon Sep 17 00:00:00 2001 From: Bryan Nielsen Date: Thu, 27 Mar 2025 14:17:39 -0400 Subject: [PATCH 5/5] Fix coding style --- .../ArrowFunction/ArrowFunctionToAnonymousFunctionRector.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/rules/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector.php b/rules/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector.php index 4bf1b89c..a2d471a8 100644 --- a/rules/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector.php +++ b/rules/DowngradePhp74/Rector/ArrowFunction/ArrowFunctionToAnonymousFunctionRector.php @@ -100,7 +100,10 @@ public function refactor(Node $node): Closure if (! $isFound) { $isAlsoParam = in_array( $node->expr->expr->name, - array_map(static fn ($param) => $param->var instanceof Variable ? $param->var->name : null, $node->params) + array_map( + static fn ($param) => $param->var instanceof Variable ? $param->var->name : null, + $node->params + ) ); if (! $isAlsoParam) {