diff --git a/changelog_unreleased/typescript/12930.md b/changelog_unreleased/typescript/12930.md new file mode 100644 index 000000000..9c6fde5af --- /dev/null +++ b/changelog_unreleased/typescript/12930.md @@ -0,0 +1,19 @@ +#### fix formatting for typescript Enum with computed members (#12930 by @HosokawaR) + + +```tsx +// Input +enum A { + [i++], +} + +// Prettier stable +enum A { + i++, +} + +// Prettier main +enum A { + [i++], +} +``` diff --git a/src/language-js/print/typescript.js b/src/language-js/print/typescript.js index 32942f2d7..b755c7458 100644 --- a/src/language-js/print/typescript.js +++ b/src/language-js/print/typescript.js @@ -414,7 +414,12 @@ function printTypescript(path, options, print) { return parts; case "TSEnumMember": - parts.push(print("id")); + if (node.computed) { + parts.push("[", print("id"), "]"); + } else { + parts.push(print("id")); + } + if (node.initializer) { parts.push(" = ", print("initializer")); } diff --git a/tests/format/typescript/enum/__snapshots__/jsfmt.spec.js.snap b/tests/format/typescript/enum/__snapshots__/jsfmt.spec.js.snap index 82de64f80..0a37faedb 100644 --- a/tests/format/typescript/enum/__snapshots__/jsfmt.spec.js.snap +++ b/tests/format/typescript/enum/__snapshots__/jsfmt.spec.js.snap @@ -1,5 +1,53 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`computed-members.ts [babel-ts] format 1`] = ` +"Unexpected token (2:3) + 1 | enum A { +> 2 | [i++], + | ^ + 3 | } + 4 | + 5 | const bar = "bar"" +`; + +exports[`computed-members.ts format 1`] = ` +====================================options===================================== +parsers: ["typescript"] +printWidth: 80 + | printWidth +=====================================input====================================== +enum A { + [i++], +} + +const bar = "bar" +enum B { + [bar] = 2, +} + +const foo = () => "foo"; +enum C { + [foo()] = 2, +} + +=====================================output===================================== +enum A { + [i++], +} + +const bar = "bar"; +enum B { + [bar] = 2, +} + +const foo = () => "foo"; +enum C { + [foo()] = 2, +} + +================================================================================ +`; + exports[`enum.ts format 1`] = ` ====================================options===================================== parsers: ["typescript"] diff --git a/tests/format/typescript/enum/computed-members.ts b/tests/format/typescript/enum/computed-members.ts new file mode 100644 index 000000000..9f1fed42d --- /dev/null +++ b/tests/format/typescript/enum/computed-members.ts @@ -0,0 +1,13 @@ +enum A { + [i++], +} + +const bar = "bar" +enum B { + [bar] = 2, +} + +const foo = () => "foo"; +enum C { + [foo()] = 2, +} diff --git a/tests/format/typescript/enum/jsfmt.spec.js b/tests/format/typescript/enum/jsfmt.spec.js index 2ea3bb6eb..808fc6828 100644 --- a/tests/format/typescript/enum/jsfmt.spec.js +++ b/tests/format/typescript/enum/jsfmt.spec.js @@ -1 +1,5 @@ -run_spec(__dirname, ["typescript"]); +run_spec(__dirname, ["typescript"], { + errors: { + "babel-ts": ["computed-members.ts"], + }, +});