Skip to content

Commit 28bdde0

Browse files
committed
Ast: improved parsing of class names
1 parent 7d481f0 commit 28bdde0

File tree

4 files changed

+38
-4
lines changed

4 files changed

+38
-4
lines changed

src/Ast/ClassNode.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,8 +164,9 @@ public static function parse(NodeParser $parser)
164164
$implements = NULL;
165165
$blockOpener = '';
166166

167-
if ($parser->isCurrent(T_STRING)) { // class name
168-
$name = Name::parse($parser->createSubParser());
167+
$name = Name::tryParseClassName($parser->createSubParser());
168+
169+
if ($name !== NULL) { // class name
169170
$parser->tryConsumeWhitespace();
170171

171172
} elseif ($parser->isCurrent('(')) {

src/Ast/InterfaceNode.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ public static function parse(NodeParser $parser)
108108
$extends = NULL;
109109
$blockOpener = '';
110110

111-
$name = Name::parse($parser->createSubParser());
111+
$name = Name::parseClassName($parser->createSubParser());
112112
$parser->tryConsumeWhitespace();
113113

114114
if ($parser->isCurrent(T_EXTENDS)) {

src/Ast/Name.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,4 +128,37 @@ public static function parse(NodeParser $parser)
128128
$parser->close();
129129
return new self($nodeIndentation, $name);
130130
}
131+
132+
133+
/**
134+
* @return self
135+
*/
136+
public static function parseClassName(NodeParser $parser)
137+
{
138+
$name = self::tryParseClassName($parser);
139+
140+
if ($name === NULL) {
141+
$parser->errorUnknowToken('Missing name');
142+
}
143+
144+
return $name;
145+
}
146+
147+
148+
/**
149+
* @return self|NULL
150+
*/
151+
public static function tryParseClassName(NodeParser $parser)
152+
{
153+
$nodeIndentation = '';
154+
$name = '';
155+
156+
if ($parser->isCurrent(T_STRING)) {
157+
$nodeIndentation = $parser->consumeNodeIndentation();
158+
$name = $parser->consumeTokenAsText(T_STRING);
159+
}
160+
161+
$parser->close();
162+
return $name !== '' ? new self($nodeIndentation, $name) : NULL;
163+
}
131164
}

src/Ast/TraitNode.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public static function parse(NodeParser $parser)
100100
$parser->tryConsumeWhitespace();
101101
$blockOpener = '';
102102

103-
$name = Name::parse($parser->createSubParser());
103+
$name = Name::parseClassName($parser->createSubParser());
104104
$parser->tryConsumeWhitespace();
105105

106106
$parser->tryConsumeWhitespace();

0 commit comments

Comments
 (0)