Skip to content

Commit b205ccd

Browse files
Andreas Frömerondrejmirtes
Andreas Frömer
authored andcommitted
Add multiline generic support
This solves #42
1 parent 7093385 commit b205ccd

File tree

2 files changed

+62
-1
lines changed

2 files changed

+62
-1
lines changed

Diff for: src/Parser/TypeParser.php

+6-1
Original file line numberDiff line numberDiff line change
@@ -164,14 +164,19 @@ private function parseNullable(TokenIterator $tokens): Ast\Type\TypeNode
164164

165165
public function parseGeneric(TokenIterator $tokens, Ast\Type\IdentifierTypeNode $baseType): Ast\Type\GenericTypeNode
166166
{
167-
$tokens->consumeTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET);
167+
$tokens->consumeTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET);
168+
$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
168169
$genericTypes = [$this->parse($tokens)];
169170

170171
while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)) {
172+
$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
171173
$genericTypes[] = $this->parse($tokens);
174+
$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
172175
}
173176

177+
$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL);
174178
$tokens->consumeTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET);
179+
175180
return new Ast\Type\GenericTypeNode($baseType, $genericTypes);
176181
}
177182

Diff for: tests/PHPStan/Parser/TypeParserTest.php

+56
Original file line numberDiff line numberDiff line change
@@ -899,6 +899,62 @@ public function provideParseData(): array
899899
new ConstTypeNode(new ConstFetchNode('QueueAttributeName', '*')),
900900
]),
901901
],
902+
[
903+
'array<' . PHP_EOL .
904+
' Foo' . PHP_EOL .
905+
'>',
906+
new GenericTypeNode(
907+
new IdentifierTypeNode('array'),
908+
[
909+
new IdentifierTypeNode('Foo')
910+
]
911+
)
912+
],
913+
[
914+
'array<' . PHP_EOL .
915+
' Foo,' . PHP_EOL .
916+
' Bar' . PHP_EOL .
917+
'>',
918+
new GenericTypeNode(
919+
new IdentifierTypeNode('array'),
920+
[
921+
new IdentifierTypeNode('Foo'),
922+
new IdentifierTypeNode('Bar'),
923+
]
924+
)
925+
],
926+
[
927+
'array<' . PHP_EOL .
928+
' Foo, Bar' . PHP_EOL .
929+
'>',
930+
new GenericTypeNode(
931+
new IdentifierTypeNode('array'),
932+
[
933+
new IdentifierTypeNode('Foo'),
934+
new IdentifierTypeNode('Bar'),
935+
]
936+
)
937+
],
938+
[
939+
'array<' . PHP_EOL .
940+
' Foo,' . PHP_EOL .
941+
' array<' . PHP_EOL .
942+
' Bar' . PHP_EOL .
943+
' >' . PHP_EOL .
944+
'>',
945+
new GenericTypeNode(
946+
new IdentifierTypeNode('array'),
947+
[
948+
new IdentifierTypeNode('Foo'),
949+
new GenericTypeNode(
950+
new IdentifierTypeNode('array'),
951+
[
952+
new IdentifierTypeNode('Bar')
953+
]
954+
)
955+
]
956+
)
957+
],
902958
];
903959
}
904960

0 commit comments

Comments
 (0)