add hasSpread helper to spread transformer

This commit is contained in:
Sebastian McKenzie
2014-10-14 09:31:26 +11:00
parent e97086f5f7
commit 835cfd2a15

View File

@@ -13,15 +13,15 @@ var getSpreadLiteral = function (spread, file) {
return literal;
};
var hasSpread = function (nodes) {
return nodes.length && _.last(args).type === "SpreadElement";
};
exports.ArrayExpression = function (node, parent, file) {
var elements = node.elements;
if (!elements.length) return;
if (!hasSpread(elements)) return;
var spread = elements.pop();
if (spread.type !== "SpreadElement") {
elements.push(spread);
return;
}
var concat = util.template("array-concat", {
ARGUMENT: getSpreadLiteral(spread, file)
@@ -34,33 +34,32 @@ exports.ArrayExpression = function (node, parent, file) {
exports.CallExpression = function (node, parent, file) {
var args = node.arguments;
if (!hasSpread(args)) return;
if (args.length && _.last(args).type === "SpreadElement") {
var spread = args.pop();
var spread = args.pop();
var spreadLiteral = getSpreadLiteral(spread, file);
var contextLiteral = b.literal(null);
var spreadLiteral = getSpreadLiteral(spread, file);
var contextLiteral = b.literal(null);
node.arguments = [];
node.arguments = [];
if (args.length) {
var concat = util.template("array-concat");
concat.arguments = [spreadLiteral];
concat.callee.object.elements = args;
node.arguments.push(concat);
} else {
node.arguments.push(spreadLiteral);
}
var callee = node.callee;
if (callee.type === "MemberExpression") {
contextLiteral = callee.object;
callee.property = b.memberExpression(callee.property, b.identifier("apply"), false);
} else {
node.callee = b.memberExpression(node.callee, b.identifier("apply"), false);
}
node.arguments.unshift(contextLiteral);
if (args.length) {
var concat = util.template("array-concat");
concat.arguments = [spreadLiteral];
concat.callee.object.elements = args;
node.arguments.push(concat);
} else {
node.arguments.push(spreadLiteral);
}
var callee = node.callee;
if (callee.type === "MemberExpression") {
contextLiteral = callee.object;
callee.property = b.memberExpression(callee.property, b.identifier("apply"), false);
} else {
node.callee = b.memberExpression(node.callee, b.identifier("apply"), false);
}
node.arguments.unshift(contextLiteral);
};