From 3dea282668a319c30c743a5b47850167041952e4 Mon Sep 17 00:00:00 2001 From: Vincent Langlet Date: Thu, 18 Apr 2024 09:17:44 +0200 Subject: [PATCH] Fix conditional on non empty literal string --- .../Type/Comparator/ScalarTypeComparator.php | 5 ++++ tests/Template/ConditionalReturnTypeTest.php | 28 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/Psalm/Internal/Type/Comparator/ScalarTypeComparator.php b/src/Psalm/Internal/Type/Comparator/ScalarTypeComparator.php index c688407cad6..40360a93b37 100644 --- a/src/Psalm/Internal/Type/Comparator/ScalarTypeComparator.php +++ b/src/Psalm/Internal/Type/Comparator/ScalarTypeComparator.php @@ -86,6 +86,11 @@ public static function isContainedBy( if ($container_type_part instanceof TNonspecificLiteralString && ($input_type_part instanceof TLiteralString || $input_type_part instanceof TNonspecificLiteralString) ) { + if ($container_type_part instanceof TNonEmptyNonspecificLiteralString) { + return ($input_type_part instanceof TLiteralString && $input_type_part->value !== '') + || $input_type_part instanceof TNonEmptyNonspecificLiteralString; + } + return true; } diff --git a/tests/Template/ConditionalReturnTypeTest.php b/tests/Template/ConditionalReturnTypeTest.php index cbdce780a2b..bc5e88777da 100644 --- a/tests/Template/ConditionalReturnTypeTest.php +++ b/tests/Template/ConditionalReturnTypeTest.php @@ -951,6 +951,34 @@ final class SpecificObject extends stdClass {} 'ignored_issues' => [], 'php_version' => '8.1', ], + 'nonEmptyLiteralString' => [ + 'code' => ' [ + '$something' => 'int|string', + '$something2' => 'string', + ], + 'ignored_issues' => [], + ], ]; } }