nicen up util methods

This commit is contained in:
Sebastian McKenzie
2014-10-01 11:02:46 +10:00
parent 444c0d4532
commit abb146fff6

View File

@@ -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;
});
}