ts-budgie
Version:
Converts TypeScript code to Budgie.
102 lines (97 loc) • 6.02 kB
text/typescript
import * as ts from "typescript";
import { NodeVisitor } from "./visitor";
import { ArrayLiteralExpressionVisitor } from "./visitors/arrayLiteralExpressionVisitor";
import { BinaryExpressionVisitor } from "./visitors/binaryExpressionVisitor";
import { BreakStatementVisitor } from "./visitors/breakStatementVisitor";
import { CallExpressionVisitor } from "./visitors/callExpressionVisitor";
import { ClassDeclarationVisitor } from "./visitors/classDeclarationVisitor";
import { ConstructorDeclarationVisitor } from "./visitors/constructorDeclarationVisitor";
import { ContinueStatementVisitor } from "./visitors/continueStatementVisitor";
import { ElementAccessExpressionVisitor } from "./visitors/elementAccessExpressionVisitor";
import { EnumDeclarationVisitor } from "./visitors/enumDeclarationVisitor";
import { EnumMemberVisitor } from "./visitors/enumMemberVisitor";
import { ForOfStatementVisitor } from "./visitors/forOfStatementVisitor";
import { ForStatementVisitor } from "./visitors/forStatementVisitor";
import { IfStatementVisitor } from "./visitors/ifStatementVisitor";
import { ImportDeclarationVisitor } from "./visitors/importDeclarationVisitor";
import { InterfaceDeclarationVisitor } from "./visitors/interfaceDeclarationVisitor";
import { LiteralVisitor } from "./visitors/literalVisitor";
import { MethodDeclarationVisitor } from "./visitors/methodDeclarationVisitor";
import { MethodSignatureVisitor } from "./visitors/methodSignatureVisitor";
import { NewExpressionVisitor } from "./visitors/newExpressionVisitor";
import { ObjectLiteralExpressionVisitor } from "./visitors/objectLiteralExpressionVisitor";
import { ParenthesizedExpressionVisitor } from "./visitors/parenthesizedExpressionVisitor";
import { PropertyAccessExpressionVisitor } from "./visitors/propertyAccessExpressionVisitor";
import { PropertyAssignmentVisitor } from "./visitors/propertyAssignmentVisitor";
import { PropertyDeclarationVisitor } from "./visitors/propertyDeclarationVisitor";
import { ReturnStatementVisitor } from "./visitors/returnStatementVisitor";
import { SourceFileVisitor } from "./visitors/sourceFileVisitor";
import { StringLiteralVisitor } from "./visitors/stringLiteralVisitor";
import { TemplateExpressionVisitor } from "./visitors/TemplateExpressionVisitor";
import { ThisExpressionVisitor } from "./visitors/thisExpressionVisitor";
import { ThrowStatementVisitor } from "./visitors/throwStatementVisitor";
import { TypeLiteralVisitor } from "./visitors/typeLiteralVisitor";
import { UnsupportedVisitor } from "./visitors/unsupportedVisitor";
import { VariableDeclarationVisitor } from "./visitors/variableDeclarationVisitor";
import { WhileStatementVisitor } from "./visitors/whileStatementVisitor";
interface IVisitorCreators {
[]: typeof NodeVisitor;
}
const creators: IVisitorCreators = {
[]: ArrayLiteralExpressionVisitor,
[]: BinaryExpressionVisitor,
[]: BreakStatementVisitor,
[]: CallExpressionVisitor,
[]: ClassDeclarationVisitor,
[]: UnsupportedVisitor.withDescriptor("class expressions"),
[]: ConstructorDeclarationVisitor,
[]: ContinueStatementVisitor,
[]: ElementAccessExpressionVisitor,
[]: EnumDeclarationVisitor,
[]: EnumMemberVisitor,
[]: UnsupportedVisitor.withDescriptor("exports"),
[]: LiteralVisitor,
[]: LiteralVisitor,
[]: ForOfStatementVisitor,
[]: ForStatementVisitor,
[]: LiteralVisitor,
[]: IfStatementVisitor,
[]: ImportDeclarationVisitor,
[]: InterfaceDeclarationVisitor,
[]: MethodDeclarationVisitor,
[]: MethodSignatureVisitor,
[]: UnsupportedVisitor.withDescriptor("namespaces"),
[]: NewExpressionVisitor,
[]: LiteralVisitor,
[]: ObjectLiteralExpressionVisitor,
[]: ParenthesizedExpressionVisitor,
[]: PropertyAccessExpressionVisitor,
[]: PropertyAssignmentVisitor,
[]: PropertyDeclarationVisitor,
[]: ReturnStatementVisitor,
[]: SourceFileVisitor,
[]: StringLiteralVisitor,
[]: UnsupportedVisitor.withDescriptor("super"),
[]: UnsupportedVisitor.withDescriptor("switch"),
[]: TemplateExpressionVisitor,
[]: ThisExpressionVisitor,
[]: ThrowStatementVisitor,
[]: LiteralVisitor,
[]: TypeLiteralVisitor,
[]: VariableDeclarationVisitor,
[]: WhileStatementVisitor,
};
/**
* Holds visitor creators by their node syntax kind.
*/
export class VisitorCreatorsBag {
/**
* Gets the creator for a node syntax kind.
*
* @param kind Syntax kind for a node.
* @returns A creator for that kind of node.
*/
public getCreator(kind: ts.SyntaxKind): typeof NodeVisitor {
return creators[kind];
}
}