From 3753b2da5087d2c573ff13ce467520ce96d4f1b5 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Sun, 10 Aug 2025 00:42:38 +0700 Subject: [PATCH 1/3] [TypeDeclaration] Handle crash on direct callable with single arg on AddArrayFunctionClosureParamTypeRector --- .../skip_direct_callable_only_single_arg.php.inc | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 rules-tests/TypeDeclaration/Rector/FuncCall/AddArrayFunctionClosureParamTypeRector/Fixture/skip_direct_callable_only_single_arg.php.inc diff --git a/rules-tests/TypeDeclaration/Rector/FuncCall/AddArrayFunctionClosureParamTypeRector/Fixture/skip_direct_callable_only_single_arg.php.inc b/rules-tests/TypeDeclaration/Rector/FuncCall/AddArrayFunctionClosureParamTypeRector/Fixture/skip_direct_callable_only_single_arg.php.inc new file mode 100644 index 00000000000..4742d8e797e --- /dev/null +++ b/rules-tests/TypeDeclaration/Rector/FuncCall/AddArrayFunctionClosureParamTypeRector/Fixture/skip_direct_callable_only_single_arg.php.inc @@ -0,0 +1,11 @@ + random_int(1, 100), range(0, 23)); + } +} From bacac67d4054bcbcc0e94d9a6591e30a8530d927 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Sun, 10 Aug 2025 00:45:43 +0700 Subject: [PATCH 2/3] fixture --- ....php.inc => skip_direct_callable_with_range_2nd_arg.php.inc} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename rules-tests/TypeDeclaration/Rector/FuncCall/AddArrayFunctionClosureParamTypeRector/Fixture/{skip_direct_callable_only_single_arg.php.inc => skip_direct_callable_with_range_2nd_arg.php.inc} (84%) diff --git a/rules-tests/TypeDeclaration/Rector/FuncCall/AddArrayFunctionClosureParamTypeRector/Fixture/skip_direct_callable_only_single_arg.php.inc b/rules-tests/TypeDeclaration/Rector/FuncCall/AddArrayFunctionClosureParamTypeRector/Fixture/skip_direct_callable_with_range_2nd_arg.php.inc similarity index 84% rename from rules-tests/TypeDeclaration/Rector/FuncCall/AddArrayFunctionClosureParamTypeRector/Fixture/skip_direct_callable_only_single_arg.php.inc rename to rules-tests/TypeDeclaration/Rector/FuncCall/AddArrayFunctionClosureParamTypeRector/Fixture/skip_direct_callable_with_range_2nd_arg.php.inc index 4742d8e797e..bd1af532425 100644 --- a/rules-tests/TypeDeclaration/Rector/FuncCall/AddArrayFunctionClosureParamTypeRector/Fixture/skip_direct_callable_only_single_arg.php.inc +++ b/rules-tests/TypeDeclaration/Rector/FuncCall/AddArrayFunctionClosureParamTypeRector/Fixture/skip_direct_callable_with_range_2nd_arg.php.inc @@ -2,7 +2,7 @@ namespace Rector\Tests\TypeDeclaration\Rector\FuncCall\AddArrayFunctionClosureParamTypeRector\Fixture; -final class SkipDirectCallableOnlySingleArg +final class SkipDirectCallableWithRange2ndArg { public function getRandomData(): array { From 26019e105dc7da1e98fdc19dbf6b6027e5ffaaa9 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Sun, 10 Aug 2025 00:48:05 +0700 Subject: [PATCH 3/3] fix --- ...rg.php.inc => skip_direct_callable_without_params.php.inc} | 2 +- .../FuncCall/AddArrayFunctionClosureParamTypeRector.php | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) rename rules-tests/TypeDeclaration/Rector/FuncCall/AddArrayFunctionClosureParamTypeRector/Fixture/{skip_direct_callable_with_range_2nd_arg.php.inc => skip_direct_callable_without_params.php.inc} (84%) diff --git a/rules-tests/TypeDeclaration/Rector/FuncCall/AddArrayFunctionClosureParamTypeRector/Fixture/skip_direct_callable_with_range_2nd_arg.php.inc b/rules-tests/TypeDeclaration/Rector/FuncCall/AddArrayFunctionClosureParamTypeRector/Fixture/skip_direct_callable_without_params.php.inc similarity index 84% rename from rules-tests/TypeDeclaration/Rector/FuncCall/AddArrayFunctionClosureParamTypeRector/Fixture/skip_direct_callable_with_range_2nd_arg.php.inc rename to rules-tests/TypeDeclaration/Rector/FuncCall/AddArrayFunctionClosureParamTypeRector/Fixture/skip_direct_callable_without_params.php.inc index bd1af532425..57bb8e3bcc7 100644 --- a/rules-tests/TypeDeclaration/Rector/FuncCall/AddArrayFunctionClosureParamTypeRector/Fixture/skip_direct_callable_with_range_2nd_arg.php.inc +++ b/rules-tests/TypeDeclaration/Rector/FuncCall/AddArrayFunctionClosureParamTypeRector/Fixture/skip_direct_callable_without_params.php.inc @@ -2,7 +2,7 @@ namespace Rector\Tests\TypeDeclaration\Rector\FuncCall\AddArrayFunctionClosureParamTypeRector\Fixture; -final class SkipDirectCallableWithRange2ndArg +final class SkipDirectCallableWithoutParams { public function getRandomData(): array { diff --git a/rules/TypeDeclaration/Rector/FuncCall/AddArrayFunctionClosureParamTypeRector.php b/rules/TypeDeclaration/Rector/FuncCall/AddArrayFunctionClosureParamTypeRector.php index f9eb8e497de..4f73805460b 100644 --- a/rules/TypeDeclaration/Rector/FuncCall/AddArrayFunctionClosureParamTypeRector.php +++ b/rules/TypeDeclaration/Rector/FuncCall/AddArrayFunctionClosureParamTypeRector.php @@ -92,6 +92,10 @@ public function refactor(Node $node): ?Node continue; } + if (count($firstArgExpr->getParams()) !== 1) { + continue; + } + $arrowFunction = $firstArgExpr; $arrowFunctionParam = $arrowFunction->getParams()[0];