diff --git a/src/language-js/printer-estree.js b/src/language-js/printer-estree.js index 2de50a9a..bfa261b1 100644 --- a/src/language-js/printer-estree.js +++ b/src/language-js/printer-estree.js @@ -1288,13 +1288,18 @@ function printPathNoParens(path, options, print, args) { return result; }); + if (n.inexact) { + props.push(concat(separatorParts.concat(group("...")))); + } + const lastElem = getLast(n[propertiesField]); const canHaveTrailingSeparator = !( lastElem && (lastElem.type === "RestProperty" || lastElem.type === "RestElement" || - hasNodeIgnoreComment(lastElem)) + hasNodeIgnoreComment(lastElem) || + n.inexact) ); let content; diff --git a/tests/flow_object_inexact/__snapshots__/jsfmt.spec.js.snap b/tests/flow_object_inexact/__snapshots__/jsfmt.spec.js.snap new file mode 100644 index 00000000..25a4f2a2 --- /dev/null +++ b/tests/flow_object_inexact/__snapshots__/jsfmt.spec.js.snap @@ -0,0 +1,96 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`test.js - flow-verify 1`] = ` +//@flow +type T = { + a: number, + ..., +} + +type U = { a: number, b: number, c: number, d: number, e: number, f: number, g: number, ...}; + +type V = {x: {...}, y: {x: {...}, a: number, b: number, c: number, d: number, e: number, f: number, ...}, z: {...}, foo: number, bar: {foo: number, ...}, ...}; + +function test(x: {foo: number, bar: number, baz: number, qux: nunber, a: number, b: number, c: {a: number, ...}, ...}) { return x; } +function test(x: {foo: number, bar: number, baz: number, qux: nunber, a: number, b: number, c: {a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, ...}, ...}) { return x; } + +type W = {...}; +type X = { + ..., +}; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +//@flow +type T = { + a: number, + ... +}; + +type U = { + a: number, + b: number, + c: number, + d: number, + e: number, + f: number, + g: number, + ... +}; + +type V = { + x: { ... }, + y: { + x: { ... }, + a: number, + b: number, + c: number, + d: number, + e: number, + f: number, + ... + }, + z: { ... }, + foo: number, + bar: { foo: number, ... }, + ... +}; + +function test(x: { + foo: number, + bar: number, + baz: number, + qux: nunber, + a: number, + b: number, + c: { a: number, ... }, + ... +}) { + return x; +} +function test(x: { + foo: number, + bar: number, + baz: number, + qux: nunber, + a: number, + b: number, + c: { + a: number, + b: number, + c: number, + d: number, + e: number, + f: number, + g: number, + h: number, + i: number, + ... + }, + ... +}) { + return x; +} + +type W = { ... }; +type X = { ... }; + +`; diff --git a/tests/flow_object_inexact/jsfmt.spec.js b/tests/flow_object_inexact/jsfmt.spec.js new file mode 100644 index 00000000..d7a2e7f2 --- /dev/null +++ b/tests/flow_object_inexact/jsfmt.spec.js @@ -0,0 +1 @@ +run_spec(__dirname, ["flow"], { trailingComma: "es5" }); diff --git a/tests/flow_object_inexact/test.js b/tests/flow_object_inexact/test.js new file mode 100644 index 00000000..62fde15d --- /dev/null +++ b/tests/flow_object_inexact/test.js @@ -0,0 +1,17 @@ +//@flow +type T = { + a: number, + ..., +} + +type U = { a: number, b: number, c: number, d: number, e: number, f: number, g: number, ...}; + +type V = {x: {...}, y: {x: {...}, a: number, b: number, c: number, d: number, e: number, f: number, ...}, z: {...}, foo: number, bar: {foo: number, ...}, ...}; + +function test(x: {foo: number, bar: number, baz: number, qux: nunber, a: number, b: number, c: {a: number, ...}, ...}) { return x; } +function test(x: {foo: number, bar: number, baz: number, qux: nunber, a: number, b: number, c: {a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, ...}, ...}) { return x; } + +type W = {...}; +type X = { + ..., +};