Skip to content

Commit e220b9f

Browse files
authored
[TypeDeclaration] Allow named arg on AddParamArrayDocblockBasedOnCallableNativeFuncCallRector (#7359)
1 parent b8a8366 commit e220b9f

File tree

2 files changed

+50
-8
lines changed

2 files changed

+50
-8
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
namespace Rector\Tests\TypeDeclaration\Rector\ClassMethod\AddParamArrayDocblockBasedOnCallableNativeFuncCallRector\Fixture;
4+
5+
use stdClass;
6+
7+
final class WithNamedArg
8+
{
9+
public function process(array $items): void
10+
{
11+
array_walk(callback: function (stdClass $item) {
12+
echo $item->value;
13+
}, array: $items);
14+
}
15+
}
16+
17+
?>
18+
-----
19+
<?php
20+
21+
namespace Rector\Tests\TypeDeclaration\Rector\ClassMethod\AddParamArrayDocblockBasedOnCallableNativeFuncCallRector\Fixture;
22+
23+
use stdClass;
24+
25+
final class WithNamedArg
26+
{
27+
/**
28+
* @param \stdClass[] $items
29+
*/
30+
public function process(array $items): void
31+
{
32+
array_walk(callback: function (stdClass $item) {
33+
echo $item->value;
34+
}, array: $items);
35+
}
36+
}
37+
38+
?>

rules/TypeDeclaration/Rector/ClassMethod/AddParamArrayDocblockBasedOnCallableNativeFuncCallRector.php

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Rector\TypeDeclaration\Rector\ClassMethod;
66

77
use PhpParser\Node;
8+
use PhpParser\Node\Arg;
89
use PhpParser\Node\Expr\ArrowFunction;
910
use PhpParser\Node\Expr\Closure;
1011
use PhpParser\Node\Expr\FuncCall;
@@ -22,7 +23,6 @@
2223
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo;
2324
use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory;
2425
use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger;
25-
use Rector\NodeAnalyzer\ArgsAnalyzer;
2626
use Rector\Rector\AbstractRector;
2727
use Rector\StaticTypeMapper\StaticTypeMapper;
2828
use Rector\TypeDeclaration\Enum\NativeFuncCallPositions;
@@ -36,7 +36,6 @@ final class AddParamArrayDocblockBasedOnCallableNativeFuncCallRector extends Abs
3636
{
3737
public function __construct(
3838
private readonly PhpDocInfoFactory $phpDocInfoFactory,
39-
private readonly ArgsAnalyzer $argsAnalyzer,
4039
private readonly PhpDocTypeChanger $phpDocTypeChanger,
4140
private readonly StaticTypeMapper $staticTypeMapper
4241
) {
@@ -119,17 +118,18 @@ function (Node $subNode) use ($variableNamesWithArrayType, $node, &$paramsWithTy
119118
}
120119

121120
$args = $subNode->getArgs();
122-
if ($this->argsAnalyzer->hasNamedArg($args)) {
123-
return null;
124-
}
125-
126121
if (count($args) < 2) {
127122
return null;
128123
}
129124

130125
$funcCallName = (string) $this->getName($subNode);
131126

132-
$arrayArgValue = $args[NativeFuncCallPositions::ARRAY_AND_CALLBACK_POSITIONS[$funcCallName]['array']]->value;
127+
$arrayArg = $subNode->getArg('array', NativeFuncCallPositions::ARRAY_AND_CALLBACK_POSITIONS[$funcCallName]['array']);
128+
if (! $arrayArg instanceof Arg) {
129+
return null;
130+
}
131+
132+
$arrayArgValue = $arrayArg->value;
133133
if (! $arrayArgValue instanceof Variable) {
134134
return null;
135135
}
@@ -146,8 +146,12 @@ function (Node $subNode) use ($variableNamesWithArrayType, $node, &$paramsWithTy
146146
return null;
147147
}
148148

149-
$callbackArgValue = $args[NativeFuncCallPositions::ARRAY_AND_CALLBACK_POSITIONS[$funcCallName]['callback']]->value;
149+
$callbackArg = $subNode->getArg('callback', NativeFuncCallPositions::ARRAY_AND_CALLBACK_POSITIONS[$funcCallName]['callback']);
150+
if (! $callbackArg instanceof Arg) {
151+
return null;
152+
}
150153

154+
$callbackArgValue = $callbackArg->value;
151155
if (! $callbackArgValue instanceof ArrowFunction && ! $callbackArgValue instanceof Closure) {
152156
return null;
153157
}

0 commit comments

Comments
 (0)