From 2158d480aba89f5587ecde7e9f6d77d01bc82dac Mon Sep 17 00:00:00 2001 From: Miodrag Obradovic <99922455+Kjubikstronk@users.noreply.github.com> Date: Tue, 18 Aug 2026 14:35:00 +0200 Subject: [PATCH] Strip blockquote markers from a setext heading's continuation lines (#19878) --- changelog_unreleased/markdown/19878.md | 20 +++++++++++ src/language-markdown/print/preprocess.js | 5 ++- .../setext/__snapshots__/format.test.js.snap | 35 +++++++++++++++++++ .../markdown/heading/setext/blockquote.md | 12 +++++++ 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 changelog_unreleased/markdown/19878.md create mode 100644 tests/format/markdown/heading/setext/blockquote.md diff --git a/changelog_unreleased/markdown/19878.md b/changelog_unreleased/markdown/19878.md new file mode 100644 index 000000000..61af67a38 --- /dev/null +++ b/changelog_unreleased/markdown/19878.md @@ -0,0 +1,20 @@ +#### Strip blockquote markers from a setext heading's continuation lines (#19878 by @Kjubikstronk) + +A setext heading spanning multiple lines inside a blockquote kept the `>` marker of its continuation lines as literal text. + + +```md + +> Multi +> Line +> === + + +> Multi > Line +> === + + +> Multi +> Line +> === +``` diff --git a/src/language-markdown/print/preprocess.js b/src/language-markdown/print/preprocess.js index d521e31cc..bffce2cf3 100644 --- a/src/language-markdown/print/preprocess.js +++ b/src/language-markdown/print/preprocess.js @@ -183,8 +183,11 @@ function splitTextIntoSentences(ast) { // Using `node.value`, we don't need to care about markers like `\n > ` in `blockquote`s. let text = node.raw; + // A setext heading's text can span multiple raw source lines too, e.g. + // `> Title\n> continued\n> ===`. const paragraphIndex = parentStack.findIndex( - (ancestor) => ancestor?.type === "paragraph", + (ancestor) => + ancestor?.type === "paragraph" || ancestor?.type === "heading", ); const paragraphNode = diff --git a/tests/format/markdown/heading/setext/__snapshots__/format.test.js.snap b/tests/format/markdown/heading/setext/__snapshots__/format.test.js.snap index 420cd2cd8..e266385a6 100644 --- a/tests/format/markdown/heading/setext/__snapshots__/format.test.js.snap +++ b/tests/format/markdown/heading/setext/__snapshots__/format.test.js.snap @@ -1,5 +1,40 @@ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +exports[`blockquote.md format 1`] = ` +====================================options===================================== +parsers: ["markdown"] + printWidth: 80 (default) | +=====================================input====================================== +> Multi +> Line +> === + +> Multi +> Line +> Three +> --- + +> > Multi +> > Line +> > === + +=====================================output===================================== +> Multi +> Line +> === + +> Multi +> Line +> Three +> --- + +> > Multi +> > Line +> > === + +================================================================================ +`; + exports[`child.md format 1`] = ` ====================================options===================================== parsers: ["markdown"] diff --git a/tests/format/markdown/heading/setext/blockquote.md b/tests/format/markdown/heading/setext/blockquote.md new file mode 100644 index 000000000..ca9f11e4f --- /dev/null +++ b/tests/format/markdown/heading/setext/blockquote.md @@ -0,0 +1,12 @@ +> Multi +> Line +> === + +> Multi +> Line +> Three +> --- + +> > Multi +> > Line +> > ===