diff --git a/src/Parser/TypeParser.php b/src/Parser/TypeParser.php index 993bf873..d196eb94 100644 --- a/src/Parser/TypeParser.php +++ b/src/Parser/TypeParser.php @@ -515,7 +515,7 @@ private function parseArrayShape(TokenIterator $tokens, Ast\Type\TypeNode $type, $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); if ($tokens->tryConsumeTokenType(Lexer::TOKEN_CLOSE_CURLY_BRACKET)) { - return new Ast\Type\ArrayShapeNode($items); + return new Ast\Type\ArrayShapeNode($items, true, $kind); } if ($tokens->tryConsumeTokenType(Lexer::TOKEN_VARIADIC)) { diff --git a/tests/PHPStan/Ast/ToString/TypeToStringTest.php b/tests/PHPStan/Ast/ToString/TypeToStringTest.php index a6849006..a32b0a09 100644 --- a/tests/PHPStan/Ast/ToString/TypeToStringTest.php +++ b/tests/PHPStan/Ast/ToString/TypeToStringTest.php @@ -75,6 +75,15 @@ public static function provideArrayCases(): Generator new ArrayShapeItemNode(new ConstExprIntegerNode('1'), false, new IdentifierTypeNode('Baz')), ]), ], + ['list{}', new ArrayShapeNode([], true, 'list')], + ['list{...}', new ArrayShapeNode([], false, 'list')], + [ + 'list{string, int, ...}', + new ArrayShapeNode([ + new ArrayShapeItemNode(null, false, new IdentifierTypeNode('string')), + new ArrayShapeItemNode(null, false, new IdentifierTypeNode('int')), + ], false, 'list'), + ], ]; }