Merge pull request #3173 from voideanvalue/T6829
[babel-generator] fix unhandled new-precedence edge case
This commit is contained in:
commit
b802034a25
@ -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);
|
||||
|
||||
@ -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)();
|
||||
|
||||
@ -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)();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user