Skip to content

Commit f853a11

Browse files
committed
StmtsAnalysisRequest
1 parent 479e0dc commit f853a11

File tree

7 files changed

+39
-22
lines changed

7 files changed

+39
-22
lines changed

src/Analyser/Generator/ExprHandler/ClosureHandler.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
use PHPStan\Analyser\Generator\ExprAnalysisResult;
99
use PHPStan\Analyser\Generator\ExprHandler;
1010
use PHPStan\Analyser\Generator\GeneratorScope;
11-
use PHPStan\Analyser\Generator\StmtAnalysisRequest;
11+
use PHPStan\Analyser\Generator\StmtsAnalysisRequest;
1212
use PHPStan\DependencyInjection\AutowiredService;
1313
use PHPStan\Type\ClosureType;
1414

@@ -26,10 +26,8 @@ public function supports(Expr $expr): bool
2626

2727
public function analyseExpr(Expr $expr, GeneratorScope $scope): Generator
2828
{
29-
foreach ($expr->stmts as $stmt) {
30-
$result = yield new StmtAnalysisRequest($stmt, $scope); // @phpstan-ignore generator.valueType
31-
$scope = $result->scope;
32-
}
29+
$result = yield new StmtsAnalysisRequest($expr->stmts, $scope); // @phpstan-ignore generator.valueType
30+
$scope = $result->scope;
3331

3432
return new ExprAnalysisResult(new ClosureType(), $scope);
3533
}

src/Analyser/Generator/GeneratorNodeScopeResolver.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,11 @@ private function processStmtNodes(
137137
$gen = $this->analyzeStmt($yielded->stmt, $yielded->scope);
138138
$gen->current();
139139
continue;
140+
} elseif ($yielded instanceof StmtsAnalysisRequest) {
141+
$stack[] = $gen;
142+
$gen = $this->analyzeStmts($yielded->stmts, $yielded->scope);
143+
$gen->current();
144+
continue;
140145
} else { // phpcs:ignore
141146
throw new NeverException($yielded);
142147
}
@@ -192,7 +197,7 @@ private function analyzeStmts(array $stmts, GeneratorScope $scope): Generator
192197
}
193198

194199
/**
195-
* @return Generator<int, ExprAnalysisRequest|StmtAnalysisRequest|NodeCallbackRequest, ExprAnalysisResult|StmtAnalysisResult, StmtAnalysisResult>
200+
* @return Generator<int, ExprAnalysisRequest|StmtAnalysisRequest|StmtsAnalysisRequest|NodeCallbackRequest, ExprAnalysisResult|StmtAnalysisResult, StmtAnalysisResult>
196201
*/
197202
private function analyzeStmt(Stmt $stmt, GeneratorScope $scope): Generator
198203
{

src/Analyser/Generator/StmtHandler.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public function supports(Stmt $stmt): bool;
2020

2121
/**
2222
* @param T $stmt
23-
* @return Generator<int, ExprAnalysisRequest|StmtAnalysisRequest|NodeCallbackRequest, ExprAnalysisResult|StmtAnalysisResult, StmtAnalysisResult>
23+
* @return Generator<int, ExprAnalysisRequest|StmtAnalysisRequest|StmtsAnalysisRequest|NodeCallbackRequest, ExprAnalysisResult|StmtAnalysisResult, StmtAnalysisResult>
2424
*/
2525
public function analyseStmt(Stmt $stmt, GeneratorScope $scope): Generator;
2626

src/Analyser/Generator/StmtHandler/ClassLikeHandler.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
use PhpParser\Node\Stmt\Enum_;
99
use PhpParser\Node\Stmt\Interface_;
1010
use PHPStan\Analyser\Generator\GeneratorScope;
11-
use PHPStan\Analyser\Generator\StmtAnalysisRequest;
1211
use PHPStan\Analyser\Generator\StmtAnalysisResult;
1312
use PHPStan\Analyser\Generator\StmtHandler;
13+
use PHPStan\Analyser\Generator\StmtsAnalysisRequest;
1414
use PHPStan\DependencyInjection\AutowiredService;
1515

1616
/**
@@ -28,10 +28,8 @@ public function supports(Stmt $stmt): bool
2828
public function analyseStmt(Stmt $stmt, GeneratorScope $scope): Generator
2929
{
3030
//$scope = $scope->enterClass();
31-
foreach ($stmt->stmts as $innerStmt) {
32-
$result = yield new StmtAnalysisRequest($innerStmt, $scope);
33-
$scope = $result->scope;
34-
}
31+
$result = yield new StmtsAnalysisRequest($stmt->stmts, $scope);
32+
$scope = $result->scope;
3533

3634
return new StmtAnalysisResult($scope);
3735
}

src/Analyser/Generator/StmtHandler/ClassMethodHandler.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
use PhpParser\Node\Stmt;
77
use PhpParser\Node\Stmt\ClassMethod;
88
use PHPStan\Analyser\Generator\GeneratorScope;
9-
use PHPStan\Analyser\Generator\StmtAnalysisRequest;
109
use PHPStan\Analyser\Generator\StmtAnalysisResult;
1110
use PHPStan\Analyser\Generator\StmtHandler;
11+
use PHPStan\Analyser\Generator\StmtsAnalysisRequest;
1212
use PHPStan\DependencyInjection\AutowiredService;
1313

1414
/**
@@ -31,10 +31,8 @@ public function analyseStmt(Stmt $stmt, GeneratorScope $scope): Generator
3131
return new StmtAnalysisResult($scope);
3232
}
3333

34-
foreach ($stmt->stmts as $innerStmt) {
35-
$result = yield new StmtAnalysisRequest($innerStmt, $scope);
36-
$scope = $result->scope;
37-
}
34+
$result = yield new StmtsAnalysisRequest($stmt->stmts, $scope);
35+
$scope = $result->scope;
3836

3937
return new StmtAnalysisResult($scope);
4038
}

src/Analyser/Generator/StmtHandler/NamespaceHandler.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
use PhpParser\Node\Stmt;
77
use PhpParser\Node\Stmt\Namespace_;
88
use PHPStan\Analyser\Generator\GeneratorScope;
9-
use PHPStan\Analyser\Generator\StmtAnalysisRequest;
109
use PHPStan\Analyser\Generator\StmtAnalysisResult;
1110
use PHPStan\Analyser\Generator\StmtHandler;
11+
use PHPStan\Analyser\Generator\StmtsAnalysisRequest;
1212
use PHPStan\DependencyInjection\AutowiredService;
1313

1414
/**
@@ -29,10 +29,8 @@ public function analyseStmt(Stmt $stmt, GeneratorScope $scope): Generator
2929
$scope = $scope->enterNamespace($stmt->name->toString());
3030
}*/
3131

32-
foreach ($stmt->stmts as $innerStmt) {
33-
$result = yield new StmtAnalysisRequest($innerStmt, $scope);
34-
$scope = $result->scope;
35-
}
32+
$result = yield new StmtsAnalysisRequest($stmt->stmts, $scope);
33+
$scope = $result->scope;
3634

3735
return new StmtAnalysisResult($scope);
3836
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace PHPStan\Analyser\Generator;
4+
5+
use PhpParser\Node\Stmt;
6+
7+
final class StmtsAnalysisRequest
8+
{
9+
10+
/**
11+
* @param Stmt[] $stmts
12+
*/
13+
public function __construct(
14+
public array $stmts,
15+
public GeneratorScope $scope,
16+
)
17+
{
18+
}
19+
20+
}

0 commit comments

Comments
 (0)