From 78e526c3e5e66781c7c2fb5d7a2c7333a245207e Mon Sep 17 00:00:00 2001 From: Vincent Langlet Date: Mon, 29 Apr 2024 12:27:44 +0200 Subject: [PATCH] Try --- .../Type/TemplateInferredTypeReplacer.php | 18 +++++++----------- src/Psalm/Type.php | 9 +++++++++ 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/Psalm/Internal/Type/TemplateInferredTypeReplacer.php b/src/Psalm/Internal/Type/TemplateInferredTypeReplacer.php index 1664b5caecf..1f654c09998 100644 --- a/src/Psalm/Internal/Type/TemplateInferredTypeReplacer.php +++ b/src/Psalm/Internal/Type/TemplateInferredTypeReplacer.php @@ -9,7 +9,6 @@ use Psalm\Type\Atomic; use Psalm\Type\Atomic\TClassString; use Psalm\Type\Atomic\TConditional; -use Psalm\Type\Atomic\TFloat; use Psalm\Type\Atomic\TInt; use Psalm\Type\Atomic\TIterable; use Psalm\Type\Atomic\TKeyOf; @@ -452,17 +451,14 @@ private static function replaceConditional( null, false, false, + ) && null === Type::intersectUnionTypes( + new Union([$candidate_atomic_type]), + $conditional_type, + $codebase, + false, + false, )) { - $intersection = Type::intersectUnionTypes( - new Union([$candidate_atomic_type]), - $conditional_type, - $codebase, - ); - if (null === $intersection - || ($candidate_atomic_type instanceof TFloat - && $intersection->getKey() === 'int')) { - $matching_else_types[] = $candidate_atomic_type; - } + $matching_else_types[] = $candidate_atomic_type; } } diff --git a/src/Psalm/Type.php b/src/Psalm/Type.php index 793c3198b2e..f577c19fe83 100644 --- a/src/Psalm/Type.php +++ b/src/Psalm/Type.php @@ -33,8 +33,10 @@ use Psalm\Type\Atomic\TNamedObject; use Psalm\Type\Atomic\TNever; use Psalm\Type\Atomic\TNonEmptyLowercaseString; +use Psalm\Type\Atomic\TNonEmptyNonspecificLiteralString; use Psalm\Type\Atomic\TNonEmptyString; use Psalm\Type\Atomic\TNonFalsyString; +use Psalm\Type\Atomic\TNonspecificLiteralString; use Psalm\Type\Atomic\TNull; use Psalm\Type\Atomic\TNumeric; use Psalm\Type\Atomic\TNumericString; @@ -909,6 +911,13 @@ private static function intersectAtomicTypes( $intersection_atomic = $type_1_atomic; $wider_type = $type_2_atomic; $intersection_performed = true; + } elseif (($type_1_atomic instanceof TNonspecificLiteralString + && $type_2_atomic instanceof TNonEmptyString) + || ($type_1_atomic instanceof TNonEmptyString + && $type_2_atomic instanceof TNonspecificLiteralString) + ) { + $intersection_atomic = new TNonEmptyNonspecificLiteralString(); + $intersection_performed = true; } if ($intersection_atomic