move some util and traverse methods into types

This commit is contained in:
Sebastian McKenzie
2014-10-30 13:26:06 +11:00
parent 45cb755845
commit e797be518f
15 changed files with 109 additions and 107 deletions

View File

@@ -2,6 +2,7 @@ module.exports = AMDFormatter;
var CommonJSFormatter = require("./common");
var util = require("../util");
var t = require("../types");
var b = require("../builders");
var _ = require("lodash");
@@ -51,7 +52,7 @@ AMDFormatter.prototype.import = function (node) {
};
AMDFormatter.prototype.importSpecifier = function (specifier, node, nodes) {
var key = util.getSpecifierName(specifier);
var key = t.getSpecifierName(specifier);
var id = specifier.id;
// import foo from "foo";

View File

@@ -1,6 +1,7 @@
module.exports = CommonJSFormatter;
var util = require("../util");
var t = require("../types");
var b = require("../builders");
function CommonJSFormatter(file) {
@@ -15,7 +16,7 @@ CommonJSFormatter.prototype.import = function (node, nodes) {
};
CommonJSFormatter.prototype.importSpecifier = function (specifier, node, nodes) {
var variableName = util.getSpecifierName(specifier);
var variableName = t.getSpecifierName(specifier);
// import foo from "foo";
if (specifier.default) {
@@ -38,7 +39,7 @@ CommonJSFormatter.prototype.export = function (node, nodes) {
var declar = node.declaration;
if (node.default) {
util.ensureExpressionType(declar);
t.ensureExpressionType(declar);
nodes.push(util.template("exports-default", {
VALUE: declar
@@ -65,7 +66,7 @@ CommonJSFormatter.prototype.export = function (node, nodes) {
};
CommonJSFormatter.prototype._exportSpecifier = function (getRef, specifier, node, nodes) {
var variableName = util.getSpecifierName(specifier);
var variableName = t.getSpecifierName(specifier);
if (node.source) {
if (specifier.type === "ExportBatchSpecifier") {

View File

@@ -1,6 +1,7 @@
module.exports = Transformer;
var traverse = require("./traverse");
var t = require("./types");
var _ = require("lodash");
function Transformer(key, transformer) {
@@ -34,7 +35,7 @@ Transformer.prototype.transform = function (file) {
var build = function (exit) {
return function (node, parent) {
// add any node type aliases that exist
var types = [node.type].concat(traverse.aliases[node.type] || []);
var types = [node.type].concat(t.aliases[node.type] || []);
var fns = transformer.all;

View File

@@ -1,5 +1,5 @@
var traverse = require("../traverse");
var util = require("../util");
var t = require("../types");
var b = require("../builders");
var go = function (getBody, node, file) {
@@ -19,7 +19,7 @@ var go = function (getBody, node, file) {
traverse(node, function (node) {
var _aliasFunction = node._aliasFunction;
if (!_aliasFunction) {
if (traverse.isFunction(node)) {
if (t.isFunction(node)) {
// stop traversal of this node as it'll be hit again by this transformer
return false;
} else {
@@ -30,7 +30,7 @@ var go = function (getBody, node, file) {
// traverse all child nodes of this function and find arguments and this
traverse(node, function (node, parent) {
if (_aliasFunction === "arrows") {
if (traverse.isFunction(node) && node._aliasFunction !== "arrows") {
if (t.isFunction(node) && node._aliasFunction !== "arrows") {
return false;
}
}
@@ -45,7 +45,7 @@ var go = function (getBody, node, file) {
return;
}
if (util.isReferenced(node, parent)) return getId();
if (t.isReferenced(node, parent)) return getId();
});
return false;
@@ -78,7 +78,7 @@ exports.Program = function (node, parent, file) {
exports.FunctionDeclaration =
exports.FunctionExpression = function (node, parent, file) {
go(function () {
util.ensureBlock(node);
t.ensureBlock(node);
return node.body.body;
}, node, file);
};

View File

@@ -1,6 +1,3 @@
var traverse = require("../traverse");
var _ = require("lodash");
module.exports = function (ast) {
module.exports = function () {
};

View File

@@ -1,7 +1,7 @@
var util = require("../util");
var t = require("../types");
exports.ArrowFunctionExpression = function (node) {
util.ensureBlock(node);
t.ensureBlock(node);
node._aliasFunction = "arrows";
node.expression = false;

View File

@@ -1,9 +1,10 @@
var util = require("../util");
var t = require("../types");
var _ = require("lodash");
exports.Function = function (node) {
if (!node.defaults.length) return;
util.ensureBlock(node);
t.ensureBlock(node);
_.each(node.defaults, function (def, i) {
if (!def) return;

View File

@@ -1,7 +1,6 @@
var traverse = require("../traverse");
var util = require("../util");
var b = require("../builders");
var _ = require("lodash");
var b = require("../builders");
var t = require("../types");
var _ = require("lodash");
var buildVariableAssign = function (kind, id, init) {
if (kind === false) {
@@ -30,7 +29,7 @@ var pushObjectPattern = function (kind, nodes, pattern, parentId) {
var pattern2 = prop.value;
var patternId2 = b.memberExpression(parentId, prop.key, false);
if (traverse.isPattern(pattern2)) {
if (t.isPattern(pattern2)) {
push(kind, nodes, pattern2, patternId2);
} else {
nodes.push(buildVariableAssign(kind, pattern2, patternId2));
@@ -67,7 +66,7 @@ exports.ForOfStatement = function (node, parent, file) {
if (declar.type !== "VariableDeclaration") return;
var pattern = declar.declarations[0].id;
if (!traverse.isPattern(pattern)) return;
if (!t.isPattern(pattern)) return;
var key = b.identifier(file.generateUid("ref"));
node.left = b.variableDeclaration(declar.kind, [
@@ -78,7 +77,7 @@ exports.ForOfStatement = function (node, parent, file) {
push(declar.kind, nodes, pattern, key);
util.ensureBlock(node);
t.ensureBlock(node);
var block = node.body;
block.body = nodes.concat(block.body);
@@ -90,7 +89,7 @@ exports.Function = function (node, parent, file) {
var hasDestructuring = false;
node.params = node.params.map(function (pattern) {
if (!traverse.isPattern(pattern)) return pattern;
if (!t.isPattern(pattern)) return pattern;
hasDestructuring = true;
var parentId = b.identifier(file.generateUid("ref"));
@@ -100,7 +99,7 @@ exports.Function = function (node, parent, file) {
if (!hasDestructuring) return;
util.ensureBlock(node);
t.ensureBlock(node);
var block = node.body;
block.body = nodes.concat(block.body);
@@ -110,7 +109,7 @@ exports.ExpressionStatement = function (node, parent, file) {
var expr = node.expression;
if (expr.type !== "AssignmentExpression") return;
if (!traverse.isPattern(expr.left)) return;
if (!t.isPattern(expr.left)) return;
var nodes = [];
@@ -131,7 +130,7 @@ exports.VariableDeclaration = function (node, parent, file) {
var hasPattern = false;
_.each(node.declarations, function (declar) {
if (traverse.isPattern(declar.id)) {
if (t.isPattern(declar.id)) {
hasPattern = true;
return false;
}
@@ -141,7 +140,7 @@ exports.VariableDeclaration = function (node, parent, file) {
_.each(node.declarations, function (declar) {
var patternId = declar.init;
var pattern = declar.id;
if (traverse.isPattern(pattern) && patternId) {
if (t.isPattern(pattern) && patternId) {
pushPattern(node.kind, nodes, pattern, patternId, file);
} else {
nodes.push(buildVariableAssign(node.kind, declar.id, declar.init));

View File

@@ -1,4 +1,5 @@
var util = require("../util");
var t = require("../types");
var b = require("../builders");
exports.ForOfStatement = function (node, parent, file) {
@@ -24,7 +25,7 @@ exports.ForOfStatement = function (node, parent, file) {
OBJECT: node.right
});
util.ensureBlock(node);
t.ensureBlock(node);
var block = node2.body;
block.body.push(declar);

View File

@@ -1,5 +1,6 @@
var traverse = require("../traverse");
var util = require("../util");
var t = require("../types");
var b = require("../builders");
var _ = require("lodash");
@@ -23,13 +24,13 @@ exports.VariableDeclaration = function (node, parent, file) {
var id = ids[node.name];
if (!id) return;
if (util.isReferenced(node, parent)) return id;
if (t.isReferenced(node, parent)) return id;
};
var isProgram = parent.type === "Program";
var replace = function (node, parent) {
if (!isProgram && _.contains(traverse.FUNCTION_TYPES, node.type)) {
if (!isProgram && _.contains(t.FUNCTION_TYPES, node.type)) {
var letReferences = [];
traverse(node, function (node, parent) {

View File

@@ -1,4 +1,5 @@
var util = require("../util");
var t = require("../types");
var b = require("../builders");
exports.Function = function (node, parent, file) {
@@ -10,7 +11,7 @@ exports.Function = function (node, parent, file) {
var templateName = "arguments-slice-assign";
if (node.params.length) templateName += "-arg";
util.ensureBlock(node);
t.ensureBlock(node);
node.body.body.unshift(util.template(templateName, {
SLICE_KEY: file.addDeclaration("slice"),
VARIABLE_NAME: rest,

View File

@@ -1,5 +1,4 @@
var rewritePattern = require("regexpu/rewrite-pattern");
var b = require("../builders");
var _ = require("lodash");
exports.Literal = function (node) {

View File

@@ -72,20 +72,17 @@ var traverse = module.exports = function (parent, callbacks, blacklistTypes) {
});
};
traverse.FUNCTION_TYPES = ["ArrowFunctionExpression", "FunctionDeclaration", "FunctionExpression"];
traverse.removeProperties = function (tree) {
var clear = function (node) {
delete node.tokens;
delete node.range;
delete node.loc;
};
traverse.aliases = {
ArrowFunctionExpression: ["Function"],
FunctionDeclaration: ["Function"],
FunctionExpression: ["Function"]
};
clear(tree);
traverse(tree, clear);
traverse.isFunction = function (node) {
return _.contains(traverse.FUNCTION_TYPES, node.type);
};
traverse.isPattern = function (node) {
return node.type === "ArrayPattern" || node.type === "ObjectPattern";
return tree;
};
traverse.hasType = function (tree, type, blacklistTypes) {

61
lib/6to5/types.js Normal file
View File

@@ -0,0 +1,61 @@
var b = require("./builders");
var n = require("acorn-ast-types").namedTypes;
var _ = require("lodash");
exports.FUNCTION_TYPES = ["ArrowFunctionExpression", "FunctionDeclaration", "FunctionExpression"];
exports.aliases = {
ArrowFunctionExpression: ["Function"],
FunctionDeclaration: ["Function"],
FunctionExpression: ["Function"]
};
exports.isFunction = function (node) {
return _.contains(exports.FUNCTION_TYPES, node.type);
};
exports.isPattern = function (node) {
return node.type === "ArrayPattern" || node.type === "ObjectPattern";
};
exports.isReferenced = function (node, parent) {
// we're a property key so we aren't referenced
if (parent.type === "Property" && parent.key === node) return false;
var isMemberExpression = parent.type === "MemberExpression";
// we're in a member expression and we're the computed property so we're referenced
var isComputedProperty = isMemberExpression && parent.property === node && parent.computed;
// we're in a member expression and we're the object so we're referenced
var isObject = isMemberExpression && parent.object === node;
// we are referenced
if (!isMemberExpression || isComputedProperty || isObject) return true;
return false;
};
exports.ensureBlock = function (node) {
var block = node.body;
if (block.type === "BlockStatement") return;
if (!_.isArray(block)) {
if (!n.Statement.check(block)) block = b.returnStatement(block);
block = [block];
}
node.body = b.blockStatement(block);
};
exports.getSpecifierName = function (specifier) {
return specifier.name || specifier.id;
};
exports.ensureExpressionType = function (node) {
node.type = {
FunctionDeclaration: "FunctionExpression",
ClassDeclaration: "ClassExpression"
}[node.type] || node.type;
return node;
};

View File

@@ -1,28 +1,13 @@
var traverse = require("./traverse");
var astTypes = require("acorn-ast-types");
var acorn = require("acorn-jsx");
var path = require("path");
var util = require("util");
var fs = require("fs");
var b = require("./builders");
var _ = require("lodash");
var n = astTypes.namedTypes;
var b = astTypes.builders;
exports.inherits = util.inherits;
exports.ensureBlock = function (node) {
var block = node.body;
if (block.type === "BlockStatement") return;
if (!_.isArray(block)) {
if (!n.Statement.check(block)) block = b.returnStatement(block);
block = [block];
}
node.body = b.blockStatement(block);
};
exports.resolve = function (loc) {
try {
return require.resolve(loc);
@@ -35,18 +20,6 @@ exports.list = function (val) {
return val ? val.split(",") : [];
};
exports.getSpecifierName = function (specifier) {
return specifier.name || specifier.id;
};
exports.ensureExpressionType = function (node) {
node.type = {
FunctionDeclaration: "FunctionExpression",
ClassDeclaration: "ClassExpression"
}[node.type] || node.type;
return node;
};
exports.getUid = function (parent, file) {
var node;
@@ -72,19 +45,6 @@ exports.isAbsolute = function (loc) {
return false;
};
exports.removeProperties = function (tree) {
var clear = function (node) {
delete node.tokens;
delete node.range;
delete node.loc;
};
clear(tree);
traverse(tree, clear);
return tree;
};
exports.getIds = function (node) {
var search = [node];
var ids = [];
@@ -198,24 +158,6 @@ exports.template = function (name, nodes, keepExpression) {
}
};
exports.isReferenced = function (node, parent) {
// we're a property key
if (parent.type === "Property" && parent.key === node) return false;
var isMemberExpression = parent.type === "MemberExpression";
// we're in a member expression and we're the computed property so we're referenced
var isComputedProperty = isMemberExpression && parent.property === node && parent.computed;
// we're in a member expression and we're the object so we're referenced
var isObject = isMemberExpression && parent.object === node;
// we are referenced
if (!isMemberExpression || isComputedProperty || isObject) return true;
return false;
};
exports.codeFrame = function (lines, lineNumber, colNumber) {
colNumber = Math.max(colNumber, 0);
@@ -280,8 +222,8 @@ exports.parse = function (opts, code, callback) {
program: ast
};
ast.tokens = tokens;
ast.comments = comments;
ast.tokens = tokens;
if (callback) {
return callback(ast);
@@ -308,7 +250,7 @@ exports.parse = function (opts, code, callback) {
exports.parseNoProperties = function (loc, code) {
var ast = exports.parse({ filename: loc }, code).program;
return exports.removeProperties(ast);
return traverse.removeProperties(ast);
};
try {