From ce4c3749241e8d53121b51e1b9d04531ddf1f2af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Zl=C3=A1mal?= Date: Wed, 29 May 2019 14:17:12 -0500 Subject: [PATCH] Fix printer for explicitly inexact Flow types (#10041) Closes: https://github.com/babel/babel/issues/10040 --- .../babel-generator/src/generators/flow.js | 11 +++++++++- .../object-literal-types-compact/input.js | 4 ++++ .../object-literal-types-compact/options.json | 3 +++ .../object-literal-types-compact/output.js | 1 + .../flow/object-literal-types/input.js | 4 ++++ .../flow/object-literal-types/output.js | 21 ++++++++++++++++++- 6 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 packages/babel-generator/test/fixtures/flow/object-literal-types-compact/input.js create mode 100644 packages/babel-generator/test/fixtures/flow/object-literal-types-compact/options.json create mode 100644 packages/babel-generator/test/fixtures/flow/object-literal-types-compact/output.js diff --git a/packages/babel-generator/src/generators/flow.js b/packages/babel-generator/src/generators/flow.js index d46118debd48..225428b00801 100644 --- a/packages/babel-generator/src/generators/flow.js +++ b/packages/babel-generator/src/generators/flow.js @@ -409,7 +409,7 @@ export function ObjectTypeAnnotation(node: Object) { indent: true, statement: true, iterator: () => { - if (props.length !== 1) { + if (props.length !== 1 || node.inexact) { this.token(","); this.space(); } @@ -419,6 +419,15 @@ export function ObjectTypeAnnotation(node: Object) { this.space(); } + if (node.inexact) { + this.indent(); + this.token("..."); + if (props.length) { + this.newline(); + } + this.dedent(); + } + if (node.exact) { this.token("|}"); } else { diff --git a/packages/babel-generator/test/fixtures/flow/object-literal-types-compact/input.js b/packages/babel-generator/test/fixtures/flow/object-literal-types-compact/input.js new file mode 100644 index 000000000000..08324814210d --- /dev/null +++ b/packages/babel-generator/test/fixtures/flow/object-literal-types-compact/input.js @@ -0,0 +1,4 @@ +type T1 = { ... }; +type T2 = { a: { b: { c: {...}, ... }, ... } } +type T3 = { foo: number, ... }; +type T4 = { foo: number, bar: string, ... }; diff --git a/packages/babel-generator/test/fixtures/flow/object-literal-types-compact/options.json b/packages/babel-generator/test/fixtures/flow/object-literal-types-compact/options.json new file mode 100644 index 000000000000..eb4e948bfaa5 --- /dev/null +++ b/packages/babel-generator/test/fixtures/flow/object-literal-types-compact/options.json @@ -0,0 +1,3 @@ +{ + "compact": true +} diff --git a/packages/babel-generator/test/fixtures/flow/object-literal-types-compact/output.js b/packages/babel-generator/test/fixtures/flow/object-literal-types-compact/output.js new file mode 100644 index 000000000000..a0027248e9a5 --- /dev/null +++ b/packages/babel-generator/test/fixtures/flow/object-literal-types-compact/output.js @@ -0,0 +1 @@ +type T1={...};type T2={a:{b:{c:{...},...},...}};type T3={foo:number,...};type T4={foo:number,bar:string,...}; diff --git a/packages/babel-generator/test/fixtures/flow/object-literal-types/input.js b/packages/babel-generator/test/fixtures/flow/object-literal-types/input.js index f3139a94e350..9733370c5ff8 100644 --- a/packages/babel-generator/test/fixtures/flow/object-literal-types/input.js +++ b/packages/babel-generator/test/fixtures/flow/object-literal-types/input.js @@ -9,3 +9,7 @@ type T6 = { foo(): number } type T7 = { foo: () => number } type T8 = { [string]: U }; type T9 = { [param: string]: U }; +type T10 = { ... }; +type T11 = { a: { b: { c: {...}, ... }, ... } } +type T12 = { foo: number, ... }; +type T13 = { foo: number, bar: string, ... }; diff --git a/packages/babel-generator/test/fixtures/flow/object-literal-types/output.js b/packages/babel-generator/test/fixtures/flow/object-literal-types/output.js index 5c02e095e3fa..2a3769b1abd5 100644 --- a/packages/babel-generator/test/fixtures/flow/object-literal-types/output.js +++ b/packages/babel-generator/test/fixtures/flow/object-literal-types/output.js @@ -27,4 +27,23 @@ type T8 = { }; type T9 = { [param: string]: U -}; \ No newline at end of file +}; +type T10 = {...}; +type T11 = { + a: { + b: { + c: {...}, + ... + }, + ... + } +}; +type T12 = { + foo: number, + ... +}; +type T13 = { + foo: number, + bar: string, + ... +};