Skip to content

Commit

Permalink
[DowngradePhp80] Use ArgsAnalyzer for has named args check (#1651)
Browse files Browse the repository at this point in the history
  • Loading branch information
samsonasik committed Jan 9, 2022
1 parent 4ab2ab5 commit 6cc6870
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -37,6 +38,11 @@
*/
final class DowngradeArrayFilterNullableCallbackRector extends AbstractRector
{
public function __construct(
private readonly ArgsAnalyzer $argsAnalyzer
) {
}

public function getRuleDefinition(): RuleDefinition
{
return new RuleDefinition(
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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
) {
}

Expand Down Expand Up @@ -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);
}
}
6 changes: 5 additions & 1 deletion src/NodeAnalyzer/ArgsAnalyzer.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down

0 comments on commit 6cc6870

Please sign in to comment.