move some util and traverse methods into types
This commit is contained in:
@@ -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";
|
||||
|
||||
@@ -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") {
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
var traverse = require("../traverse");
|
||||
var _ = require("lodash");
|
||||
|
||||
module.exports = function (ast) {
|
||||
module.exports = function () {
|
||||
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
var rewritePattern = require("regexpu/rewrite-pattern");
|
||||
var b = require("../builders");
|
||||
var _ = require("lodash");
|
||||
|
||||
exports.Literal = function (node) {
|
||||
|
||||
@@ -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
61
lib/6to5/types.js
Normal 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;
|
||||
};
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user