nicen up util methods
This commit is contained in:
@@ -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;
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user