From abb146fff64eea41cd4f3bed889b7e767d69a865 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Wed, 1 Oct 2014 11:02:46 +1000 Subject: [PATCH] nicen up util methods --- lib/6to5/util.js | 89 +++++++++++++++++++++--------------------------- 1 file changed, 38 insertions(+), 51 deletions(-) diff --git a/lib/6to5/util.js b/lib/6to5/util.js index d4d5a80b20..f0de51ef3a 100644 --- a/lib/6to5/util.js +++ b/lib/6to5/util.js @@ -4,30 +4,37 @@ var esprima = require("esprima"); var path = require("path"); var fs = require("fs"); var _ = require("lodash"); +var b = require("ast-types").builders; _.each(esprima.Syntax, function (name) { estraverse.VisitorKeys[name] = estraverse.VisitorKeys[name] || []; }); -exports.parse = function (code, opts) { - opts = _.defaults(opts || {}, { - comment: true, - tokens: true, - range: true, - loc: true - }); - - code = [].concat(code).join(""); +exports.parse = function (filename, code, callback, opts) { + opts = opts || {}; + if (opts === true) { + opts = { + comment: true, + tokens: true, + range: true, + loc: true + }; + } try { - var tree = esprima.parse(code, opts); + var ast = esprima.parse(code, opts); - if (tree.tokens && tree.comments) { - estraverse.attachComments(tree, tree.comments, tree.tokens); + if (ast.tokens && ast.comments) { + estraverse.attachComments(ast, ast.comments, ast.tokens); } - return tree; + if (callback) { + return callback(ast); + } else { + return ast; + } } catch (err) { + err.message = filename + ": " + err.message; if (err.lineNumber) { var frame = exports.codeFrame(code, err.lineNumber, err.column); err.message = err.message + frame; @@ -37,14 +44,18 @@ exports.parse = function (code, opts) { }; exports.errorWithNode = function (node, msg) { - var err = new SyntaxError(msg); - err.lineNumber = node.loc.start.line; - err.column = node.loc.start.column; + var line = node.loc.start.line; + var col = node.loc.start.column; + + var err = new SyntaxError("Line " + line + ": " + msg); + err.lineNumber = line; + err.column = col; return err; }; exports.canCompile = function (filename) { - return path.extname(filename) === ".js"; + var ext = path.extname(filename); + return ext === ".js" || ext === ".es6"; }; exports.buildUidGenerator = function () { @@ -76,38 +87,16 @@ exports.pushMutatorMap = function (mutatorMap, key, kind, method) { }; exports.buildDefineProperties = function (mutatorMap, keyNode) { - var objExpr = { - type: "ObjectExpression", - properties: [] - }; + var objExpr = b.objectExpression([]); _.each(mutatorMap, function (map, key) { - var mapNode = { - type: "ObjectExpression", - properties: [] - }; + var mapNode = b.objectExpression([]); - var propNode = { - type: "Property", - key: { - type: "Identifier", - name: key - }, - value: mapNode, - kind: "init" - }; + var propNode = b.property("init", b.identifier(key), mapNode); _.each(map, function (methodNode, type) { if (methodNode.type === "MethodDefinition") methodNode = methodNode.value; - mapNode.properties.push({ - type: "Property", - key: { - type: "Identifier", - name: type - }, - value: methodNode, - kind: "init" - }); + mapNode.properties.push(b.property("init", b.identifier(type), methodNode)); }); objExpr.properties.push(propNode); @@ -197,14 +186,12 @@ if (fs.existsSync(templatesCacheLoc)) { var templatesLoc = __dirname + "/templates"; _.each(fs.readdirSync(templatesLoc), function (name) { - var key = path.basename(name, path.extname(name)); + var key = path.basename(name, path.extname(name)); + var loc = templatesLoc + "/" + name; + var code = fs.readFileSync(loc, "utf8"); - var code = fs.readFileSync(templatesLoc + "/" + name, "utf8"); - exports.templates[key] = exports.parse(code, { - comment: false, - tokens: false, - range: false, - loc: false - }); + var template = exports.parse(loc, code); + exports.removeLoc(template); + exports.templates[key] = template; }); }