Merge pull request #3421 from loganfsmyth/generate-default-exports

Wrap parens around default exports starting with function/class - fixes T7136
This commit is contained in:
Logan Smyth 2016-04-06 22:02:52 -07:00
commit 6ec9bbead4
3 changed files with 34 additions and 30 deletions

View File

@ -43,12 +43,7 @@ export function UpdateExpression(node: Object, parent: Object): boolean {
} }
export function ObjectExpression(node: Object, parent: Object, printStack: Array<Object>): boolean { export function ObjectExpression(node: Object, parent: Object, printStack: Array<Object>): boolean {
if (t.isExpressionStatement(parent)) { return isFirstInStatement(printStack, {considerArrow: true});
// ({ foo: "bar" });
return true;
}
return isFirstInStatement(printStack, true);
} }
export function Binary(node: Object, parent: Object): boolean { export function Binary(node: Object, parent: Object): boolean {
@ -152,18 +147,8 @@ export function YieldExpression(node: Object, parent: Object): boolean {
export { YieldExpression as AwaitExpression }; export { YieldExpression as AwaitExpression };
export function ClassExpression(node: Object, parent: Object): boolean { export function ClassExpression(node: Object, parent: Object, printStack: Array<Object>): boolean {
// (class {}); return isFirstInStatement(printStack, {considerDefaultExports: true});
if (t.isExpressionStatement(parent)) {
return true;
}
// export default (class () {});
if (t.isExportDeclaration(parent)) {
return true;
}
return false;
} }
export function UnaryLike(node: Object, parent: Object): boolean { export function UnaryLike(node: Object, parent: Object): boolean {
@ -179,17 +164,7 @@ export function UnaryLike(node: Object, parent: Object): boolean {
} }
export function FunctionExpression(node: Object, parent: Object, printStack: Array<Object>): boolean { export function FunctionExpression(node: Object, parent: Object, printStack: Array<Object>): boolean {
// (function () {}); return isFirstInStatement(printStack, {considerDefaultExports: true});
if (t.isExpressionStatement(parent)) {
return true;
}
// export default (function () {});
if (t.isExportDeclaration(parent)) {
return true;
}
return isFirstInStatement(printStack);
} }
export function ArrowFunctionExpression(node: Object, parent: Object): boolean { export function ArrowFunctionExpression(node: Object, parent: Object): boolean {
@ -235,7 +210,10 @@ export function AssignmentExpression(node: Object): boolean {
// Walk up the print stack to deterimine if our node can come first // Walk up the print stack to deterimine if our node can come first
// in statement. // in statement.
function isFirstInStatement(printStack: Array<Object>, considerArrow: bool = false): boolean { function isFirstInStatement(printStack: Array<Object>, {
considerArrow = false,
considerDefaultExports = false
} = {}): boolean {
let i = printStack.length - 1; let i = printStack.length - 1;
let node = printStack[i]; let node = printStack[i];
i--; i--;
@ -245,6 +223,10 @@ function isFirstInStatement(printStack: Array<Object>, considerArrow: bool = fal
return true; return true;
} }
if (considerDefaultExports && t.isExportDefaultDeclaration(parent, { declaration: node })) {
return true;
}
if (considerArrow && t.isArrowFunctionExpression(parent, { body: node })) { if (considerArrow && t.isArrowFunctionExpression(parent, { body: node })) {
return true; return true;
} }

View File

@ -5,5 +5,16 @@ export { a as b, c as d }
export { } export { }
export default i = 20 export default i = 20
export function test() { } export function test() { }
export class test2 { }
export var i = 20 export var i = 20
export let i = 42 export let i = 42
export default (function(){})();
export default (class {})();
export default {};
export default function test3(){}
export default class test4 {}
export default function(){}
export default class {}

View File

@ -5,5 +5,16 @@ export { a as b, c as d };
export {}; export {};
export default i = 20; export default i = 20;
export function test() {} export function test() {}
export class test2 {}
export var i = 20; export var i = 20;
export let i = 42; export let i = 42;
export default (function () {})();
export default (class {})();
export default {};
export default function test3() {}
export default class test4 {}
export default function () {}
export default class {}