Skip to content

Commit 77f86cb

Browse files
committed
Give input type hints to Visitor and Transformer
1 parent d4babe5 commit 77f86cb

1 file changed

Lines changed: 61 additions & 59 deletions

File tree

fluent-syntax/src/visitor.ts

Lines changed: 61 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { BaseNode } from "./ast.js";
1+
import * as AST from "./ast.js";
22

33
/**
44
* A read-only visitor.
@@ -11,13 +11,13 @@ import { BaseNode } from "./ast.js";
1111
* Visiting methods must implement the following interface:
1212
*
1313
* interface VisitingMethod {
14-
* (this: Visitor, node: BaseNode): void;
14+
* (this: Visitor, node: AST.BaseNode): void;
1515
* }
1616
*/
1717
export abstract class Visitor {
1818
[prop: string]: unknown;
1919

20-
visit(node: BaseNode): void {
20+
visit(node: AST.BaseNode): void {
2121
let visit = this[`visit${node.type}`];
2222
if (typeof visit === "function") {
2323
visit.call(this, node);
@@ -26,43 +26,43 @@ export abstract class Visitor {
2626
}
2727
}
2828

29-
genericVisit(node: BaseNode): void {
29+
genericVisit(node: AST.BaseNode): void {
3030
for (const key of Object.keys(node)) {
3131
let prop = node[key];
32-
if (prop instanceof BaseNode) {
32+
if (prop instanceof AST.BaseNode) {
3333
this.visit(prop);
3434
} else if (Array.isArray(prop)) {
3535
for (let element of prop) {
36-
this.visit(element as BaseNode);
36+
this.visit(element as AST.BaseNode);
3737
}
3838
}
3939
}
4040
}
4141

42-
visitResource?(node: BaseNode): void;
43-
visitMessage?(node: BaseNode): void;
44-
visitTerm?(node: BaseNode): void;
45-
visitPattern?(node: BaseNode): void;
46-
visitTextElement?(node: BaseNode): void;
47-
visitPlaceable?(node: BaseNode): void;
48-
visitStringLiteral?(node: BaseNode): void;
49-
visitNumberLiteral?(node: BaseNode): void;
50-
visitMessageReference?(node: BaseNode): void;
51-
visitTermReference?(node: BaseNode): void;
52-
visitVariableReference?(node: BaseNode): void;
53-
visitFunctionReference?(node: BaseNode): void;
54-
visitSelectExpression?(node: BaseNode): void;
55-
visitCallArguments?(node: BaseNode): void;
56-
visitAttribute?(node: BaseNode): void;
57-
visitVariant?(node: BaseNode): void;
58-
visitNamedArgument?(node: BaseNode): void;
59-
visitIdentifier?(node: BaseNode): void;
60-
visitComment?(node: BaseNode): void;
61-
visitGroupComment?(node: BaseNode): void;
62-
visitResourceComment?(node: BaseNode): void;
63-
visitJunk?(node: BaseNode): void;
64-
visitSpan?(node: BaseNode): void;
65-
visitAnnotation?(node: BaseNode): void;
42+
visitResource?(node: AST.Resource): void;
43+
visitMessage?(node: AST.Message): void;
44+
visitTerm?(node: AST.Term): void;
45+
visitPattern?(node: AST.Pattern): void;
46+
visitTextElement?(node: AST.TextElement): void;
47+
visitPlaceable?(node: AST.Placeable): void;
48+
visitStringLiteral?(node: AST.StringLiteral): void;
49+
visitNumberLiteral?(node: AST.NumberLiteral): void;
50+
visitMessageReference?(node: AST.MessageReference): void;
51+
visitTermReference?(node: AST.TermReference): void;
52+
visitVariableReference?(node: AST.VariableReference): void;
53+
visitFunctionReference?(node: AST.FunctionReference): void;
54+
visitSelectExpression?(node: AST.SelectExpression): void;
55+
visitCallArguments?(node: AST.CallArguments): void;
56+
visitAttribute?(node: AST.Attribute): void;
57+
visitVariant?(node: AST.Variant): void;
58+
visitNamedArgument?(node: AST.NamedArgument): void;
59+
visitIdentifier?(node: AST.Identifier): void;
60+
visitComment?(node: AST.Comment): void;
61+
visitGroupComment?(node: AST.GroupComment): void;
62+
visitResourceComment?(node: AST.ResourceComment): void;
63+
visitJunk?(node: AST.Junk): void;
64+
visitSpan?(node: AST.Span): void;
65+
visitAnnotation?(node: AST.Annotation): void;
6666
}
6767

6868
/**
@@ -76,7 +76,7 @@ export abstract class Visitor {
7676
* Visiting methods must implement the following interface:
7777
*
7878
* interface TransformingMethod {
79-
* (this: Transformer, node: BaseNode): BaseNode | undefined;
79+
* (this: Transformer, node: AST.BaseNode): AST.BaseNode | undefined;
8080
* }
8181
*
8282
* The returned node will replace the original one in the AST. Return
@@ -85,26 +85,26 @@ export abstract class Visitor {
8585
export abstract class Transformer extends Visitor {
8686
[prop: string]: unknown;
8787

88-
visit(node: BaseNode): BaseNode | undefined {
88+
visit(node: AST.BaseNode): AST.BaseNode | undefined {
8989
let visit = this[`visit${node.type}`];
9090
if (typeof visit === "function") {
9191
return visit.call(this, node);
9292
}
9393
return this.genericVisit(node);
9494
}
9595

96-
genericVisit(node: BaseNode): BaseNode | undefined {
96+
genericVisit(node: AST.BaseNode): AST.BaseNode | undefined {
9797
for (const key of Object.keys(node)) {
9898
let prop = node[key];
99-
if (prop instanceof BaseNode) {
99+
if (prop instanceof AST.BaseNode) {
100100
let newVal = this.visit(prop);
101101
if (newVal === undefined) {
102102
delete node[key];
103103
} else {
104104
node[key] = newVal;
105105
}
106106
} else if (Array.isArray(prop)) {
107-
let newVals: Array<BaseNode> = [];
107+
let newVals: Array<AST.BaseNode> = [];
108108
for (let element of prop) {
109109
let newVal = this.visit(element);
110110
if (newVal !== undefined) {
@@ -117,28 +117,30 @@ export abstract class Transformer extends Visitor {
117117
return node;
118118
}
119119

120-
visitResource?(node: BaseNode): BaseNode | undefined;
121-
visitMessage?(node: BaseNode): BaseNode | undefined;
122-
visitTerm?(node: BaseNode): BaseNode | undefined;
123-
visitPattern?(node: BaseNode): BaseNode | undefined;
124-
visitTextElement?(node: BaseNode): BaseNode | undefined;
125-
visitPlaceable?(node: BaseNode): BaseNode | undefined;
126-
visitStringLiteral?(node: BaseNode): BaseNode | undefined;
127-
visitNumberLiteral?(node: BaseNode): BaseNode | undefined;
128-
visitMessageReference?(node: BaseNode): BaseNode | undefined;
129-
visitTermReference?(node: BaseNode): BaseNode | undefined;
130-
visitVariableReference?(node: BaseNode): BaseNode | undefined;
131-
visitFunctionReference?(node: BaseNode): BaseNode | undefined;
132-
visitSelectExpression?(node: BaseNode): BaseNode | undefined;
133-
visitCallArguments?(node: BaseNode): BaseNode | undefined;
134-
visitAttribute?(node: BaseNode): BaseNode | undefined;
135-
visitVariant?(node: BaseNode): BaseNode | undefined;
136-
visitNamedArgument?(node: BaseNode): BaseNode | undefined;
137-
visitIdentifier?(node: BaseNode): BaseNode | undefined;
138-
visitComment?(node: BaseNode): BaseNode | undefined;
139-
visitGroupComment?(node: BaseNode): BaseNode | undefined;
140-
visitResourceComment?(node: BaseNode): BaseNode | undefined;
141-
visitJunk?(node: BaseNode): BaseNode | undefined;
142-
visitSpan?(node: BaseNode): BaseNode | undefined;
143-
visitAnnotation?(node: BaseNode): BaseNode | undefined;
120+
visitResource?(node: AST.Resource): AST.BaseNode | undefined;
121+
visitMessage?(node: AST.Message): AST.BaseNode | undefined;
122+
visitTerm?(node: AST.Term): AST.BaseNode | undefined;
123+
visitPattern?(node: AST.Pattern): AST.BaseNode | undefined;
124+
visitTextElement?(node: AST.TextElement): AST.BaseNode | undefined;
125+
visitPlaceable?(node: AST.Placeable): AST.BaseNode | undefined;
126+
visitStringLiteral?(node: AST.StringLiteral): AST.BaseNode | undefined;
127+
visitNumberLiteral?(node: AST.NumberLiteral): AST.BaseNode | undefined;
128+
visitMessageReference?(node: AST.MessageReference): AST.BaseNode | undefined;
129+
visitTermReference?(node: AST.TermReference): AST.BaseNode | undefined;
130+
visitVariableReference?(node: AST.VariableReference):
131+
AST.BaseNode | undefined;
132+
visitFunctionReference?(node: AST.FunctionReference):
133+
AST.BaseNode | undefined;
134+
visitSelectExpression?(node: AST.SelectExpression): AST.BaseNode | undefined;
135+
visitCallArguments?(node: AST.CallArguments): AST.BaseNode | undefined;
136+
visitAttribute?(node: AST.Attribute): AST.BaseNode | undefined;
137+
visitVariant?(node: AST.Variant): AST.BaseNode | undefined;
138+
visitNamedArgument?(node: AST.NamedArgument): AST.BaseNode | undefined;
139+
visitIdentifier?(node: AST.Identifier): AST.BaseNode | undefined;
140+
visitComment?(node: AST.Comment): AST.BaseNode | undefined;
141+
visitGroupComment?(node: AST.GroupComment): AST.BaseNode | undefined;
142+
visitResourceComment?(node: AST.ResourceComment): AST.BaseNode | undefined;
143+
visitJunk?(node: AST.Junk): AST.BaseNode | undefined;
144+
visitSpan?(node: AST.Span): AST.BaseNode | undefined;
145+
visitAnnotation?(node: AST.Annotation): AST.BaseNode | undefined;
144146
}

0 commit comments

Comments
 (0)