PHP TypeLang Help

StreamDumperVisitor

To print the structure of an AST straight to a stream while debugging, use StreamDumperVisitor — a DumperVisitor that writes to a PHP stream resource (php://stderr by default) instead of buffering into a string.

use TypeLang\Parser\Traverser; use TypeLang\Parser\Traverser\StreamDumperVisitor; $type = (new TypeLang\Parser\TypeParser()) ->parse('array<array-key, object{ key?: int<0, max> }>'); Traverser::new([new StreamDumperVisitor()])->traverse([$type]);

You can see the following text printed to STDERR:

NamedTypeNode Name(array) Identifier(array) Template\TemplateArgumentListNode Template\TemplateArgumentNode NamedTypeNode Name(array-key) Identifier(array-key) Template\TemplateArgumentNode NamedTypeNode Name(object) Identifier(object) Shape\FieldsListNode(sealed) Shape\NamedFieldNode(optional) Identifier(key) NamedTypeNode Name(int) Identifier(int) Template\TemplateArgumentListNode Template\TemplateArgumentNode Literal\IntLiteralNode(0) Template\TemplateArgumentNode NamedTypeNode Name(max) Identifier(max)

Writing Elsewhere

The second constructor argument is any stream URI accepted by fopen() — point it at a file to keep a persistent trace of every type parsed during a debugging session:

$visitor = new StreamDumperVisitor( stream: __DIR__ . '/parsed-types.log', ); Traverser::new([$visitor]) ->traverse([$type]);

Since a plain string is more convenient than a file when the goal is a one-off assertion or a log message, consider StringDumperVisitor instead in those cases.

05 July 2026