diff --git a/packages/babel-generator/src/node/parentheses.js b/packages/babel-generator/src/node/parentheses.js index 8f7c137f52..c48988f0b2 100644 --- a/packages/babel-generator/src/node/parentheses.js +++ b/packages/babel-generator/src/node/parentheses.js @@ -35,7 +35,16 @@ export function NullableTypeAnnotation(node: Object, parent: Object): boolean { return t.isArrayTypeAnnotation(parent); } -export { NullableTypeAnnotation as FunctionTypeAnnotation }; +export function FunctionTypeAnnotation(node: Object, parent: Object): boolean { + return ( + // (() => A) | (() => B) + t.isUnionTypeAnnotation(parent) || + // (() => A) & (() => B) + t.isIntersectionTypeAnnotation(parent) || + // (() => A)[] + t.isArrayTypeAnnotation(parent) + ); +} export function UpdateExpression(node: Object, parent: Object): boolean { return ( diff --git a/packages/babel-generator/test/fixtures/flow/opaque-type-alias/output.js b/packages/babel-generator/test/fixtures/flow/opaque-type-alias/output.js index d5868b9298..b4f20f2d70 100644 --- a/packages/babel-generator/test/fixtures/flow/opaque-type-alias/output.js +++ b/packages/babel-generator/test/fixtures/flow/opaque-type-alias/output.js @@ -7,4 +7,4 @@ opaque type union = { } | { type: "B" }; -opaque type overloads = (x: string) => number & (x: number) => string; \ No newline at end of file +opaque type overloads = ((x: string) => number) & ((x: number) => string); \ No newline at end of file diff --git a/packages/babel-generator/test/fixtures/flow/parantheses/input.js b/packages/babel-generator/test/fixtures/flow/parantheses/input.js new file mode 100644 index 0000000000..f7e2c39738 --- /dev/null +++ b/packages/babel-generator/test/fixtures/flow/parantheses/input.js @@ -0,0 +1,3 @@ +type A = ((T) => $Foo) & ((T) => $Foo); +type B = ((T) => $Foo) | ((T) => $Foo); +type C = ((T) => $Foo)[]; \ No newline at end of file diff --git a/packages/babel-generator/test/fixtures/flow/parantheses/output.js b/packages/babel-generator/test/fixtures/flow/parantheses/output.js new file mode 100644 index 0000000000..f7e2c39738 --- /dev/null +++ b/packages/babel-generator/test/fixtures/flow/parantheses/output.js @@ -0,0 +1,3 @@ +type A = ((T) => $Foo) & ((T) => $Foo); +type B = ((T) => $Foo) | ((T) => $Foo); +type C = ((T) => $Foo)[]; \ No newline at end of file diff --git a/packages/babel-generator/test/fixtures/flow/type-alias/output.js b/packages/babel-generator/test/fixtures/flow/type-alias/output.js index d08a5ee094..a8263f6721 100644 --- a/packages/babel-generator/test/fixtures/flow/type-alias/output.js +++ b/packages/babel-generator/test/fixtures/flow/type-alias/output.js @@ -7,6 +7,6 @@ type union = { } | { type: "B" }; -type overloads = (x: string) => number & (x: number) => string; +type overloads = ((x: string) => number) & ((x: number) => string); type func = (string) => string; -type D = X.Y; +type D = X.Y; \ No newline at end of file diff --git a/packages/babel-generator/test/fixtures/flow/type-annotations/output.js b/packages/babel-generator/test/fixtures/flow/type-annotations/output.js index 4333545052..89259e8661 100644 --- a/packages/babel-generator/test/fixtures/flow/type-annotations/output.js +++ b/packages/babel-generator/test/fixtures/flow/type-annotations/output.js @@ -180,7 +180,7 @@ class Array { } -var x: () => number | () => string = fn; +var x: () => number | (() => string) = fn; var x: typeof Y = Y; var x: typeof Y | number = Y; var {