UNPKG

decaffeinate-parser

Version:

A better AST for CoffeeScript, inspired by CoffeeScriptRedux.

68 lines (67 loc) 3.04 kB
"use strict"; exports.__esModule = true; var nodes_1 = require("decaffeinate-coffeescript2/lib/coffeescript/nodes"); var nodes_2 = require("../nodes"); var getLocation_1 = require("../util/getLocation"); var makeHeregex_1 = require("../util/makeHeregex"); var makeString_1 = require("../util/makeString"); var parseNumber_1 = require("../util/parseNumber"); var parseRegExp_1 = require("../util/parseRegExp"); var HEREGEX_PATTERN = /^\/\/\/((?:.|\s)*)\/\/\/([gimuy]*)$/; function mapLiteral(context, node) { var _a = getLocation_1["default"](context, node), line = _a.line, column = _a.column, start = _a.start, end = _a.end, raw = _a.raw; if (node instanceof nodes_1.ThisLiteral) { return new nodes_2.This(line, column, start, end, raw); } else if (node instanceof nodes_1.NullLiteral) { return new nodes_2.Null(line, column, start, end, raw); } else if (node instanceof nodes_1.UndefinedLiteral) { return new nodes_2.Undefined(line, column, start, end, raw); } else if (node instanceof nodes_1.BooleanLiteral) { return new nodes_2.Bool(line, column, start, end, raw, JSON.parse(node.value)); } else if (node instanceof nodes_1.IdentifierLiteral || node instanceof nodes_1.PropertyName) { // Sometimes the CoffeeScript AST contains a string object instead of a // string primitive. Convert to string primitive if necessary. var value = node.value.valueOf(); return new nodes_2.Identifier(line, column, start, end, raw, value); } else if (node instanceof nodes_1.PassthroughLiteral) { return new nodes_2.JavaScript(line, column, start, end, raw, node.value); } else if (node instanceof nodes_1.NumberLiteral) { if (raw.includes('.')) { return new nodes_2.Float(line, column, start, end, raw, parseNumber_1["default"](node.value)); } else { return new nodes_2.Int(line, column, start, end, raw, parseNumber_1["default"](node.value)); } } else if (node instanceof nodes_1.RegexLiteral) { var heregexMatch = raw.match(HEREGEX_PATTERN); if (heregexMatch) { var flags = heregexMatch[2]; return makeHeregex_1["default"](context, node, flags); } else { var regExp = parseRegExp_1["default"](node.value); return new nodes_2.Regex(line, column, start, end, raw, regExp.pattern, nodes_2.RegexFlags.parse(regExp.flags || '')); } } else if (node instanceof nodes_1.StringLiteral) { return makeString_1["default"](context, node); } else if (node instanceof nodes_1.StatementLiteral) { if (node.value === 'break') { return new nodes_2.Break(line, column, start, end, raw); } else if (node.value === 'continue') { return new nodes_2.Continue(line, column, start, end, raw); } } throw new Error("Unexpected literal: " + JSON.stringify(node)); } exports["default"] = mapLiteral;