diff --git a/lib/6to5/file.js b/lib/6to5/file.js index 253f5a6d6c..c41bc96066 100644 --- a/lib/6to5/file.js +++ b/lib/6to5/file.js @@ -84,7 +84,14 @@ File.prototype.runTransformer = function (name, transformer) { var build = function (exit) { 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; var fn = fns.enter || fns; diff --git a/lib/6to5/transformers/default-parameters.js b/lib/6to5/transformers/default-parameters.js index bd7c7a320d..591a16a4df 100644 --- a/lib/6to5/transformers/default-parameters.js +++ b/lib/6to5/transformers/default-parameters.js @@ -1,9 +1,7 @@ var util = require("../util"); var _ = require("lodash"); -exports.ArrowFunctionExpression = -exports.FunctionDeclaration = -exports.FunctionExpression = function (node) { +exports.Function = function (node) { if (!node.defaults.length) return; util.ensureBlock(node); diff --git a/lib/6to5/transformers/destructuring.js b/lib/6to5/transformers/destructuring.js index 0dd0f2db4a..33fd0b7765 100644 --- a/lib/6to5/transformers/destructuring.js +++ b/lib/6to5/transformers/destructuring.js @@ -85,9 +85,7 @@ exports.ForOfStatement = function (node, parent, file) { block.body = nodes.concat(block.body); }; -exports.ArrowFunctionExpression = -exports.FunctionDeclaration = -exports.FunctionExpression = function (node, parent, file) { +exports.Function = function (node, parent, file) { var block = node.body; var nodes = []; diff --git a/lib/6to5/transformers/rest-parameters.js b/lib/6to5/transformers/rest-parameters.js index 26a700f44e..0d060a8a2c 100644 --- a/lib/6to5/transformers/rest-parameters.js +++ b/lib/6to5/transformers/rest-parameters.js @@ -1,9 +1,7 @@ var util = require("../util"); var b = require("ast-types").builders; -exports.ArrowFunctionExpression = -exports.FunctionDeclaration = -exports.FunctionExpression = function (node) { +exports.Function = function (node) { if (!node.rest) return; var rest = node.rest; diff --git a/lib/6to5/traverse/index.js b/lib/6to5/traverse/index.js index 2f68495064..2d411d1a5a 100644 --- a/lib/6to5/traverse/index.js +++ b/lib/6to5/traverse/index.js @@ -69,6 +69,16 @@ var traverse = module.exports = function (parent, callbacks, blacklistTypes) { 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.hasType = function (tree, type, blacklistTypes) {