From 6230855b71b396d1f308f131ec73e790bdad6d90 Mon Sep 17 00:00:00 2001 From: Abhilash Singh Date: Sat, 30 Sep 2017 18:44:51 +0530 Subject: [PATCH] unshiftContainer seems to incorrectly handle function params #6150 (#6354) --- packages/babel-traverse/src/path/modification.js | 4 +++- packages/babel-traverse/test/modification.js | 13 +++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/babel-traverse/src/path/modification.js b/packages/babel-traverse/src/path/modification.js index 43dcee54cf..4a7ecfb0ab 100644 --- a/packages/babel-traverse/src/path/modification.js +++ b/packages/babel-traverse/src/path/modification.js @@ -20,7 +20,9 @@ export function insertBefore(nodes) { ) { return this.parentPath.insertBefore(nodes); } else if ( - (this.isNodeType("Expression") && this.listKey !== "params") || + (this.isNodeType("Expression") && + this.listKey !== "params" && + this.listKey !== "arguments") || (this.parentPath.isForStatement() && this.key === "init") ) { if (this.node) nodes.push(this.node); diff --git a/packages/babel-traverse/test/modification.js b/packages/babel-traverse/test/modification.js index 5542badb27..0e0936becc 100644 --- a/packages/babel-traverse/test/modification.js +++ b/packages/babel-traverse/test/modification.js @@ -53,6 +53,19 @@ describe("modification", function() { assert.equal(generateCode(rootPath), "function test(a) {\n b;\n}"); }); + + it("properly handles more than one arguments", function() { + const code = "foo(a, b);"; + const ast = parse(code); + traverse(ast, { + CallExpression: function(path) { + path.unshiftContainer("arguments", t.identifier("d")); + assert.equal(generateCode(path), "foo(d, a, b);"); + path.unshiftContainer("arguments", t.stringLiteral("s")); + assert.equal(generateCode(path), `foo("s", d, a, b);`); + }, + }); + }); }); describe("insertBefore", function() {