From 6ae5fecd46f1a787c9cac9531420c510ec8d2c0d Mon Sep 17 00:00:00 2001 From: Konv Suu Date: Wed, 20 May 2026 23:07:24 +0800 Subject: [PATCH] Fix JSDoc multiline type cast alignment in assignment (#19180) --- changelog_unreleased/javascript/19180.md | 20 ++++++++++++++ src/language-js/print/assignment.js | 5 +++- .../__snapshots__/format.test.js.snap | 27 +++++++++++++++++++ .../indentable-block-comment.js | 7 +++++ .../__snapshots__/format.test.js.snap | 15 ++++++----- 5 files changed, 66 insertions(+), 8 deletions(-) create mode 100644 changelog_unreleased/javascript/19180.md create mode 100644 tests/format/js/assignment-comments/indentable-block-comment.js diff --git a/changelog_unreleased/javascript/19180.md b/changelog_unreleased/javascript/19180.md new file mode 100644 index 000000000..71eefbecb --- /dev/null +++ b/changelog_unreleased/javascript/19180.md @@ -0,0 +1,20 @@ +#### Fix multiline JSDoc-style comment alignment in assignments (#19180 by @kovsu) + + +```jsx +// Input +const foo = /** + * comment + */ bar; + +// Prettier stable +const foo = /** + * comment + */ bar; + +// Prettier main +const foo = + /** + * comment + */ bar; +``` diff --git a/src/language-js/print/assignment.js b/src/language-js/print/assignment.js index 6a7c3ee82..b704e0ade 100644 --- a/src/language-js/print/assignment.js +++ b/src/language-js/print/assignment.js @@ -11,7 +11,9 @@ import { import getStringWidth from "../../utilities/get-string-width.js"; import isNonEmptyArray from "../../utilities/is-non-empty-array.js"; import { getCallArguments } from "../utilities/call-arguments.js"; +import { CommentCheckFlags, hasComment } from "../utilities/comments.js"; import { hasLeadingOwnLineComment } from "../utilities/has-leading-own-line-comment.js"; +import { isIndentableBlockComment } from "../utilities/indentable-block-comment.js"; import { isLoneShortArgument } from "../utilities/is-lone-short-argument.js"; import { isObjectProperty } from "../utilities/is-object-property.js"; import { @@ -138,7 +140,8 @@ function chooseLayout(path, options, print, leftDoc, rightPropertyName) { if ( isHeadOfLongChain || (isUnionType(rightNode) && !shouldHugUnionType(rightNode)) || - hasLeadingOwnLineComment(options.originalText, rightNode) + hasLeadingOwnLineComment(options.originalText, rightNode) || + hasComment(rightNode, CommentCheckFlags.Leading, isIndentableBlockComment) ) { return "break-after-operator"; } diff --git a/tests/format/js/assignment-comments/__snapshots__/format.test.js.snap b/tests/format/js/assignment-comments/__snapshots__/format.test.js.snap index ebb7e5f2a..30e67b19e 100644 --- a/tests/format/js/assignment-comments/__snapshots__/format.test.js.snap +++ b/tests/format/js/assignment-comments/__snapshots__/format.test.js.snap @@ -192,6 +192,33 @@ const bifornCringerMoshedPerplexSawder = // !!! ================================================================================ `; +exports[`indentable-block-comment.js format 1`] = ` +====================================options===================================== +parsers: ["babel", "flow", "typescript"] + printWidth: 80 (default) | +=====================================input====================================== +fnString = /** + * multi-line + */ value; + +var fnString = /** + * multi-line + */ value; + +=====================================output===================================== +fnString = + /** + * multi-line + */ value; + +var fnString = + /** + * multi-line + */ value; + +================================================================================ +`; + exports[`number.js format 1`] = ` ====================================options===================================== parsers: ["babel", "flow", "typescript"] diff --git a/tests/format/js/assignment-comments/indentable-block-comment.js b/tests/format/js/assignment-comments/indentable-block-comment.js new file mode 100644 index 000000000..860971456 --- /dev/null +++ b/tests/format/js/assignment-comments/indentable-block-comment.js @@ -0,0 +1,7 @@ +fnString = /** + * multi-line + */ value; + +var fnString = /** + * multi-line + */ value; diff --git a/tests/format/js/comments-closure-typecast/__snapshots__/format.test.js.snap b/tests/format/js/comments-closure-typecast/__snapshots__/format.test.js.snap index 2ab23ee41..2f73c8ce5 100644 --- a/tests/format/js/comments-closure-typecast/__snapshots__/format.test.js.snap +++ b/tests/format/js/comments-closure-typecast/__snapshots__/format.test.js.snap @@ -173,13 +173,14 @@ const style = /** @type {{ ...margins, }); -const style2 = /** - * @type {{ - * width: number, - * }} - */ ({ - width, -}); +const style2 = + /** + * @type {{ + * width: number, + * }} + */ ({ + width, + }); ================================================================================ `;