diff --git a/src/Psalm/Internal/Analyzer/Statements/Expression/SimpleTypeInferer.php b/src/Psalm/Internal/Analyzer/Statements/Expression/SimpleTypeInferer.php index 6462c6d1cd4..206b30c2ceb 100644 --- a/src/Psalm/Internal/Analyzer/Statements/Expression/SimpleTypeInferer.php +++ b/src/Psalm/Internal/Analyzer/Statements/Expression/SimpleTypeInferer.php @@ -26,6 +26,7 @@ use Psalm\Type\Atomic\TLiteralString; use Psalm\Type\Atomic\TMixed; use Psalm\Type\Atomic\TNonEmptyArray; +use Psalm\Type\Atomic\TNonEmptyList; use Psalm\Type\Atomic\TNonEmptyString; use Psalm\Type\Atomic\TString; use Psalm\Type\Union; @@ -525,6 +526,12 @@ private static function inferArrayType( return null; } + if ($array_creation_info->all_list) { + return new Union([ + new TNonEmptyList($item_value_type), + ]); + } + return new Union([ new TNonEmptyArray([ $item_key_type, diff --git a/tests/ListTest.php b/tests/ListTest.php index a9928658d74..aa32fb353fd 100644 --- a/tests/ListTest.php +++ b/tests/ListTest.php @@ -84,6 +84,74 @@ function takesList($a): void {} $a = [1, 1 => 2, 3]; takesList($a);', ], + 'simpleTypeInfererNonEmptyList' => [ + ' $vars */ + function foo(array $vars): void { + print_r($vars); + } + + foo(Foo::VARS); + ', + ], ]; }