Skip to content

Commit

Permalink
parseOptionalDescription - always specify $limitStartToken
Browse files Browse the repository at this point in the history
  • Loading branch information
ondrejmirtes committed Sep 15, 2024
1 parent 5f84c95 commit 5504a3b
Showing 1 changed file with 18 additions and 15 deletions.
33 changes: 18 additions & 15 deletions src/Parser/PhpDocParser.php
Original file line number Diff line number Diff line change
Expand Up @@ -463,7 +463,7 @@ public function parseTagValue(TokenIterator $tokens, string $tag): Ast\PhpDoc\Ph
case '@psalm-template-contravariant':
$tagValue = $this->typeParser->parseTemplateTagValue(
$tokens,
fn ($tokens) => $this->parseOptionalDescription($tokens),
fn ($tokens) => $this->parseOptionalDescription($tokens, true),
);
break;

Expand Down Expand Up @@ -536,7 +536,7 @@ public function parseTagValue(TokenIterator $tokens, string $tag): Ast\PhpDoc\Ph

} catch (ParserException $e) {
$tokens->rollback();
$tagValue = new Ast\PhpDoc\InvalidTagValueNode($this->parseOptionalDescription($tokens), $e);
$tagValue = new Ast\PhpDoc\InvalidTagValueNode($this->parseOptionalDescription($tokens, false), $e);
}

return $this->enrichWithAttributes($tokens, $tagValue, $startLine, $startIndex);
Expand Down Expand Up @@ -865,7 +865,7 @@ private function parseParamTagValue(TokenIterator $tokens): Ast\PhpDoc\PhpDocTag
$isReference = $tokens->tryConsumeTokenType(Lexer::TOKEN_REFERENCE);
$isVariadic = $tokens->tryConsumeTokenType(Lexer::TOKEN_VARIADIC);
$parameterName = $this->parseRequiredVariableName($tokens);
$description = $this->parseOptionalDescription($tokens);
$description = $this->parseOptionalDescription($tokens, false);

if ($type !== null) {
return new Ast\PhpDoc\ParamTagValueNode($type, $isVariadic, $parameterName, $description, $isReference);
Expand All @@ -878,7 +878,7 @@ private function parseParamTagValue(TokenIterator $tokens): Ast\PhpDoc\PhpDocTag
private function parseParamImmediatelyInvokedCallableTagValue(TokenIterator $tokens): Ast\PhpDoc\ParamImmediatelyInvokedCallableTagValueNode
{
$parameterName = $this->parseRequiredVariableName($tokens);
$description = $this->parseOptionalDescription($tokens);
$description = $this->parseOptionalDescription($tokens, false);

return new Ast\PhpDoc\ParamImmediatelyInvokedCallableTagValueNode($parameterName, $description);
}
Expand All @@ -887,7 +887,7 @@ private function parseParamImmediatelyInvokedCallableTagValue(TokenIterator $tok
private function parseParamLaterInvokedCallableTagValue(TokenIterator $tokens): Ast\PhpDoc\ParamLaterInvokedCallableTagValueNode
{
$parameterName = $this->parseRequiredVariableName($tokens);
$description = $this->parseOptionalDescription($tokens);
$description = $this->parseOptionalDescription($tokens, false);

return new Ast\PhpDoc\ParamLaterInvokedCallableTagValueNode($parameterName, $description);
}
Expand All @@ -897,7 +897,7 @@ private function parseParamClosureThisTagValue(TokenIterator $tokens): Ast\PhpDo
{
$type = $this->typeParser->parse($tokens);
$parameterName = $this->parseRequiredVariableName($tokens);
$description = $this->parseOptionalDescription($tokens);
$description = $this->parseOptionalDescription($tokens, false);

return new Ast\PhpDoc\ParamClosureThisTagValueNode($type, $parameterName, $description);
}
Expand Down Expand Up @@ -950,7 +950,7 @@ private function parseRequireImplementsTagValue(TokenIterator $tokens): Ast\PhpD

private function parseDeprecatedTagValue(TokenIterator $tokens): Ast\PhpDoc\DeprecatedTagValueNode
{
$description = $this->parseOptionalDescription($tokens);
$description = $this->parseOptionalDescription($tokens, false);
return new Ast\PhpDoc\DeprecatedTagValueNode($description);
}

Expand All @@ -959,7 +959,7 @@ private function parsePropertyTagValue(TokenIterator $tokens): Ast\PhpDoc\Proper
{
$type = $this->typeParser->parse($tokens);
$parameterName = $this->parseRequiredVariableName($tokens);
$description = $this->parseOptionalDescription($tokens);
$description = $this->parseOptionalDescription($tokens, false);
return new Ast\PhpDoc\PropertyTagValueNode($type, $parameterName, $description);
}

Expand Down Expand Up @@ -1018,7 +1018,7 @@ private function parseMethodTagValue(TokenIterator $tokens): Ast\PhpDoc\MethodTa
}
$tokens->consumeTokenType(Lexer::TOKEN_CLOSE_PARENTHESES);

$description = $this->parseOptionalDescription($tokens);
$description = $this->parseOptionalDescription($tokens, false);
return new Ast\PhpDoc\MethodTagValueNode($isStatic, $returnType, $methodName, $parameters, $description, $templateTypes);
}

Expand Down Expand Up @@ -1071,7 +1071,7 @@ private function parseExtendsTagValue(string $tagName, TokenIterator $tokens): A
$this->typeParser->enrichWithAttributes($tokens, $baseType, $startLine, $startIndex),
);

$description = $this->parseOptionalDescription($tokens);
$description = $this->parseOptionalDescription($tokens, true);

switch ($tagName) {
case '@extends':
Expand Down Expand Up @@ -1112,7 +1112,7 @@ private function parseTypeAliasTagValue(TokenIterator $tokens): Ast\PhpDoc\TypeA

return new Ast\PhpDoc\TypeAliasTagValueNode($alias, $type);
} catch (ParserException $e) {
$this->parseOptionalDescription($tokens);
$this->parseOptionalDescription($tokens, false);
return new Ast\PhpDoc\TypeAliasTagValueNode(
$alias,
$this->enrichWithAttributes($tokens, new Ast\Type\InvalidTypeNode($e), $startLine, $startIndex),
Expand Down Expand Up @@ -1156,7 +1156,7 @@ private function parseAssertTagValue(TokenIterator $tokens): Ast\PhpDoc\PhpDocTa
$isEquality = $tokens->tryConsumeTokenType(Lexer::TOKEN_EQUAL);
$type = $this->typeParser->parse($tokens);
$parameter = $this->parseAssertParameter($tokens);
$description = $this->parseOptionalDescription($tokens);
$description = $this->parseOptionalDescription($tokens, false);

if (array_key_exists('method', $parameter)) {
return new Ast\PhpDoc\AssertTagMethodValueNode($type, $parameter['parameter'], $parameter['method'], $isNegated, $description, $isEquality);
Expand Down Expand Up @@ -1201,7 +1201,7 @@ private function parseAssertParameter(TokenIterator $tokens): array
private function parseSelfOutTagValue(TokenIterator $tokens): Ast\PhpDoc\SelfOutTagValueNode
{
$type = $this->typeParser->parse($tokens);
$description = $this->parseOptionalDescription($tokens);
$description = $this->parseOptionalDescription($tokens, true);

return new Ast\PhpDoc\SelfOutTagValueNode($type, $description);
}
Expand All @@ -1210,7 +1210,7 @@ private function parseParamOutTagValue(TokenIterator $tokens): Ast\PhpDoc\ParamO
{
$type = $this->typeParser->parse($tokens);
$parameterName = $this->parseRequiredVariableName($tokens);
$description = $this->parseOptionalDescription($tokens);
$description = $this->parseOptionalDescription($tokens, false);

return new Ast\PhpDoc\ParamOutTagValueNode($type, $parameterName, $description);
}
Expand Down Expand Up @@ -1240,7 +1240,10 @@ private function parseRequiredVariableName(TokenIterator $tokens): string
return $parameterName;
}

private function parseOptionalDescription(TokenIterator $tokens, bool $limitStartToken = false): string
/**
* @param bool $limitStartToken true should be used when the description immediately follows a parsed type
*/
private function parseOptionalDescription(TokenIterator $tokens, bool $limitStartToken): string
{
if ($limitStartToken) {
foreach (self::DISALLOWED_DESCRIPTION_START_TOKENS as $disallowedStartToken) {
Expand Down

0 comments on commit 5504a3b

Please sign in to comment.