Skip to content

Commit 6138870

Browse files
committed
Fix
1 parent a55ba56 commit 6138870

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

rules-tests/DowngradePhp82/Rector/FuncCall/DowngradeIteratorCountToArrayRector/Fixture/skip_in_ternary.php.inc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,9 @@ final class SkipInternary
88
{
99
return \is_array($taggedServices) ? $taggedServices : \iterator_to_array($taggedServices);
1010
}
11+
12+
public function run2($taggedServices)
13+
{
14+
return ! \is_array($taggedServices) ? \iterator_to_array($taggedServices): $taggedServices;
15+
}
1116
}

rules/DowngradePhp82/Rector/FuncCall/DowngradeIteratorCountToArrayRector.php

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@
1010
use PhpParser\Node\Expr\New_;
1111
use PhpParser\Node\Expr\Ternary;
1212
use PhpParser\Node\Name\FullyQualified;
13+
use PhpParser\NodeTraverser;
1314
use PHPStan\Type\Type;
1415
use Rector\NodeAnalyzer\ArgsAnalyzer;
16+
use Rector\PhpParser\Node\BetterNodeFinder;
1517
use Rector\Rector\AbstractRector;
1618
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
1719
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
@@ -26,7 +28,8 @@
2628
final class DowngradeIteratorCountToArrayRector extends AbstractRector
2729
{
2830
public function __construct(
29-
private readonly ArgsAnalyzer $argsAnalyzer
31+
private readonly ArgsAnalyzer $argsAnalyzer,
32+
private readonly BetterNodeFinder $betterNodeFinder
3033
) {
3134
}
3235

@@ -35,7 +38,7 @@ public function __construct(
3538
*/
3639
public function getNodeTypes(): array
3740
{
38-
return [FuncCall::class];
41+
return [Ternary::class, FuncCall::class];
3942
}
4043

4144
public function getRuleDefinition(): RuleDefinition
@@ -63,10 +66,23 @@ function test(array|Traversable $data) {
6366
}
6467

6568
/**
66-
* @param FuncCall $node
69+
* @param Ternary|FuncCall $node
6770
*/
68-
public function refactor(Node $node): ?Node
71+
public function refactor(Node $node): null|FuncCall|int
6972
{
73+
if ($node instanceof Ternary) {
74+
$hasIsArrayCheck = (bool) $this->betterNodeFinder->findFirst(
75+
$node,
76+
fn (Node $subNode): bool => $subNode instanceof FuncCall && $this->isName($subNode, 'is_array')
77+
);
78+
79+
if ($hasIsArrayCheck) {
80+
return NodeTraverser::DONT_TRAVERSE_CHILDREN;
81+
}
82+
83+
return null;
84+
}
85+
7086
if (! $this->isNames($node, ['iterator_count', 'iterator_to_array'])) {
7187
return null;
7288
}

0 commit comments

Comments
 (0)