From e28c8ac612e2a39147b92cfd97307469a007ab44 Mon Sep 17 00:00:00 2001 From: Brian Ng Date: Fri, 11 Oct 2019 20:22:42 -0500 Subject: [PATCH] Fix generator missing parens around an arrow returning function type (#10519) --- packages/babel-generator/src/node/parentheses.js | 12 ++++++++++-- .../test/fixtures/flow/arrow-functions/input.js | 1 + .../test/fixtures/flow/arrow-functions/output.js | 4 +++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/babel-generator/src/node/parentheses.js b/packages/babel-generator/src/node/parentheses.js index 8c38fa627239..0a1ab115c529 100644 --- a/packages/babel-generator/src/node/parentheses.js +++ b/packages/babel-generator/src/node/parentheses.js @@ -35,14 +35,22 @@ export function NullableTypeAnnotation(node: Object, parent: Object): boolean { return t.isArrayTypeAnnotation(parent); } -export function FunctionTypeAnnotation(node: Object, parent: Object): boolean { +export function FunctionTypeAnnotation( + node: Object, + parent: Object, + printStack: Array, +): boolean { return ( // (() => A) | (() => B) t.isUnionTypeAnnotation(parent) || // (() => A) & (() => B) t.isIntersectionTypeAnnotation(parent) || // (() => A)[] - t.isArrayTypeAnnotation(parent) + t.isArrayTypeAnnotation(parent) || + // (A: T): (T => T[]) => B => [A, B] + (t.isTypeAnnotation(parent) && + // Check grandparent + t.isArrowFunctionExpression(printStack[printStack.length - 3])) ); } diff --git a/packages/babel-generator/test/fixtures/flow/arrow-functions/input.js b/packages/babel-generator/test/fixtures/flow/arrow-functions/input.js index a3d11b136d6b..5719c2dbf087 100644 --- a/packages/babel-generator/test/fixtures/flow/arrow-functions/input.js +++ b/packages/babel-generator/test/fixtures/flow/arrow-functions/input.js @@ -5,3 +5,4 @@ const bar4 = x => {}; const bar5 = (x): string => {}; const bar6 = (x: number) => {}; const bar7 = (x) => {}; +const bar8 = (x: T): (T => T[]) => y => [x, y]; diff --git a/packages/babel-generator/test/fixtures/flow/arrow-functions/output.js b/packages/babel-generator/test/fixtures/flow/arrow-functions/output.js index 8b1f78020541..d132971e4bcf 100644 --- a/packages/babel-generator/test/fixtures/flow/arrow-functions/output.js +++ b/packages/babel-generator/test/fixtures/flow/arrow-functions/output.js @@ -10,4 +10,6 @@ const bar5 = (x): string => {}; const bar6 = (x: number) => {}; -const bar7 = (x) => {}; \ No newline at end of file +const bar7 = (x) => {}; + +const bar8 = (x: T): ((T) => T[]) => y => [x, y];