diff --git a/src/fast-path.js b/src/fast-path.js index aa2fdd4c..129c11df 100644 --- a/src/fast-path.js +++ b/src/fast-path.js @@ -194,11 +194,24 @@ FastPath.prototype.needsParens = function() { } switch (node.type) { - case "CallExpression": - if (parent.type === "NewExpression" && parent.callee === node) { + case "CallExpression": { + let firstParentNotMemberExpression = parent; + let i = 0; + while ( + firstParentNotMemberExpression && + firstParentNotMemberExpression.type === "MemberExpression" + ) { + firstParentNotMemberExpression = this.getParentNode(++i); + } + + if ( + firstParentNotMemberExpression.type === "NewExpression" && + firstParentNotMemberExpression.callee === this.getParentNode(i - 1) + ) { return true; } return false; + } case "SpreadElement": case "SpreadProperty": diff --git a/tests/new_expression/__snapshots__/jsfmt.spec.js.snap b/tests/new_expression/__snapshots__/jsfmt.spec.js.snap index 79f675fc..5a772131 100644 --- a/tests/new_expression/__snapshots__/jsfmt.spec.js.snap +++ b/tests/new_expression/__snapshots__/jsfmt.spec.js.snap @@ -16,8 +16,10 @@ new (factory())(factory()); exports[`new_expression.js 1`] = ` new (memoize.Cache || MapCache) new (typeof this == "function" ? this : Dict()) +new (createObj()).prop(a()); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ new (memoize.Cache || MapCache)(); new (typeof this == "function" ? this : Dict())(); +new (createObj()).prop(a()); `; diff --git a/tests/new_expression/new_expression.js b/tests/new_expression/new_expression.js index 23166585..144275d0 100644 --- a/tests/new_expression/new_expression.js +++ b/tests/new_expression/new_expression.js @@ -1,2 +1,3 @@ new (memoize.Cache || MapCache) new (typeof this == "function" ? this : Dict()) +new (createObj()).prop(a());