@taml/ast
Version:
Abstract Syntax Tree types and utilities for TAML (Terminal ANSI Markup Language)
78 lines • 2.68 kB
TypeScript
/**
* Visitor pattern implementation for TAML AST
*/
import type { DocumentNode, ElementNode, TamlNode, TextNode } from "./nodes.js";
/**
* Visitor interface for traversing and processing AST nodes
*/
export interface Visitor {
/** Called when visiting a document node */
visitDocument?(node: DocumentNode): void;
/** Called when visiting an element node */
visitElement?(node: ElementNode): void;
/** Called when visiting a text node */
visitText?(node: TextNode): void;
/** Called before visiting children (pre-order) */
enterNode?(node: TamlNode): void;
/** Called after visiting children (post-order) */
exitNode?(node: TamlNode): void;
}
/**
* Transformer interface for converting AST nodes to other types
*/
export interface Transformer<T = TamlNode> {
/** Transform a document node */
visitDocument?(node: DocumentNode): T;
/** Transform an element node */
visitElement?(node: ElementNode): T;
/** Transform a text node */
visitText?(node: TextNode): T;
}
/**
* Visit an AST node and its children using the visitor pattern
*/
export declare function visit(node: TamlNode, visitor: Visitor): void;
/**
* Transform an AST node using the transformer pattern
*/
export declare function transform<T>(node: TamlNode, transformer: Transformer<T>): T;
/**
* Visit nodes asynchronously
*/
export declare function visitAsync(node: TamlNode, visitor: AsyncVisitor): Promise<void>;
/**
* Async visitor interface
*/
export interface AsyncVisitor {
/** Called when visiting a document node */
visitDocument?(node: DocumentNode): Promise<void>;
/** Called when visiting an element node */
visitElement?(node: ElementNode): Promise<void>;
/** Called when visiting a text node */
visitText?(node: TextNode): Promise<void>;
/** Called before visiting children (pre-order) */
enterNode?(node: TamlNode): Promise<void>;
/** Called after visiting children (post-order) */
exitNode?(node: TamlNode): Promise<void>;
}
/**
* Create a visitor that only visits specific node types
*/
export declare function createTypedVisitor<T extends TamlNode>(nodeTest: (node: TamlNode) => node is T, callback: (node: T) => void): Visitor;
/**
* Create a visitor that collects nodes of a specific type
*/
export declare function createCollectorVisitor<T extends TamlNode>(nodeTest: (node: TamlNode) => node is T): Visitor & {
nodes: T[];
};
/**
* Create a visitor that counts nodes by type
*/
export declare function createCounterVisitor(): Visitor & {
counts: {
document: number;
element: number;
text: number;
};
};
//# sourceMappingURL=visitor.d.ts.map