Skip to content

Commit 922cd6a

Browse files
committed
Better logic
1 parent 325063b commit 922cd6a

File tree

2 files changed

+12
-15
lines changed

2 files changed

+12
-15
lines changed

src/Analyser/MutatingScope.php

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,6 @@
162162
use function ltrim;
163163
use function md5;
164164
use function sprintf;
165-
use function str_contains;
166165
use function str_decrement;
167166
use function str_increment;
168167
use function str_starts_with;
@@ -5301,35 +5300,34 @@ private function generalizeVariableTypeHolders(
53015300
uksort($variableTypeHolders, static fn (string $exprA, string $exprB): int => strlen($exprA) <=> strlen($exprB));
53025301

53035302
$generalizedExpressions = [];
5303+
$newVariableTypeHolders = [];
53045304
foreach ($variableTypeHolders as $variableExprString => $variableTypeHolder) {
5305+
foreach ($generalizedExpressions as $generalizedExprString => $generalizedTypeHolder) {
5306+
if (!$this->shouldInvalidateExpression($generalizedExprString, $generalizedTypeHolder->getExpr(), $variableTypeHolder->getExpr())) {
5307+
continue;
5308+
}
5309+
5310+
continue 2;
5311+
}
53055312
if (!isset($otherVariableTypeHolders[$variableExprString])) {
5313+
$newVariableTypeHolders[$variableExprString] = $variableTypeHolder;
53065314
continue;
53075315
}
53085316

5309-
foreach ($generalizedExpressions as $changedExpr) {
5310-
if (
5311-
str_contains($variableExprString, $changedExpr . '[')
5312-
|| str_contains($variableExprString, '[' . $changedExpr . ']')
5313-
) {
5314-
unset($variableTypeHolders[$variableExprString]);
5315-
continue 2;
5316-
}
5317-
}
5318-
53195317
$generalizedType = $this->generalizeType($variableTypeHolder->getType(), $otherVariableTypeHolders[$variableExprString]->getType(), 0);
53205318
if (
53215319
!$generalizedType->equals($variableTypeHolder->getType())
53225320
) {
5323-
$generalizedExpressions[] = $variableExprString;
5321+
$generalizedExpressions[$variableExprString] = $variableTypeHolder;
53245322
}
5325-
$variableTypeHolders[$variableExprString] = new ExpressionTypeHolder(
5323+
$newVariableTypeHolders[$variableExprString] = new ExpressionTypeHolder(
53265324
$variableTypeHolder->getExpr(),
53275325
$generalizedType,
53285326
$variableTypeHolder->getCertainty(),
53295327
);
53305328
}
53315329

5332-
return $variableTypeHolders;
5330+
return $newVariableTypeHolders;
53335331
}
53345332

53355333
private function generalizeType(Type $a, Type $b, int $depth): Type

tests/PHPStan/Analyser/nsrt/pr-4390.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
namespace PR4390;
44

5-
use function PHPStan\debugScope;
65
use function PHPStan\Testing\assertType;
76

87
function (string $s): void {

0 commit comments

Comments
 (0)