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 whitespace from "./whitespace";
|
||||||
import * as parens from "./parentheses";
|
import * as parens from "./parentheses";
|
||||||
import each from "lodash/collection/each";
|
import each from "lodash/collection/each";
|
||||||
import some from "lodash/collection/some";
|
|
||||||
import * as t from "babel-types";
|
import * as t from "babel-types";
|
||||||
|
|
||||||
function find(obj, node, parent) {
|
function find(obj, node, parent) {
|
||||||
@ -22,6 +21,19 @@ function find(obj, node, parent) {
|
|||||||
return result;
|
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 {
|
export default class Node {
|
||||||
constructor(node: Object, parent: Object) {
|
constructor(node: Object, parent: Object) {
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
@ -69,12 +81,7 @@ export default class Node {
|
|||||||
if (!parent) return false;
|
if (!parent) return false;
|
||||||
|
|
||||||
if (t.isNewExpression(parent) && parent.callee === node) {
|
if (t.isNewExpression(parent) && parent.callee === node) {
|
||||||
if (t.isCallExpression(node)) return true;
|
if (isOrHasCallExpression(node)) return true;
|
||||||
|
|
||||||
let hasCall = some(node, function (val) {
|
|
||||||
return t.isCallExpression(val);
|
|
||||||
});
|
|
||||||
if (hasCall) return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return find(parens, node, parent);
|
return find(parens, node, parent);
|
||||||
|
|||||||
@ -7,3 +7,6 @@ new (new a())(a);
|
|||||||
(new a()).test;
|
(new a()).test;
|
||||||
(new a().test);
|
(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().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