diff --git a/rules/DowngradePhp80/Rector/FuncCall/DowngradeArrayFilterNullableCallbackRector.php b/rules/DowngradePhp80/Rector/FuncCall/DowngradeArrayFilterNullableCallbackRector.php index 252bdb0d815..3340af5f799 100644 --- a/rules/DowngradePhp80/Rector/FuncCall/DowngradeArrayFilterNullableCallbackRector.php +++ b/rules/DowngradePhp80/Rector/FuncCall/DowngradeArrayFilterNullableCallbackRector.php @@ -25,6 +25,7 @@ use PHPStan\Type\ClosureType; use PHPStan\Type\Constant\ConstantStringType; use PHPStan\Type\StringType; +use Rector\Core\NodeAnalyzer\ArgsAnalyzer; use Rector\Core\Rector\AbstractRector; use Rector\NodeTypeResolver\Node\AttributeKey; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -37,6 +38,11 @@ */ final class DowngradeArrayFilterNullableCallbackRector extends AbstractRector { + public function __construct( + private readonly ArgsAnalyzer $argsAnalyzer + ) { + } + public function getRuleDefinition(): RuleDefinition { return new RuleDefinition( @@ -82,13 +88,12 @@ public function getNodeTypes(): array */ public function refactor(Node $node): FuncCall|Ternary|null { - $args = $node->getArgs(); - if (! $this->isName($node, 'array_filter')) { return null; } - if ($this->hasNamedArg($args)) { + $args = $node->getArgs(); + if ($this->argsAnalyzer->hasNamedArg($args)) { return null; } @@ -163,18 +168,4 @@ private function createNewArgSecondTernary(array $args): Ternary isset($args[2]) ? $args[2]->value : new ConstFetch(new Name('0')) ); } - - /** - * @param Arg[] $args - */ - private function hasNamedArg(array $args): bool - { - foreach ($args as $arg) { - if ($arg->name instanceof Identifier) { - return true; - } - } - - return false; - } } diff --git a/rules/DowngradePhp80/Rector/MethodCall/DowngradeNamedArgumentRector.php b/rules/DowngradePhp80/Rector/MethodCall/DowngradeNamedArgumentRector.php index 5d79a65e413..68955cccf9c 100644 --- a/rules/DowngradePhp80/Rector/MethodCall/DowngradeNamedArgumentRector.php +++ b/rules/DowngradePhp80/Rector/MethodCall/DowngradeNamedArgumentRector.php @@ -10,9 +10,9 @@ use PhpParser\Node\Expr\MethodCall; use PhpParser\Node\Expr\New_; use PhpParser\Node\Expr\StaticCall; -use PhpParser\Node\Identifier; use PHPStan\Reflection\FunctionReflection; use PHPStan\Reflection\MethodReflection; +use Rector\Core\NodeAnalyzer\ArgsAnalyzer; use Rector\Core\Rector\AbstractRector; use Rector\Core\Reflection\ReflectionResolver; use Rector\DowngradePhp80\NodeAnalyzer\UnnamedArgumentResolver; @@ -26,7 +26,8 @@ final class DowngradeNamedArgumentRector extends AbstractRector { public function __construct( private readonly ReflectionResolver $reflectionResolver, - private readonly UnnamedArgumentResolver $unnamedArgumentResolver + private readonly UnnamedArgumentResolver $unnamedArgumentResolver, + private readonly ArgsAnalyzer $argsAnalyzer ) { } @@ -116,18 +117,6 @@ private function removeNamedArguments(MethodCall | StaticCall | New_ | FuncCall */ private function shouldSkip(array $args): bool { - foreach ($args as $arg) { - if (! $arg instanceof Arg) { - continue; - } - - if (! $arg->name instanceof Identifier) { - continue; - } - - return false; - } - - return true; + return ! $this->argsAnalyzer->hasNamedArg($args); } } diff --git a/src/NodeAnalyzer/ArgsAnalyzer.php b/src/NodeAnalyzer/ArgsAnalyzer.php index 763d70d91e7..bae5af286d2 100644 --- a/src/NodeAnalyzer/ArgsAnalyzer.php +++ b/src/NodeAnalyzer/ArgsAnalyzer.php @@ -44,11 +44,15 @@ public function isArgsInstanceInArgsPositions(array $args, array $positions): bo } /** - * @param Arg[] $args + * @param mixed[]|Arg[] $args */ public function hasNamedArg(array $args): bool { foreach ($args as $arg) { + if (! $arg instanceof Arg) { + continue; + } + if ($arg->name instanceof Identifier) { return true; }