Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e2b8faf

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /