Code coverage report for 6to5/transformers/spread.js

Statements: 100% (35 / 35)      Branches: 100% (14 / 14)      Functions: 100% (2 / 2)      Lines: 100% (34 / 34)      Ignored: none     

All files » 6to5/transformers/ » spread.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 621 1 1   1     18 18   15 15 14 14     1       1   1     1 144   144 6   6 6   6   6 3 1     3 3 3 3   3     6   6 2 2   4     6      
var util = require("../util");
var b    = require("ast-types").builders;
var _    = require("lodash");
 
exports.ArrayExpression = function (node) {
  //if (node.ignoreSpread) return;
 
  var elements = node.elements;
  if (!elements.length) return;
 
  var spread = elements.pop();
  if (spread.type !== "SpreadElement") {
    elements.push(spread);
    return;
  }
 
  var concat = util.template("array-concat", {
    ARGUMENT: spread.argument
  });
 
  concat.callee.object.elements = elements;
 
  return concat;
};
 
exports.CallExpression = function (node) {
  var args = node.arguments;
 
  if (args.length && _.last(args).type === "SpreadElement") {
    var spread = args.pop();
 
    var spreadLiteral  = spread.argument;
    var contextLiteral = b.literal(null);
 
    node.arguments = [];
 
    if (args.length) {
      if (spreadLiteral.name === "arguments") {
        spreadLiteral = util.template("arguments-slice");
      }
 
      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.name += ".apply";
    } else {
      node.callee.name += ".apply";
    }
 
    node.arguments.unshift(contextLiteral);
  }
};