Skip to content

Commit e2b8faf

Browse files
committed
Allow [] after generic type or array shape - closes #36
1 parent 1a80f73 commit e2b8faf

File tree

2 files changed

+29
-10
lines changed

2 files changed

+29
-10
lines changed

src/Parser/TypeParser.php

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,8 @@ private function parseAtomic(TokenIterator $tokens): Ast\Type\TypeNode
3333
if ($tokens->tryConsumeTokenType(Lexer::TOKEN_OPEN_PARENTHESES)) {
3434
$type = $this->parse($tokens);
3535
$tokens->consumeTokenType(Lexer::TOKEN_CLOSE_PARENTHESES);
36-
37-
if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
38-
$type = $this->tryParseArray($tokens, $type);
39-
}
40-
4136
} elseif ($tokens->tryConsumeTokenType(Lexer::TOKEN_THIS_VARIABLE)) {
42-
return new Ast\Type\ThisTypeNode();
43-
37+
$type = new Ast\Type\ThisTypeNode();
4438
} else {
4539
$type = new Ast\Type\IdentifierTypeNode($tokens->currentTokenValue());
4640
$tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER);
@@ -51,14 +45,15 @@ private function parseAtomic(TokenIterator $tokens): Ast\Type\TypeNode
5145
} elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_PARENTHESES)) {
5246
$type = $this->tryParseCallable($tokens, $type);
5347

54-
} elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
55-
$type = $this->tryParseArray($tokens, $type);
56-
5748
} elseif ($type->name === 'array' && $tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_CURLY_BRACKET) && !$tokens->isPrecededByHorizontalWhitespace()) {
5849
$type = $this->parseArrayShape($tokens, $type);
5950
}
6051
}
6152

53+
if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) {
54+
$type = $this->tryParseArray($tokens, $type);
55+
}
56+
6257
return $type;
6358
}
6459

tests/PHPStan/Parser/TypeParserTest.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -711,6 +711,30 @@ public function provideParseData(): array
711711
new IdentifierTypeNode("\xA009")
712712
),
713713
],
714+
[
715+
'Collection<array-key, int>[]',
716+
new ArrayTypeNode(
717+
new GenericTypeNode(
718+
new IdentifierTypeNode('Collection'),
719+
[
720+
new IdentifierTypeNode('array-key'),
721+
new IdentifierTypeNode('int'),
722+
]
723+
)
724+
),
725+
],
726+
[
727+
'array{foo: int}[]',
728+
new ArrayTypeNode(
729+
new ArrayShapeNode([
730+
new ArrayShapeItemNode(
731+
new IdentifierTypeNode('foo'),
732+
false,
733+
new IdentifierTypeNode('int')
734+
),
735+
])
736+
),
737+
],
714738
];
715739
}
716740

0 commit comments

Comments
 (0)