diff --git a/packages/babel-generator/src/node/index.js b/packages/babel-generator/src/node/index.js index 169ba7fe6f..425dffbffb 100644 --- a/packages/babel-generator/src/node/index.js +++ b/packages/babel-generator/src/node/index.js @@ -1,7 +1,6 @@ import whitespace from "./whitespace"; import * as parens from "./parentheses"; import each from "lodash/collection/each"; -import some from "lodash/collection/some"; import * as t from "babel-types"; function find(obj, node, parent) { @@ -22,6 +21,19 @@ function find(obj, node, parent) { return result; } +function isOrHasCallExpression(node) { + if (t.isCallExpression(node)) { + return true; + } + + if (t.isMemberExpression(node)) { + return isOrHasCallExpression(node.object) || + (!node.computed && isOrHasCallExpression(node.property)); + } else { + return false; + } +} + export default class Node { constructor(node: Object, parent: Object) { this.parent = parent; @@ -69,12 +81,7 @@ export default class Node { if (!parent) return false; if (t.isNewExpression(parent) && parent.callee === node) { - if (t.isCallExpression(node)) return true; - - let hasCall = some(node, function (val) { - return t.isCallExpression(val); - }); - if (hasCall) return true; + if (isOrHasCallExpression(node)) return true; } return find(parens, node, parent); diff --git a/packages/babel-generator/test/fixtures/edgecase/new-precedence/actual.js b/packages/babel-generator/test/fixtures/edgecase/new-precedence/actual.js index 7100c69c3d..1845a36b60 100644 --- a/packages/babel-generator/test/fixtures/edgecase/new-precedence/actual.js +++ b/packages/babel-generator/test/fixtures/edgecase/new-precedence/actual.js @@ -7,3 +7,6 @@ new (new a())(a); (new a()).test; (new a().test); (new (a().test)()); +new (a().b.c)(); +new a().b.c(); +new (a.b().c.d)(); diff --git a/packages/babel-generator/test/fixtures/edgecase/new-precedence/expected.js b/packages/babel-generator/test/fixtures/edgecase/new-precedence/expected.js index 646afe94da..b0792e89c2 100644 --- a/packages/babel-generator/test/fixtures/edgecase/new-precedence/expected.js +++ b/packages/babel-generator/test/fixtures/edgecase/new-precedence/expected.js @@ -7,3 +7,6 @@ new new a()(a); new a().test; new a().test; new (a().test)(); +new (a().b.c)(); +new a().b.c(); +new (a.b().c.d)();