|
25 | 25 | use TypeLang\Parser\Node\Stmt\LogicalTypeNode; |
26 | 26 | use TypeLang\Parser\Node\Stmt\NamedTypeNode; |
27 | 27 | use TypeLang\Parser\Node\Stmt\NullableTypeNode; |
| 28 | +use TypeLang\Parser\Node\Stmt\Shape\ClassConstMaskFieldNode; |
| 29 | +use TypeLang\Parser\Node\Stmt\Shape\ConstMaskFieldNode; |
28 | 30 | use TypeLang\Parser\Node\Stmt\Shape\FieldNode; |
29 | 31 | use TypeLang\Parser\Node\Stmt\Shape\FieldsListNode; |
30 | 32 | use TypeLang\Parser\Node\Stmt\Shape\NamedFieldNode; |
@@ -289,13 +291,56 @@ protected function printShapeFieldNode(FieldNode $field): string |
289 | 291 | protected function printShapeFieldName(FieldNode $field): string |
290 | 292 | { |
291 | 293 | return match (true) { |
292 | | - $field instanceof StringNamedFieldNode, |
293 | | - $field instanceof NumericFieldNode => $field->key->getRawValue(), |
294 | | - $field instanceof NamedFieldNode => $field->key->toString(), |
295 | | - default => '', |
| 294 | + $field instanceof StringNamedFieldNode => $this->printStringShapeFieldName($field), |
| 295 | + $field instanceof NumericFieldNode => $this->printNumericShapeFieldName($field), |
| 296 | + $field instanceof NamedFieldNode => $this->printNamedShapeFieldName($field), |
| 297 | + $field instanceof ConstMaskFieldNode => $this->printConstMaskShapeFieldName($field), |
| 298 | + $field instanceof ClassConstMaskFieldNode => $this->printClassConstMaskShapeFieldName($field), |
| 299 | + default => $this->printUnknownShapeFieldName($field), |
296 | 300 | }; |
297 | 301 | } |
298 | 302 |
|
| 303 | + protected function printStringShapeFieldName(StringNamedFieldNode $field): string |
| 304 | + { |
| 305 | + return $field->key->getRawValue(); |
| 306 | + } |
| 307 | + |
| 308 | + protected function printNumericShapeFieldName(NumericFieldNode $field): string |
| 309 | + { |
| 310 | + return $field->key->getRawValue(); |
| 311 | + } |
| 312 | + |
| 313 | + protected function printNamedShapeFieldName(NamedFieldNode $field): string |
| 314 | + { |
| 315 | + return $field->key->toString(); |
| 316 | + } |
| 317 | + |
| 318 | + protected function printConstMaskShapeFieldName(ConstMaskFieldNode $field): string |
| 319 | + { |
| 320 | + return $field->key->name->toString() . '*'; |
| 321 | + } |
| 322 | + |
| 323 | + protected function printClassConstMaskShapeFieldName(ClassConstMaskFieldNode $field): string |
| 324 | + { |
| 325 | + $class = $field->key->class; |
| 326 | + $constant = $field->key->constant; |
| 327 | + |
| 328 | + if ($field->key instanceof ClassConstNode) { |
| 329 | + return $class . '::' . $constant; |
| 330 | + } |
| 331 | + |
| 332 | + if ($constant === null) { |
| 333 | + return $class . '::*'; |
| 334 | + } |
| 335 | + |
| 336 | + return $class . '::' . $constant . '*'; |
| 337 | + } |
| 338 | + |
| 339 | + protected function printUnknownShapeFieldName(FieldNode $field): string |
| 340 | + { |
| 341 | + return ''; |
| 342 | + } |
| 343 | + |
299 | 344 | /** |
300 | 345 | * @param ArgumentsListNode<ArgumentNode>|TemplateArgumentsListNode $arguments |
301 | 346 | * |
|
0 commit comments