|
23 | 23 | namespace PackageFactory\ComponentEngine\Language\Parser\TypeReference; |
24 | 24 |
|
25 | 25 | use PackageFactory\ComponentEngine\Domain\TypeName\TypeName; |
| 26 | +use PackageFactory\ComponentEngine\Language\AST\Node\TypeReference\InvalidTypeNameNodes; |
26 | 27 | use PackageFactory\ComponentEngine\Language\AST\Node\TypeReference\InvalidTypeReferenceNode; |
27 | 28 | use PackageFactory\ComponentEngine\Language\AST\Node\TypeReference\TypeNameNode; |
28 | 29 | use PackageFactory\ComponentEngine\Language\AST\Node\TypeReference\TypeNameNodes; |
@@ -66,10 +67,7 @@ public function parse(\Iterator $tokens): TypeReferenceNode |
66 | 67 | isOptional: $isOptional |
67 | 68 | ); |
68 | 69 | } catch (InvalidTypeReferenceNode $e) { |
69 | | - throw TypeReferenceCouldNotBeParsed::becauseOfInvalidTypeReferenceNode( |
70 | | - cause: $e, |
71 | | - affectedRangeInSource: $rangeInSource |
72 | | - ); |
| 70 | + throw TypeReferenceCouldNotBeParsed::becauseOfInvalidTypeReferenceNode($e); |
73 | 71 | } |
74 | 72 | } |
75 | 73 |
|
@@ -97,31 +95,40 @@ public function parseTypeNames(\Iterator $tokens): TypeNameNodes |
97 | 95 | { |
98 | 96 | $items = []; |
99 | 97 | while (true) { |
100 | | - Scanner::assertType($tokens, TokenType::STRING); |
101 | | - |
102 | | - $typeNameToken = $tokens->current(); |
103 | | - $items[] = new TypeNameNode( |
104 | | - attributes: new NodeAttributes( |
105 | | - rangeInSource: $typeNameToken->boundaries |
106 | | - ), |
107 | | - value: TypeName::from($typeNameToken->value) |
108 | | - ); |
| 98 | + $items[] = $this->parseTypeName($tokens); |
109 | 99 |
|
110 | | - Scanner::skipOne($tokens); |
111 | | - |
112 | | - if (Scanner::isEnd($tokens)) { |
| 100 | + if (Scanner::isEnd($tokens) || Scanner::type($tokens) !== TokenType::PIPE) { |
113 | 101 | break; |
114 | 102 | } |
115 | 103 |
|
116 | | - if (Scanner::type($tokens) === TokenType::PIPE) { |
117 | | - Scanner::skipOne($tokens); |
118 | | - continue; |
119 | | - } |
| 104 | + Scanner::skipOne($tokens); |
| 105 | + } |
120 | 106 |
|
121 | | - break; |
| 107 | + try { |
| 108 | + return new TypeNameNodes(...$items); |
| 109 | + } catch (InvalidTypeNameNodes $e) { |
| 110 | + throw TypeReferenceCouldNotBeParsed::becauseOfInvalidTypeTypeNameNodes($e); |
122 | 111 | } |
| 112 | + } |
| 113 | + |
| 114 | + /** |
| 115 | + * @param \Iterator<mixed,Token> $tokens |
| 116 | + * @return TypeNameNode |
| 117 | + */ |
| 118 | + public function parseTypeName(\Iterator $tokens): TypeNameNode |
| 119 | + { |
| 120 | + Scanner::assertType($tokens, TokenType::STRING); |
| 121 | + |
| 122 | + $typeNameToken = $tokens->current(); |
123 | 123 |
|
124 | | - return new TypeNameNodes(...$items); |
| 124 | + Scanner::skipOne($tokens); |
| 125 | + |
| 126 | + return new TypeNameNode( |
| 127 | + attributes: new NodeAttributes( |
| 128 | + rangeInSource: $typeNameToken->boundaries |
| 129 | + ), |
| 130 | + value: TypeName::from($typeNameToken->value) |
| 131 | + ); |
125 | 132 | } |
126 | 133 |
|
127 | 134 | /** |
|
0 commit comments