UNPKG

ts-budgie

Version:

Converts TypeScript code to Budgie.

40 lines (29 loc) 1.53 kB
import { CommandNames } from "budgie"; import * as ts from "typescript"; import { BudgieLine } from "../../output/budgieLine"; import { Transformation } from "../../output/transformation"; import { createUnsupportedBudgieLine, createUnsupportedTypeBudgieLine } from "../../output/unsupported"; import { NodeVisitor } from "../visitor"; const invalidInitializerComplaint = "Enum members must each have a constant numeric or string value."; const missingInitializerComplaint = "For now, enum members each require a value."; export class EnumMemberVisitor extends NodeVisitor { public visit(node: ts.EnumMember) { return [Transformation.fromNode(node, this.sourceFile, [this.getTransformationContents(node)])]; } private getTransformationContents(node: ts.EnumMember) { if (!ts.isIdentifier(node.name)) { return createUnsupportedTypeBudgieLine(); } if (node.initializer === undefined) { return createUnsupportedBudgieLine(missingInitializerComplaint); } if (typeof this.aliaser.getFriendlyTypeName(node.initializer) !== "string") { return createUnsupportedBudgieLine(invalidInitializerComplaint); } const args: string[] = [node.name.text, node.initializer.getText(this.sourceFile)]; if (node.parent.members[node.parent.members.length - 1] !== node) { args.push(","); } return new BudgieLine(CommandNames.EnumMember, ...args); } }