From 7ece107b953beed469988c9fa0f8ad03abdb84f8 Mon Sep 17 00:00:00 2001 From: Vincent Langlet Date: Sun, 12 Apr 2026 09:14:48 +0200 Subject: [PATCH 1/2] Remove wrong specification --- src/Analyser/TypeSpecifier.php | 8 ++++++- .../PHPStan/Analyser/nsrt/type-specifier.php | 22 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 tests/PHPStan/Analyser/nsrt/type-specifier.php diff --git a/src/Analyser/TypeSpecifier.php b/src/Analyser/TypeSpecifier.php index 126f0579532..3d4475d5938 100644 --- a/src/Analyser/TypeSpecifier.php +++ b/src/Analyser/TypeSpecifier.php @@ -1939,9 +1939,15 @@ private function processBooleanSureConditionalTypes(Scope $scope, SpecifiedTypes continue; } + $scopeType = $scope->getType($expr); + $conditionType = TypeCombinator::remove($scopeType, $type); + if ($scopeType->equals($conditionType)) { + continue; + } + $conditionExpressionTypes[$exprString] = ExpressionTypeHolder::createYes( $expr, - TypeCombinator::remove($scope->getType($expr), $type), + $conditionType, ); } diff --git a/tests/PHPStan/Analyser/nsrt/type-specifier.php b/tests/PHPStan/Analyser/nsrt/type-specifier.php new file mode 100644 index 00000000000..a86ba2fd8df --- /dev/null +++ b/tests/PHPStan/Analyser/nsrt/type-specifier.php @@ -0,0 +1,22 @@ + $aggregation + * @param non-falsy-string $type + */ +function testTriviallyTrueConditionSkipped(array $aggregation, string $type): void +{ + if (empty($aggregation['field']) && $type !== 'filter') { + return; + } + + if ($type !== 'filter') { + assertType("array", $aggregation); + } + + assertType('non-falsy-string', $type); +} From 540c4dddd752875df7191de183bf0d85fc5239be Mon Sep 17 00:00:00 2001 From: Vincent Langlet Date: Sun, 12 Apr 2026 11:28:57 +0200 Subject: [PATCH 2/2] Rework --- .../Analyser/nsrt/{type-specifier.php => pr-5445.php} | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) rename tests/PHPStan/Analyser/nsrt/{type-specifier.php => pr-5445.php} (78%) diff --git a/tests/PHPStan/Analyser/nsrt/type-specifier.php b/tests/PHPStan/Analyser/nsrt/pr-5445.php similarity index 78% rename from tests/PHPStan/Analyser/nsrt/type-specifier.php rename to tests/PHPStan/Analyser/nsrt/pr-5445.php index a86ba2fd8df..e5b7c2b1221 100644 --- a/tests/PHPStan/Analyser/nsrt/type-specifier.php +++ b/tests/PHPStan/Analyser/nsrt/pr-5445.php @@ -1,6 +1,6 @@ ", $aggregation); + assertType('non-falsy-string', $type); + if ($type !== 'filter') { assertType("array", $aggregation); }