Skip to content

Commit

Permalink
Ast: improved parsing of class names
Browse files Browse the repository at this point in the history
  • Loading branch information
janpecha committed May 14, 2024
1 parent 7d481f0 commit 28bdde0
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 4 deletions.
5 changes: 3 additions & 2 deletions src/Ast/ClassNode.php
Original file line number Diff line number Diff line change
Expand Up @@ -164,8 +164,9 @@ public static function parse(NodeParser $parser)
$implements = NULL;
$blockOpener = '';

if ($parser->isCurrent(T_STRING)) { // class name
$name = Name::parse($parser->createSubParser());
$name = Name::tryParseClassName($parser->createSubParser());

if ($name !== NULL) { // class name
$parser->tryConsumeWhitespace();

} elseif ($parser->isCurrent('(')) {
Expand Down
2 changes: 1 addition & 1 deletion src/Ast/InterfaceNode.php
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ public static function parse(NodeParser $parser)
$extends = NULL;
$blockOpener = '';

$name = Name::parse($parser->createSubParser());
$name = Name::parseClassName($parser->createSubParser());
$parser->tryConsumeWhitespace();

if ($parser->isCurrent(T_EXTENDS)) {
Expand Down
33 changes: 33 additions & 0 deletions src/Ast/Name.php
Original file line number Diff line number Diff line change
Expand Up @@ -128,4 +128,37 @@ public static function parse(NodeParser $parser)
$parser->close();
return new self($nodeIndentation, $name);
}


/**
* @return self
*/
public static function parseClassName(NodeParser $parser)
{
$name = self::tryParseClassName($parser);

if ($name === NULL) {
$parser->errorUnknowToken('Missing name');
}

return $name;
}


/**
* @return self|NULL
*/
public static function tryParseClassName(NodeParser $parser)
{
$nodeIndentation = '';
$name = '';

if ($parser->isCurrent(T_STRING)) {
$nodeIndentation = $parser->consumeNodeIndentation();
$name = $parser->consumeTokenAsText(T_STRING);
}

$parser->close();
return $name !== '' ? new self($nodeIndentation, $name) : NULL;
}
}
2 changes: 1 addition & 1 deletion src/Ast/TraitNode.php
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ public static function parse(NodeParser $parser)
$parser->tryConsumeWhitespace();
$blockOpener = '';

$name = Name::parse($parser->createSubParser());
$name = Name::parseClassName($parser->createSubParser());
$parser->tryConsumeWhitespace();

$parser->tryConsumeWhitespace();
Expand Down

0 comments on commit 28bdde0

Please sign in to comment.