From f5530eb2bf204f13f7b469a0f7253cfc612d57d4 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Mon, 29 Sep 2025 03:42:19 +0700 Subject: [PATCH] [TypeDeclaration] Allow named arg on AddParamArrayDocblockBasedOnCallableNativeFuncCallRector --- .../Fixture/with_named_arg.php.inc | 38 +++++++++++++++++++ ...ockBasedOnCallableNativeFuncCallRector.php | 20 ++++++---- 2 files changed, 50 insertions(+), 8 deletions(-) create mode 100644 rules-tests/TypeDeclaration/Rector/ClassMethod/AddParamArrayDocblockBasedOnCallableNativeFuncCallRector/Fixture/with_named_arg.php.inc diff --git a/rules-tests/TypeDeclaration/Rector/ClassMethod/AddParamArrayDocblockBasedOnCallableNativeFuncCallRector/Fixture/with_named_arg.php.inc b/rules-tests/TypeDeclaration/Rector/ClassMethod/AddParamArrayDocblockBasedOnCallableNativeFuncCallRector/Fixture/with_named_arg.php.inc new file mode 100644 index 00000000000..d197660664d --- /dev/null +++ b/rules-tests/TypeDeclaration/Rector/ClassMethod/AddParamArrayDocblockBasedOnCallableNativeFuncCallRector/Fixture/with_named_arg.php.inc @@ -0,0 +1,38 @@ +value; + }, array: $items); + } +} + +?> +----- +value; + }, array: $items); + } +} + +?> diff --git a/rules/TypeDeclaration/Rector/ClassMethod/AddParamArrayDocblockBasedOnCallableNativeFuncCallRector.php b/rules/TypeDeclaration/Rector/ClassMethod/AddParamArrayDocblockBasedOnCallableNativeFuncCallRector.php index 555208554d1..b63911a6e1c 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/AddParamArrayDocblockBasedOnCallableNativeFuncCallRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/AddParamArrayDocblockBasedOnCallableNativeFuncCallRector.php @@ -5,6 +5,7 @@ namespace Rector\TypeDeclaration\Rector\ClassMethod; use PhpParser\Node; +use PhpParser\Node\Arg; use PhpParser\Node\Expr\ArrowFunction; use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\FuncCall; @@ -22,7 +23,6 @@ use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger; -use Rector\NodeAnalyzer\ArgsAnalyzer; use Rector\Rector\AbstractRector; use Rector\StaticTypeMapper\StaticTypeMapper; use Rector\TypeDeclaration\Enum\NativeFuncCallPositions; @@ -36,7 +36,6 @@ final class AddParamArrayDocblockBasedOnCallableNativeFuncCallRector extends Abs { public function __construct( private readonly PhpDocInfoFactory $phpDocInfoFactory, - private readonly ArgsAnalyzer $argsAnalyzer, private readonly PhpDocTypeChanger $phpDocTypeChanger, private readonly StaticTypeMapper $staticTypeMapper ) { @@ -119,17 +118,18 @@ function (Node $subNode) use ($variableNamesWithArrayType, $node, &$paramsWithTy } $args = $subNode->getArgs(); - if ($this->argsAnalyzer->hasNamedArg($args)) { - return null; - } - if (count($args) < 2) { return null; } $funcCallName = (string) $this->getName($subNode); - $arrayArgValue = $args[NativeFuncCallPositions::ARRAY_AND_CALLBACK_POSITIONS[$funcCallName]['array']]->value; + $arrayArg = $subNode->getArg('array', NativeFuncCallPositions::ARRAY_AND_CALLBACK_POSITIONS[$funcCallName]['array']); + if (! $arrayArg instanceof Arg) { + return null; + } + + $arrayArgValue = $arrayArg->value; if (! $arrayArgValue instanceof Variable) { return null; } @@ -146,8 +146,12 @@ function (Node $subNode) use ($variableNamesWithArrayType, $node, &$paramsWithTy return null; } - $callbackArgValue = $args[NativeFuncCallPositions::ARRAY_AND_CALLBACK_POSITIONS[$funcCallName]['callback']]->value; + $callbackArg = $subNode->getArg('callback', NativeFuncCallPositions::ARRAY_AND_CALLBACK_POSITIONS[$funcCallName]['callback']); + if (! $callbackArg instanceof Arg) { + return null; + } + $callbackArgValue = $callbackArg->value; if (! $callbackArgValue instanceof ArrowFunction && ! $callbackArgValue instanceof Closure) { return null; }