diff --git a/changelog_unreleased/flow/14073.md b/changelog_unreleased/flow/14073.md new file mode 100644 index 000000000000..8e6f005711c9 --- /dev/null +++ b/changelog_unreleased/flow/14073.md @@ -0,0 +1,13 @@ +#### Fix formatting of empty type parameters (#14073 by @fisker) + + +```jsx +// Input +const foo: bar = () => baz; + +// Prettier stable +Error: Comment "comment" was not printed. Please report this error! + +// Prettier main +const foo: bar = () => baz; +``` diff --git a/src/language-js/print/type-parameters.js b/src/language-js/print/type-parameters.js index ce1256325507..154ffb161a5a 100644 --- a/src/language-js/print/type-parameters.js +++ b/src/language-js/print/type-parameters.js @@ -44,12 +44,12 @@ function printTypeParameters(path, options, print, paramsKey) { ); const shouldInline = - !isArrowFunctionVariable && - (isParameterInTestCall || - node[paramsKey].length === 0 || - (node[paramsKey].length === 1 && - (node[paramsKey][0].type === "NullableTypeAnnotation" || - shouldHugType(node[paramsKey][0])))); + node[paramsKey].length === 0 || + (!isArrowFunctionVariable && + (isParameterInTestCall || + (node[paramsKey].length === 1 && + (node[paramsKey][0].type === "NullableTypeAnnotation" || + shouldHugType(node[paramsKey][0]))))); if (shouldInline) { return [ diff --git a/tests/format/typescript/typeparams/empty-parameters-with-arrow-function/__snapshots__/jsfmt.spec.js.snap b/tests/format/typescript/typeparams/empty-parameters-with-arrow-function/__snapshots__/jsfmt.spec.js.snap new file mode 100644 index 000000000000..b3ba94b7dfa8 --- /dev/null +++ b/tests/format/typescript/typeparams/empty-parameters-with-arrow-function/__snapshots__/jsfmt.spec.js.snap @@ -0,0 +1,35 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`issue-13817.ts - {"arrowParens":"avoid","trailingComma":"all"} format 1`] = ` +====================================options===================================== +arrowParens: "avoid" +parsers: ["typescript", "flow", "babel-flow"] +printWidth: 80 +trailingComma: "all" + | printWidth +=====================================input====================================== +const xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: xxxxxxxxxxxxxxxxxxxxxx<> = + arg => null; + +const xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: xxxxxxxxxxxxxxxxxxxxxx = + arg => null; + + +const xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: xxxxxxxxxxxxxxxxxxxxxx< + // comment +> = + arg => null; + +=====================================output===================================== +const xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: xxxxxxxxxxxxxxxxxxxxxx<> = + arg => null; + +const xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: xxxxxxxxxxxxxxxxxxxxxx = + arg => null; + +const xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: xxxxxxxxxxxxxxxxxxxxxx< + // comment +> = arg => null; + +================================================================================ +`; diff --git a/tests/format/typescript/typeparams/empty-parameters-with-arrow-function/issue-13817.ts b/tests/format/typescript/typeparams/empty-parameters-with-arrow-function/issue-13817.ts new file mode 100644 index 000000000000..de3013df4f94 --- /dev/null +++ b/tests/format/typescript/typeparams/empty-parameters-with-arrow-function/issue-13817.ts @@ -0,0 +1,11 @@ +const xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: xxxxxxxxxxxxxxxxxxxxxx<> = + arg => null; + +const xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: xxxxxxxxxxxxxxxxxxxxxx = + arg => null; + + +const xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: xxxxxxxxxxxxxxxxxxxxxx< + // comment +> = + arg => null; diff --git a/tests/format/typescript/typeparams/empty-parameters-with-arrow-function/jsfmt.spec.js b/tests/format/typescript/typeparams/empty-parameters-with-arrow-function/jsfmt.spec.js new file mode 100644 index 000000000000..4938c4f38220 --- /dev/null +++ b/tests/format/typescript/typeparams/empty-parameters-with-arrow-function/jsfmt.spec.js @@ -0,0 +1,6 @@ +run_spec( + __dirname, + ["typescript", "flow", "babel-flow"], + // #13817 require those options to reproduce + { arrowParens: "avoid", trailingComma: "all" } +);