Skip to content

Commit 571feed

Browse files
committed
support trailing commas
1 parent 2e69b9a commit 571feed

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

src/Parser/TypeParser.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,11 @@ private function parseArrayShape(TokenIterator $tokens, Ast\Type\TypeNode $type)
226226

227227
while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)) {
228228
$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
229+
if($tokens->tryConsumeTokenType(Lexer::TOKEN_CLOSE_CURLY_BRACKET)) {
230+
// trailing comma case
231+
return new Ast\Type\ArrayShapeNode($items);
232+
}
233+
229234
$items[] = $this->parseArrayShapeItem($tokens);
230235
}
231236

tests/PHPStan/Parser/TypeParserTest.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,36 @@ public function provideParseData(): array
477477
),
478478
]),
479479
],
480+
[
481+
'array{
482+
a: int,
483+
}',
484+
new ArrayShapeNode([
485+
new ArrayShapeItemNode(
486+
new IdentifierTypeNode('a'),
487+
false,
488+
new IdentifierTypeNode('int')
489+
),
490+
]),
491+
],
492+
[
493+
'array{
494+
a: int,
495+
b: string,
496+
}',
497+
new ArrayShapeNode([
498+
new ArrayShapeItemNode(
499+
new IdentifierTypeNode('a'),
500+
false,
501+
new IdentifierTypeNode('int')
502+
),
503+
new ArrayShapeItemNode(
504+
new IdentifierTypeNode('b'),
505+
false,
506+
new IdentifierTypeNode('string')
507+
),
508+
]),
509+
],
480510
[
481511
'array{
482512
a: int,

0 commit comments

Comments
 (0)