@@ -37,17 +37,22 @@ private function parseAtomic(TokenIterator $tokens): Ast\Type\TypeNode
37
37
if ($ tokens ->isCurrentTokenType (Lexer::TOKEN_OPEN_SQUARE_BRACKET )) {
38
38
$ type = $ this ->tryParseArray ($ tokens , $ type );
39
39
}
40
-
41
40
} elseif ($ tokens ->tryConsumeTokenType (Lexer::TOKEN_THIS_VARIABLE )) {
42
- return new Ast \Type \ThisTypeNode ();
41
+ $ type = new Ast \Type \ThisTypeNode ();
43
42
43
+ if ($ tokens ->isCurrentTokenType (Lexer::TOKEN_OPEN_SQUARE_BRACKET )) {
44
+ $ type = $ this ->tryParseArray ($ tokens , $ type );
45
+ }
44
46
} else {
45
47
$ type = new Ast \Type \IdentifierTypeNode ($ tokens ->currentTokenValue ());
46
48
$ tokens ->consumeTokenType (Lexer::TOKEN_IDENTIFIER );
47
49
48
50
if ($ tokens ->isCurrentTokenType (Lexer::TOKEN_OPEN_ANGLE_BRACKET )) {
49
51
$ type = $ this ->parseGeneric ($ tokens , $ type );
50
52
53
+ if ($ tokens ->isCurrentTokenType (Lexer::TOKEN_OPEN_SQUARE_BRACKET )) {
54
+ $ type = $ this ->tryParseArray ($ tokens , $ type );
55
+ }
51
56
} elseif ($ tokens ->isCurrentTokenType (Lexer::TOKEN_OPEN_PARENTHESES )) {
52
57
$ type = $ this ->tryParseCallable ($ tokens , $ type );
53
58
@@ -56,6 +61,10 @@ private function parseAtomic(TokenIterator $tokens): Ast\Type\TypeNode
56
61
57
62
} elseif ($ type ->name === 'array ' && $ tokens ->isCurrentTokenType (Lexer::TOKEN_OPEN_CURLY_BRACKET ) && !$ tokens ->isPrecededByHorizontalWhitespace ()) {
58
63
$ type = $ this ->parseArrayShape ($ tokens , $ type );
64
+
65
+ if ($ tokens ->isCurrentTokenType (Lexer::TOKEN_OPEN_SQUARE_BRACKET )) {
66
+ $ type = $ this ->tryParseArray ($ tokens , $ type );
67
+ }
59
68
}
60
69
}
61
70
@@ -101,6 +110,10 @@ private function parseNullable(TokenIterator $tokens): Ast\Type\TypeNode
101
110
$ type = $ this ->parseArrayShape ($ tokens , $ type );
102
111
}
103
112
113
+ if ($ tokens ->isCurrentTokenType (Lexer::TOKEN_OPEN_SQUARE_BRACKET )) {
114
+ $ type = $ this ->tryParseArray ($ tokens , $ type );
115
+ }
116
+
104
117
return new Ast \Type \NullableTypeNode ($ type );
105
118
}
106
119
@@ -179,6 +192,10 @@ private function parseCallableReturnType(TokenIterator $tokens): Ast\Type\TypeNo
179
192
}
180
193
}
181
194
195
+ if ($ tokens ->isCurrentTokenType (Lexer::TOKEN_OPEN_SQUARE_BRACKET )) {
196
+ $ type = $ this ->tryParseArray ($ tokens , $ type );
197
+ }
198
+
182
199
return $ type ;
183
200
}
184
201
@@ -218,7 +235,7 @@ private function tryParseArray(TokenIterator $tokens, Ast\Type\TypeNode $type):
218
235
}
219
236
220
237
221
- private function parseArrayShape (TokenIterator $ tokens , Ast \Type \TypeNode $ type ): Ast \Type \TypeNode
238
+ private function parseArrayShape (TokenIterator $ tokens , Ast \Type \TypeNode $ type ): Ast \Type \ArrayShapeNode
222
239
{
223
240
$ tokens ->consumeTokenType (Lexer::TOKEN_OPEN_CURLY_BRACKET );
224
241
$ tokens ->tryConsumeTokenType (Lexer::TOKEN_PHPDOC_EOL );
0 commit comments