@fluent/syntax
Version:
AST and parser for Fluent
95 lines (94 loc) • 4.24 kB
TypeScript
import * as AST from "./ast.js";
/**
* A read-only visitor.
*
* Subclasses can be used to gather information from an AST.
*
* To handle specific node types add methods like `visitPattern`.
* Then, to descend into children call `genericVisit`.
*
* Visiting methods must implement the following interface:
*
* ```ts
* interface VisitingMethod {
* (this: Visitor, node: AST.BaseNode): void;
* }
* ```
*/
export declare abstract class Visitor {
[prop: string]: unknown;
visit(node: AST.BaseNode): void;
genericVisit(node: AST.BaseNode): void;
visitResource?(node: AST.Resource): void;
visitMessage?(node: AST.Message): void;
visitTerm?(node: AST.Term): void;
visitPattern?(node: AST.Pattern): void;
visitTextElement?(node: AST.TextElement): void;
visitPlaceable?(node: AST.Placeable): void;
visitStringLiteral?(node: AST.StringLiteral): void;
visitNumberLiteral?(node: AST.NumberLiteral): void;
visitMessageReference?(node: AST.MessageReference): void;
visitTermReference?(node: AST.TermReference): void;
visitVariableReference?(node: AST.VariableReference): void;
visitFunctionReference?(node: AST.FunctionReference): void;
visitSelectExpression?(node: AST.SelectExpression): void;
visitCallArguments?(node: AST.CallArguments): void;
visitAttribute?(node: AST.Attribute): void;
visitVariant?(node: AST.Variant): void;
visitNamedArgument?(node: AST.NamedArgument): void;
visitIdentifier?(node: AST.Identifier): void;
visitComment?(node: AST.Comment): void;
visitGroupComment?(node: AST.GroupComment): void;
visitResourceComment?(node: AST.ResourceComment): void;
visitJunk?(node: AST.Junk): void;
visitSpan?(node: AST.Span): void;
visitAnnotation?(node: AST.Annotation): void;
}
/**
* A read-and-write visitor.
*
* Subclasses can be used to modify an AST in-place.
*
* To handle specific node types add methods like `visitPattern`.
* Then, to descend into children call `genericVisit`.
*
* Visiting methods must implement the following interface:
*
* ```ts
* interface TransformingMethod {
* (this: Transformer, node: AST.BaseNode): AST.BaseNode | undefined;
* }
* ```
*
* The returned node will replace the original one in the AST. Return
* `undefined` to remove the node instead.
*/
export declare abstract class Transformer extends Visitor {
[prop: string]: unknown;
visit(node: AST.BaseNode): AST.BaseNode | undefined;
genericVisit(node: AST.BaseNode): AST.BaseNode;
visitResource?(node: AST.Resource): AST.BaseNode | undefined;
visitMessage?(node: AST.Message): AST.BaseNode | undefined;
visitTerm?(node: AST.Term): AST.BaseNode | undefined;
visitPattern?(node: AST.Pattern): AST.BaseNode | undefined;
visitTextElement?(node: AST.TextElement): AST.BaseNode | undefined;
visitPlaceable?(node: AST.Placeable): AST.BaseNode | undefined;
visitStringLiteral?(node: AST.StringLiteral): AST.BaseNode | undefined;
visitNumberLiteral?(node: AST.NumberLiteral): AST.BaseNode | undefined;
visitMessageReference?(node: AST.MessageReference): AST.BaseNode | undefined;
visitTermReference?(node: AST.TermReference): AST.BaseNode | undefined;
visitVariableReference?(node: AST.VariableReference): AST.BaseNode | undefined;
visitFunctionReference?(node: AST.FunctionReference): AST.BaseNode | undefined;
visitSelectExpression?(node: AST.SelectExpression): AST.BaseNode | undefined;
visitCallArguments?(node: AST.CallArguments): AST.BaseNode | undefined;
visitAttribute?(node: AST.Attribute): AST.BaseNode | undefined;
visitVariant?(node: AST.Variant): AST.BaseNode | undefined;
visitNamedArgument?(node: AST.NamedArgument): AST.BaseNode | undefined;
visitIdentifier?(node: AST.Identifier): AST.BaseNode | undefined;
visitComment?(node: AST.Comment): AST.BaseNode | undefined;
visitGroupComment?(node: AST.GroupComment): AST.BaseNode | undefined;
visitResourceComment?(node: AST.ResourceComment): AST.BaseNode | undefined;
visitJunk?(node: AST.Junk): AST.BaseNode | undefined;
visitSpan?(node: AST.Span): AST.BaseNode | undefined;
visitAnnotation?(node: AST.Annotation): AST.BaseNode | undefined;
}