From 5cf1eb88a8a42c7ea23f1f9c5721f82f06ccc38c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Vo=C5=99=C3=AD=C5=A1ek?= Date: Mon, 26 Jun 2023 11:15:17 +0200 Subject: [PATCH 1/2] simplify/unify parseGeneric method --- src/Parser/TypeParser.php | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/src/Parser/TypeParser.php b/src/Parser/TypeParser.php index d0b1fdea..c751bce3 100644 --- a/src/Parser/TypeParser.php +++ b/src/Parser/TypeParser.php @@ -398,42 +398,33 @@ public function isHtml(TokenIterator $tokens): bool public function parseGeneric(TokenIterator $tokens, Ast\Type\IdentifierTypeNode $baseType): Ast\Type\GenericTypeNode { $tokens->consumeTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET); - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); + $startLine = $baseType->getAttribute(Ast\Attribute::START_LINE); + $startIndex = $baseType->getAttribute(Ast\Attribute::START_INDEX); $genericTypes = []; $variances = []; - [$genericTypes[], $variances[]] = $this->parseGenericTypeArgument($tokens); - - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - - while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)) { + $isFirst = true; + while ($isFirst || $tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)) { $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - if ($tokens->tryConsumeTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET)) { - // trailing comma case - $type = new Ast\Type\GenericTypeNode($baseType, $genericTypes, $variances); - $startLine = $baseType->getAttribute(Ast\Attribute::START_LINE); - $startIndex = $baseType->getAttribute(Ast\Attribute::START_INDEX); - if ($startLine !== null && $startIndex !== null) { - $type = $this->enrichWithAttributes($tokens, $type, $startLine, $startIndex); - } - return $type; + // trailing comma case + if (!$isFirst && $tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET)) { + break; } + $isFirst = false; + [$genericTypes[], $variances[]] = $this->parseGenericTypeArgument($tokens); - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); } - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET); - $type = new Ast\Type\GenericTypeNode($baseType, $genericTypes, $variances); - $startLine = $baseType->getAttribute(Ast\Attribute::START_LINE); - $startIndex = $baseType->getAttribute(Ast\Attribute::START_INDEX); if ($startLine !== null && $startIndex !== null) { $type = $this->enrichWithAttributes($tokens, $type, $startLine, $startIndex); } + $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); + $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET); + return $type; } From ec2ce1de9cc18f185179a287233272ac6e5c314a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Vo=C5=99=C3=AD=C5=A1ek?= Date: Mon, 18 Sep 2023 11:38:31 +0200 Subject: [PATCH 2/2] fix/unify callable template parsing with EOL --- src/Parser/TypeParser.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Parser/TypeParser.php b/src/Parser/TypeParser.php index c751bce3..22d00868 100644 --- a/src/Parser/TypeParser.php +++ b/src/Parser/TypeParser.php @@ -415,6 +415,7 @@ public function parseGeneric(TokenIterator $tokens, Ast\Type\IdentifierTypeNode $isFirst = false; [$genericTypes[], $variances[]] = $this->parseGenericTypeArgument($tokens); + $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); } $type = new Ast\Type\GenericTypeNode($baseType, $genericTypes, $variances); @@ -422,7 +423,6 @@ public function parseGeneric(TokenIterator $tokens, Ast\Type\IdentifierTypeNode $type = $this->enrichWithAttributes($tokens, $type, $startLine, $startIndex); } - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET); return $type;