Merge pull request #3173 from voideanvalue/T6829

[babel-generator] fix unhandled new-precedence edge case
This commit is contained in:
Amjad Masad 2015-12-16 13:32:18 -08:00
commit b802034a25
3 changed files with 20 additions and 7 deletions

View File

@ -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);

View File

@ -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)();

View File

@ -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)();