File tree Expand file tree Collapse file tree 2 files changed +59
-10
lines changed
Expand file tree Collapse file tree 2 files changed +59
-10
lines changed Original file line number Diff line number Diff 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
Original file line number Diff line number Diff line change @@ -711,6 +711,60 @@ 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+ 'int | Collection<array-key, int>[] ' ,
728+ new UnionTypeNode ([
729+ new IdentifierTypeNode ('int ' ),
730+ new ArrayTypeNode (
731+ new GenericTypeNode (
732+ new IdentifierTypeNode ('Collection ' ),
733+ [
734+ new IdentifierTypeNode ('array-key ' ),
735+ new IdentifierTypeNode ('int ' ),
736+ ]
737+ )
738+ ),
739+ ]),
740+ ],
741+ [
742+ 'array{foo: int}[] ' ,
743+ new ArrayTypeNode (
744+ new ArrayShapeNode ([
745+ new ArrayShapeItemNode (
746+ new IdentifierTypeNode ('foo ' ),
747+ false ,
748+ new IdentifierTypeNode ('int ' )
749+ ),
750+ ])
751+ ),
752+ ],
753+ [
754+ 'int | array{foo: int}[] ' ,
755+ new UnionTypeNode ([
756+ new IdentifierTypeNode ('int ' ),
757+ new ArrayTypeNode (
758+ new ArrayShapeNode ([
759+ new ArrayShapeItemNode (
760+ new IdentifierTypeNode ('foo ' ),
761+ false ,
762+ new IdentifierTypeNode ('int ' )
763+ ),
764+ ])
765+ ),
766+ ]),
767+ ],
714768 ];
715769 }
716770
You can’t perform that action at this time.
0 commit comments