add traversal node aliases to be dry

This commit is contained in:
Sebastian McKenzie 2014-10-13 05:34:46 +11:00
parent 737c349775
commit a6ffde6e9b
5 changed files with 21 additions and 10 deletions

View File

@ -84,7 +84,14 @@ File.prototype.runTransformer = function (name, transformer) {
var build = function (exit) { var build = function (exit) {
return function (node, parent) { return function (node, parent) {
var fns = transformer[node.type] || transformer.all; var types = [node.type].concat(traverse.aliases[node.type] || []);
var fns = transformer.all;
_.each(types, function (type) {
fns = transformer[type] || fns;
});
if (!fns) return; if (!fns) return;
var fn = fns.enter || fns; var fn = fns.enter || fns;

View File

@ -1,9 +1,7 @@
var util = require("../util"); var util = require("../util");
var _ = require("lodash"); var _ = require("lodash");
exports.ArrowFunctionExpression = exports.Function = function (node) {
exports.FunctionDeclaration =
exports.FunctionExpression = function (node) {
if (!node.defaults.length) return; if (!node.defaults.length) return;
util.ensureBlock(node); util.ensureBlock(node);

View File

@ -85,9 +85,7 @@ exports.ForOfStatement = function (node, parent, file) {
block.body = nodes.concat(block.body); block.body = nodes.concat(block.body);
}; };
exports.ArrowFunctionExpression = exports.Function = function (node, parent, file) {
exports.FunctionDeclaration =
exports.FunctionExpression = function (node, parent, file) {
var block = node.body; var block = node.body;
var nodes = []; var nodes = [];

View File

@ -1,9 +1,7 @@
var util = require("../util"); var util = require("../util");
var b = require("ast-types").builders; var b = require("ast-types").builders;
exports.ArrowFunctionExpression = exports.Function = function (node) {
exports.FunctionDeclaration =
exports.FunctionExpression = function (node) {
if (!node.rest) return; if (!node.rest) return;
var rest = node.rest; var rest = node.rest;

View File

@ -69,6 +69,16 @@ var traverse = module.exports = function (parent, callbacks, blacklistTypes) {
traverse.FUNCTION_TYPES = ["ArrowFunctionExpression", "FunctionDeclaration", "FunctionExpression"]; traverse.FUNCTION_TYPES = ["ArrowFunctionExpression", "FunctionDeclaration", "FunctionExpression"];
traverse.aliases = {
ArrowFunctionExpression: ["Function"],
FunctionDeclaration: ["Function"],
FunctionExpression: ["Function"]
};
traverse.isFunction = function (node) {
return _.contains(traverse.FUNCTION_TYPES, node.type);
};
traverse.Delete = {}; traverse.Delete = {};
traverse.hasType = function (tree, type, blacklistTypes) { traverse.hasType = function (tree, type, blacklistTypes) {