Skip to content

Commit 2fa586b

Browse files
[CodeQuality] Handle crash on for loop on OptionalParametersAfterRequiredRector (#6543)
* [CodeQuality] Handle crash on for loop on OptionalParametersAfterRequiredRector * Fix * Fix * [ci-review] Rector Rectify --------- Co-authored-by: GitHub Action <actions@github.com>
1 parent 1e028eb commit 2fa586b

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Rector\Tests\CodeQuality\Rector\ClassMethod\OptionalParametersAfterRequiredRector\Fixture;
6+
7+
final class SkipCountForLoop
8+
{
9+
public function __invoke($em)
10+
{
11+
$visitedProduct1 = null;
12+
$visitedProduct2 = null;
13+
$visitedProduct3 = null;
14+
15+
$products = $em->getRepository(Product::class)->findAll();
16+
$visitedProducts = [];
17+
for ($i = 0; $i < count($products), count($visitedProducts) <= 3; ++$i) {
18+
$product = $products[$i];
19+
if (!in_array($product, $exclude)) {
20+
$varName = 'visitedProduct' . ($i + 1);
21+
$visitedProducts[$varName] = $product;
22+
}
23+
}
24+
25+
extract($visitedProducts);
26+
}
27+
}

src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
use PhpParser\Node\Stmt\EnumCase;
4646
use PhpParser\Node\Stmt\Expression;
4747
use PhpParser\Node\Stmt\Finally_;
48+
use PhpParser\Node\Stmt\For_;
4849
use PhpParser\Node\Stmt\Foreach_;
4950
use PhpParser\Node\Stmt\Function_;
5051
use PhpParser\Node\Stmt\Interface_;
@@ -222,6 +223,17 @@ public function processNodes(
222223
return;
223224
}
224225

226+
if ($node instanceof For_) {
227+
foreach (array_merge($node->init, $node->cond, $node->loop) as $expr) {
228+
$expr->setAttribute(AttributeKey::SCOPE, $mutatingScope);
229+
if ($expr instanceof BinaryOp) {
230+
$this->processBinaryOp($expr, $mutatingScope);
231+
}
232+
}
233+
234+
return;
235+
}
236+
225237
if ($node instanceof Array_) {
226238
$this->processArray($node, $mutatingScope);
227239
return;

0 commit comments

Comments
 (0)