From ec6dda1fbac6c79300eae421b542856063377963 Mon Sep 17 00:00:00 2001 From: Konv Suu Date: Thu, 13 Aug 2026 15:21:34 +0800 Subject: [PATCH] Print leading thematic break as `***` instead of `---` (#19839) Co-authored-by: fisker --- src/language-markdown/print/mdast.js | 5 ++ .../__snapshots__/format.test.js.snap | 72 +++++++++++++++++-- .../commonmark-test-suite/format.test.js | 8 +-- .../__snapshots__/format.test.js.snap | 2 +- 4 files changed, 73 insertions(+), 14 deletions(-) diff --git a/src/language-markdown/print/mdast.js b/src/language-markdown/print/mdast.js index ca3a5991b..8559c6bf6 100644 --- a/src/language-markdown/print/mdast.js +++ b/src/language-markdown/print/mdast.js @@ -301,6 +301,11 @@ function printMdast(path, options, print) { const { ancestors } = path; const counter = ancestors.findIndex((node) => node.type === "list"); if (counter === -1) { + // Prevent it from becoming a "front matter" + if (path.isFirst && path.parent.type === "root") { + return "***"; + } + return "---"; } const nthSiblingIndex = getNthListSiblingIndex( diff --git a/tests/format/markdown/commonmark-test-suite/__snapshots__/format.test.js.snap b/tests/format/markdown/commonmark-test-suite/__snapshots__/format.test.js.snap index 3e2bf98d0..cb1d359f9 100644 --- a/tests/format/markdown/commonmark-test-suite/__snapshots__/format.test.js.snap +++ b/tests/format/markdown/commonmark-test-suite/__snapshots__/format.test.js.snap @@ -167,7 +167,7 @@ proseWrap: "always" * * * =====================================output===================================== ---- +*** ================================================================================ `; @@ -651,6 +651,26 @@ proseWrap: "always" ================================================================================ `; +exports[`snippet: example-43.md (Thematic breaks) - {"proseWrap":"always"} format 1`] = ` +====================================options===================================== +parsers: ["markdown"] +proseWrap: "always" + printWidth: 80 (default) | +=====================================input====================================== +*** +--- +___ + +=====================================output===================================== +*** + +--- + +--- + +================================================================================ +`; + exports[`snippet: example-44.md (Thematic breaks) - {"proseWrap":"always"} format 1`] = ` ====================================options===================================== parsers: ["markdown"] @@ -695,6 +715,26 @@ __ ================================================================================ `; +exports[`snippet: example-47.md (Thematic breaks) - {"proseWrap":"always"} format 1`] = ` +====================================options===================================== +parsers: ["markdown"] +proseWrap: "always" + printWidth: 80 (default) | +=====================================input====================================== + *** + *** + *** + +=====================================output===================================== +*** + +--- + +--- + +================================================================================ +`; + exports[`snippet: example-48.md (Thematic breaks) - {"proseWrap":"always"} format 1`] = ` ====================================options===================================== parsers: ["markdown"] @@ -733,7 +773,7 @@ proseWrap: "always" _____________________________________ =====================================output===================================== ---- +*** ================================================================================ `; @@ -747,7 +787,7 @@ proseWrap: "always" - - - =====================================output===================================== ---- +*** ================================================================================ `; @@ -761,7 +801,7 @@ proseWrap: "always" ** * ** * ** * ** =====================================output===================================== ---- +*** ================================================================================ `; @@ -775,7 +815,7 @@ proseWrap: "always" - - - - =====================================output===================================== ---- +*** ================================================================================ `; @@ -789,7 +829,7 @@ proseWrap: "always" - - - - =====================================output===================================== ---- +*** ================================================================================ `; @@ -1173,6 +1213,26 @@ proseWrap: "always" ================================================================================ `; +exports[`snippet: example-77.md (ATX headings) - {"proseWrap":"always"} format 1`] = ` +====================================options===================================== +parsers: ["markdown"] +proseWrap: "always" + printWidth: 80 (default) | +=====================================input====================================== +**** +## foo +**** + +=====================================output===================================== +*** + +## foo + +--- + +================================================================================ +`; + exports[`snippet: example-78.md (ATX headings) - {"proseWrap":"always"} format 1`] = ` ====================================options===================================== parsers: ["markdown"] diff --git a/tests/format/markdown/commonmark-test-suite/format.test.js b/tests/format/markdown/commonmark-test-suite/format.test.js index d9214af90..1e5a2d373 100644 --- a/tests/format/markdown/commonmark-test-suite/format.test.js +++ b/tests/format/markdown/commonmark-test-suite/format.test.js @@ -1,12 +1,6 @@ import commonmarkTestSuite from "commonmark-test-suite"; -const BUGS = new Set([ - "example-43.md", - "example-47.md", - "example-77.md", - "example-146.md", - "example-349.md", -]); +const BUGS = new Set(["example-146.md", "example-349.md"]); runFormatTest( { diff --git a/tests/format/markdown/thematicBreak/__snapshots__/format.test.js.snap b/tests/format/markdown/thematicBreak/__snapshots__/format.test.js.snap index 53119a567..fd110d8f7 100644 --- a/tests/format/markdown/thematicBreak/__snapshots__/format.test.js.snap +++ b/tests/format/markdown/thematicBreak/__snapshots__/format.test.js.snap @@ -26,7 +26,7 @@ proseWrap: "always" *** =====================================output===================================== ---- +*** ================================================================================ `;