diff --git a/changelog_unreleased/flow/pr-9432.md b/changelog_unreleased/flow/pr-9432.md new file mode 100644 index 000000000..63ac02f42 --- /dev/null +++ b/changelog_unreleased/flow/pr-9432.md @@ -0,0 +1,22 @@ +#### Flow Enums with unknown members (#9432 by @gkz) + +Previously, was not supported. Now, the following is formatted: + + +```jsx +// Input +enum E { + A, + B, + ... +} + +// Prettier stable: parse error + +// Prettier master +enum E { + A, + B, + ... +} +``` diff --git a/src/language-js/printer-estree.js b/src/language-js/printer-estree.js index 3ed87b460..2d0ba20ff 100644 --- a/src/language-js/printer-estree.js +++ b/src/language-js/printer-estree.js @@ -2472,7 +2472,7 @@ function printPathNoParens(path, options, print, args) { } parts.push("of ", type, " "); } - if (n.members.length === 0) { + if (n.members.length === 0 && !n.hasUnknownMembers) { parts.push( group( concat([ @@ -2484,15 +2484,22 @@ function printPathNoParens(path, options, print, args) { ) ); } else { + const members = n.members.length + ? [ + hardline, + printArrayItems(path, options, "members", print), + n.hasUnknownMembers || shouldPrintComma(options) ? "," : "", + ] + : []; + parts.push( group( concat([ "{", indent( concat([ - hardline, - printArrayItems(path, options, "members", print), - shouldPrintComma(options) ? "," : "", + ...members, + ...(n.hasUnknownMembers ? [hardline, "..."] : []), ]) ), comments.printDanglingComments( diff --git a/tests/flow/enums-unknown-members/__snapshots__/jsfmt.spec.js.snap b/tests/flow/enums-unknown-members/__snapshots__/jsfmt.spec.js.snap new file mode 100644 index 000000000..f9fdb24ae --- /dev/null +++ b/tests/flow/enums-unknown-members/__snapshots__/jsfmt.spec.js.snap @@ -0,0 +1,51 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`enum-unknown-members.js - {"trailingComma":"all"} format 1`] = ` +====================================options===================================== +parsers: ["flow"] +printWidth: 80 +trailingComma: "all" + | printWidth +=====================================input====================================== +// @flow + +enum E { + A, + B, + ... +} + +=====================================output===================================== +// @flow + +enum E { + A, + B, + ... +} + +================================================================================ +`; + +exports[`enum-unknown-members-empty.js - {"trailingComma":"all"} format 1`] = ` +====================================options===================================== +parsers: ["flow"] +printWidth: 80 +trailingComma: "all" + | printWidth +=====================================input====================================== +// @flow + +enum E { + ... +} + +=====================================output===================================== +// @flow + +enum E { + ... +} + +================================================================================ +`; diff --git a/tests/flow/enums-unknown-members/enum-unknown-members-empty.js b/tests/flow/enums-unknown-members/enum-unknown-members-empty.js new file mode 100644 index 000000000..6b3c15d0b --- /dev/null +++ b/tests/flow/enums-unknown-members/enum-unknown-members-empty.js @@ -0,0 +1,5 @@ +// @flow + +enum E { + ... +} diff --git a/tests/flow/enums-unknown-members/enum-unknown-members.js b/tests/flow/enums-unknown-members/enum-unknown-members.js new file mode 100644 index 000000000..d55b79788 --- /dev/null +++ b/tests/flow/enums-unknown-members/enum-unknown-members.js @@ -0,0 +1,7 @@ +// @flow + +enum E { + A, + B, + ... +} diff --git a/tests/flow/enums-unknown-members/jsfmt.spec.js b/tests/flow/enums-unknown-members/jsfmt.spec.js new file mode 100644 index 000000000..d61f17d01 --- /dev/null +++ b/tests/flow/enums-unknown-members/jsfmt.spec.js @@ -0,0 +1 @@ +run_spec(__dirname, ["flow"], { trailingComma: "all" });