Skip to content

Commit 3d693a2

Browse files
committed
handle FiberScope
1 parent ae25b9c commit 3d693a2

File tree

6 files changed

+17
-8
lines changed

6 files changed

+17
-8
lines changed

rules/CodeQuality/Rector/Empty_/SimplifyEmptyCheckOnEmptyArrayRector.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
use PHPStan\Type\MixedType;
2222
use PHPStan\Type\Type;
2323
use Rector\NodeAnalyzer\ExprAnalyzer;
24+
use Rector\NodeTypeResolver\PHPStan\Scope\ScopeTypeHelper;
2425
use Rector\Php\ReservedKeywordAnalyzer;
2526
use Rector\PhpParser\AstResolver;
2627
use Rector\PHPStan\ScopeFetcher;
@@ -106,7 +107,7 @@ private function isAllowedVariable(Variable $variable): bool
106107

107108
private function isAllowedExpr(Expr $expr, Scope $scope): bool
108109
{
109-
if (! $scope->getType($expr)->isArray()->yes()) {
110+
if (! ScopeTypeHelper::getType($scope, $expr)->isArray()->yes()) {
110111
return false;
111112
}
112113

rules/DeadCode/Rector/If_/RemoveAlwaysTrueIfConditionRector.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
use Rector\DeadCode\NodeAnalyzer\SafeLeftTypeBooleanAndOrAnalyzer;
2424
use Rector\NodeAnalyzer\ExprAnalyzer;
2525
use Rector\NodeTypeResolver\Node\AttributeKey;
26+
use Rector\NodeTypeResolver\PHPStan\Scope\ScopeTypeHelper;
2627
use Rector\PhpParser\Node\BetterNodeFinder;
2728
use Rector\PHPStan\ScopeFetcher;
2829
use Rector\Rector\AbstractRector;
@@ -120,7 +121,7 @@ public function refactor(Node $node): int|null|array|If_
120121
}
121122

122123
$scope = ScopeFetcher::fetch($node);
123-
$type = $scope->getNativeType($node->cond);
124+
$type = ScopeTypeHelper::getNativeType($scope, $node->cond);
124125
if (! $type->isTrue()->yes()) {
125126
return null;
126127
}

rules/DeadCode/Rector/If_/RemoveUnusedNonEmptyArrayBeforeForeachRector.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use Rector\NodeAnalyzer\PropertyFetchAnalyzer;
2020
use Rector\NodeManipulator\IfManipulator;
2121
use Rector\NodeTypeResolver\Node\AttributeKey;
22+
use Rector\NodeTypeResolver\PHPStan\Scope\ScopeTypeHelper;
2223
use Rector\Php\ReservedKeywordAnalyzer;
2324
use Rector\PhpParser\Enum\NodeGroup;
2425
use Rector\PHPStan\ScopeFetcher;
@@ -122,7 +123,7 @@ private function isUselessBeforeForeachCheck(If_ $if, Scope $scope): bool
122123
if (($ifCond instanceof Variable || $this->propertyFetchAnalyzer->isPropertyFetch($ifCond))
123124
&& $this->nodeComparator->areNodesEqual($ifCond, $foreachExpr)
124125
) {
125-
$ifType = $scope->getNativeType($ifCond);
126+
$ifType = ScopeTypeHelper::getNativeType($scope, $ifCond);
126127
return $ifType->isArray()
127128
->yes();
128129
}
@@ -192,7 +193,7 @@ private function refactorStmtsAware(Node $stmtsAware): ?Node
192193
continue;
193194
}
194195

195-
$ifType = $scope->getNativeType($empty->expr);
196+
$ifType = ScopeTypeHelper::getNativeType($scope, $empty->expr);
196197
if (! $ifType->isArray()->yes()) {
197198
continue;
198199
}
@@ -238,7 +239,7 @@ private function shouldSkipForeachExpr(Expr $foreachExpr, Scope $scope): bool
238239
return true;
239240
}
240241

241-
$ifType = $scope->getNativeType($foreachExpr);
242+
$ifType = ScopeTypeHelper::getNativeType($scope, $foreachExpr);
242243
if (! $ifType->isArray()->yes()) {
243244
return true;
244245
}

rules/DeadCode/UselessIfCondBeforeForeachDetector.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use PhpParser\Node\Stmt\Return_;
1515
use PHPStan\Analyser\Scope;
1616
use Rector\PhpParser\Comparing\NodeComparator;
17+
use Rector\NodeTypeResolver\PHPStan\Scope\ScopeTypeHelper;
1718

1819
final readonly class UselessIfCondBeforeForeachDetector
1920
{
@@ -125,7 +126,7 @@ private function areCondExprAndForeachExprSame(Empty_ $empty, Expr $foreachExpr,
125126
}
126127

127128
// is array though?
128-
$arrayType = $scope->getType($empty->expr);
129+
$arrayType = ScopeTypeHelper::getType($scope, $empty->expr);
129130
return $arrayType->isArray()
130131
->yes();
131132
}

rules/Strict/Rector/Empty_/DisallowedEmptyRuleFixerRector.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use PHPStan\Analyser\Scope;
1616
use Rector\Contract\Rector\ConfigurableRectorInterface;
1717
use Rector\NodeAnalyzer\ExprAnalyzer;
18+
use Rector\NodeTypeResolver\PHPStan\Scope\ScopeTypeHelper;
1819
use Rector\PHPStan\ScopeFetcher;
1920
use Rector\Strict\NodeAnalyzer\UninitializedPropertyAnalyzer;
2021
use Rector\Strict\NodeFactory\ExactCompareFactory;
@@ -106,7 +107,7 @@ private function refactorBooleanNot(BooleanNot $booleanNot, Scope $scope): Expr|
106107
return null;
107108
}
108109

109-
$emptyExprType = $scope->getNativeType($empty->expr);
110+
$emptyExprType = ScopeTypeHelper::getNativeType($scope, $empty->expr);
110111

111112
$result = $this->exactCompareFactory->createNotIdenticalFalsyCompare(
112113
$emptyExprType,
@@ -131,7 +132,7 @@ private function refactorEmpty(Empty_ $empty, Scope $scope, bool $treatAsNonEmpt
131132
return null;
132133
}
133134

134-
$exprType = $scope->getNativeType($empty->expr);
135+
$exprType = ScopeTypeHelper::getNativeType($scope, $empty->expr);
135136
$result = $this->exactCompareFactory->createIdenticalFalsyCompare($exprType, $empty->expr, $treatAsNonEmpty);
136137
if (! $result instanceof Expr) {
137138
return null;

src/NodeTypeResolver/PHPStan/Scope/PHPStanNodeScopeResolver.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,10 @@ public function processNodes(
158158
&$nodeCallback,
159159
$filePath,
160160
): void {
161+
if ($mutatingScope instanceof \PHPStan\Analyser\Fiber\FiberScope) {
162+
$mutatingScope = $mutatingScope->toMutatingScope();
163+
}
164+
161165
// the class reflection is resolved AFTER entering to class node
162166
// so we need to get it from the first after this one
163167
if ($node instanceof Class_ || $node instanceof Interface_ || $node instanceof Enum_) {

0 commit comments

Comments
 (0)