Fix blank lines between list items and nested sub-lists being removed in Markdown/MDX (#17857)

Co-authored-by: Tatsunori Uchino <tats.u@live.jp>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: fisker Cheung <lionkay@gmail.com>
This commit is contained in:
authored and GitHub committed 2026-06-04 18:21:03 +08:00
1 parent 91f155f7f5
commit 8ea698ccc2
16 files changed
+781 -2

No files matched your search

+31
View File
@@ -0,0 +1,31 @@
#### Fix blank lines between list items and nested sub-lists being removed in Markdown/MDX (#17746 by @byplayer)
Prettier was removing blank lines between list items and their nested sub-lists, converting loose lists into tight lists and changing their semantic meaning.
<!-- prettier-ignore -->
```markdown
<!-- Input -->
- a
- b
- c
- d
<!-- Prettier stable -->
- a
- b
- c
- d
<!-- Prettier main -->
- a
- b
- c
- d
```
+8 -2
View File
@@ -64,7 +64,10 @@ function shouldPrePrintDoubleHardline(path, options) {
isLooseListItemLegacy(previous, options) ||
(node.type === "list" &&
parent.type === "listItem" &&
previous.type === "code")
(previous.type === "code" ||
// Preserve blank line before nested list within listItem (issue #17746)
previous.type === "paragraph") &&
previous.position.end.line + 1 < node.position.start.line)
) {
return true;
}
@@ -80,7 +83,10 @@ function shouldPrePrintDoubleHardline(path, options) {
isPreviousNodeLooseListItem(path) ||
(node.type === "list" &&
parent.type === "listItem" &&
previous.type === "code")
(previous.type === "code" ||
// Preserve blank line before nested list within listItem (issue #17746)
previous.type === "paragraph") &&
previous.position.end.line + 1 < node.position.start.line)
) {
return true;
}
@@ -818,6 +818,7 @@ proseWrap: "always"
\`\`\`
- baz
- \`\`\`
foo
@@ -1776,6 +1776,7 @@ proseWrap: "always"
=====================================output=====================================
1. foo
- bar
================================================================================
@@ -666,6 +666,7 @@ text <unknown title="line 1
"></div>
- In list
- In list
<unknown title="line 1
@@ -743,6 +744,7 @@ text <unknown title="line 1
"></div>
- In list
- In list
<unknown title="line 1
@@ -820,6 +822,7 @@ text <unknown title="line 1
"></div>
- In list
- In list
<unknown title="line 1
@@ -2322,6 +2322,7 @@ tabWidth: 0
=====================================output=====================================
- [ ] a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
a a a a a a a a a a a a a a a
- a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
a a a a a a a a a a a a a a
@@ -2360,6 +2361,7 @@ tabWidth: 0
1. [ ] a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
a a a a a a a a a a a a a a a
- a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
a a a a a a a a a a a a a a
@@ -2401,6 +2403,7 @@ tabWidth: 0
b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b
b b b b b b b b b b b b b b b
- a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
a a a a a a a a a a a a a a a
@@ -2536,6 +2539,7 @@ tabWidth: 4
=====================================output=====================================
- [ ] a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
a a a a a a a a a a a a a a a
- a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
a a a a a a a a a a a a a a a
@@ -2574,6 +2578,7 @@ tabWidth: 4
1. [ ] a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
a a a a a a a a a a a a a a a
- a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
a a a a a a a a a a a a a a a
@@ -2615,6 +2620,7 @@ tabWidth: 4
b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b
b b b b b b b b b b b b b b b
- a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
a a a a a a a a a a a a a a a
@@ -2750,6 +2756,7 @@ tabWidth: 999
=====================================output=====================================
- [ ] a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
a a a a a a a a a a a a a a a
- a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
a a a a a a a a a a a a a a a
@@ -2788,6 +2795,7 @@ tabWidth: 999
1. [ ] a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
a a a a a a a a a a a a a a a
- a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
a a a a a a a a a a a a a a a a
@@ -2829,6 +2837,7 @@ tabWidth: 999
b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b
b b b b b b b b b b b b b b b b
- a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
a a a a a a a a a a a a a a a a
@@ -2963,6 +2972,7 @@ proseWrap: "always"
=====================================output=====================================
- [ ] a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
a a a a a a a a a a a a a a a
- a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
a a a a a a a a a a a a a a
@@ -3001,6 +3011,7 @@ proseWrap: "always"
1. [ ] a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
a a a a a a a a a a a a a a a
- a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
a a a a a a a a a a a a a a
@@ -3042,6 +3053,7 @@ proseWrap: "always"
b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b
b b b b b b b b b b b b b b b
- a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
a a a a a a a a a a a a a a a
@@ -3413,6 +3425,7 @@ tabWidth: 0
2. List
1. Some text, and code block below, with newline after code block
1. Another
2. List
@@ -3470,6 +3483,7 @@ tabWidth: 4
2. List
1. Some text, and code block below, with newline after code block
1. Another
2. List
@@ -3527,6 +3541,7 @@ tabWidth: 999
2. List
1. Some text, and code block below, with newline after code block
1. Another
2. List
@@ -3583,6 +3598,7 @@ proseWrap: "always"
2. List
1. Some text, and code block below, with newline after code block
1. Another
2. List
@@ -3597,6 +3613,485 @@ proseWrap: "always"
================================================================================
`;
exports[`issue-17746.md - {"proseWrap":"always","tabWidth":0} format 1`] = `
====================================options=====================================
parsers: ["markdown"]
proseWrap: "always"
tabWidth: 0
printWidth: 80 (default) |
=====================================input======================================
- a
- b
- c
- d
=====================================output=====================================
- a
- b
- c
- d
================================================================================
`;
exports[`issue-17746.md - {"proseWrap":"always","tabWidth":4} format 1`] = `
====================================options=====================================
parsers: ["markdown"]
proseWrap: "always"
tabWidth: 4
printWidth: 80 (default) |
=====================================input======================================
- a
- b
- c
- d
=====================================output=====================================
- a
- b
- c
- d
================================================================================
`;
exports[`issue-17746.md - {"proseWrap":"always","tabWidth":999} format 1`] = `
====================================options=====================================
parsers: ["markdown"]
proseWrap: "always"
tabWidth: 999
printWidth: 80 (default) |
=====================================input======================================
- a
- b
- c
- d
=====================================output=====================================
- a
- b
- c
- d
================================================================================
`;
exports[`issue-17746.md - {"proseWrap":"always"} format 1`] = `
====================================options=====================================
parsers: ["markdown"]
proseWrap: "always"
printWidth: 80 (default) |
=====================================input======================================
- a
- b
- c
- d
=====================================output=====================================
- a
- b
- c
- d
================================================================================
`;
exports[`issue-17746-code-before-list.md - {"proseWrap":"always","tabWidth":0} format 1`] = `
====================================options=====================================
parsers: ["markdown"]
proseWrap: "always"
tabWidth: 0
printWidth: 80 (default) |
=====================================input======================================
- a
- b
- c
- d
=====================================output=====================================
- a
- b
- c
- d
================================================================================
`;
exports[`issue-17746-code-before-list.md - {"proseWrap":"always","tabWidth":4} format 1`] = `
====================================options=====================================
parsers: ["markdown"]
proseWrap: "always"
tabWidth: 4
printWidth: 80 (default) |
=====================================input======================================
- a
- b
- c
- d
=====================================output=====================================
- a
- b
- c
- d
================================================================================
`;
exports[`issue-17746-code-before-list.md - {"proseWrap":"always","tabWidth":999} format 1`] = `
====================================options=====================================
parsers: ["markdown"]
proseWrap: "always"
tabWidth: 999
printWidth: 80 (default) |
=====================================input======================================
- a
- b
- c
- d
=====================================output=====================================
- a
- b
- c
- d
================================================================================
`;
exports[`issue-17746-code-before-list.md - {"proseWrap":"always"} format 1`] = `
====================================options=====================================
parsers: ["markdown"]
proseWrap: "always"
printWidth: 80 (default) |
=====================================input======================================
- a
- b
- c
- d
=====================================output=====================================
- a
- b
- c
- d
================================================================================
`;
exports[`issue-17746-code-sibling-nested-list.md - {"proseWrap":"always","tabWidth":0} format 1`] = `
====================================options=====================================
parsers: ["markdown"]
proseWrap: "always"
tabWidth: 0
printWidth: 80 (default) |
=====================================input======================================
- a
\`\`\`
b
\`\`\`
- c
- d
=====================================output=====================================
- a
\`\`\`
b
\`\`\`
- c
- d
================================================================================
`;
exports[`issue-17746-code-sibling-nested-list.md - {"proseWrap":"always","tabWidth":4} format 1`] = `
====================================options=====================================
parsers: ["markdown"]
proseWrap: "always"
tabWidth: 4
printWidth: 80 (default) |
=====================================input======================================
- a
\`\`\`
b
\`\`\`
- c
- d
=====================================output=====================================
- a
\`\`\`
b
\`\`\`
- c
- d
================================================================================
`;
exports[`issue-17746-code-sibling-nested-list.md - {"proseWrap":"always","tabWidth":999} format 1`] = `
====================================options=====================================
parsers: ["markdown"]
proseWrap: "always"
tabWidth: 999
printWidth: 80 (default) |
=====================================input======================================
- a
\`\`\`
b
\`\`\`
- c
- d
=====================================output=====================================
- a
\`\`\`
b
\`\`\`
- c
- d
================================================================================
`;
exports[`issue-17746-code-sibling-nested-list.md - {"proseWrap":"always"} format 1`] = `
====================================options=====================================
parsers: ["markdown"]
proseWrap: "always"
printWidth: 80 (default) |
=====================================input======================================
- a
\`\`\`
b
\`\`\`
- c
- d
=====================================output=====================================
- a
\`\`\`
b
\`\`\`
- c
- d
================================================================================
`;
exports[`issue-17746-fenced-code-then-nested-list.md - {"proseWrap":"always","tabWidth":0} format 1`] = `
====================================options=====================================
parsers: ["markdown"]
proseWrap: "always"
tabWidth: 0
printWidth: 80 (default) |
=====================================input======================================
- \`\`\`
a
\`\`\`
- b
- c
=====================================output=====================================
- \`\`\`
a
\`\`\`
- b
- c
================================================================================
`;
exports[`issue-17746-fenced-code-then-nested-list.md - {"proseWrap":"always","tabWidth":4} format 1`] = `
====================================options=====================================
parsers: ["markdown"]
proseWrap: "always"
tabWidth: 4
printWidth: 80 (default) |
=====================================input======================================
- \`\`\`
a
\`\`\`
- b
- c
=====================================output=====================================
- \`\`\`
a
\`\`\`
- b
- c
================================================================================
`;
exports[`issue-17746-fenced-code-then-nested-list.md - {"proseWrap":"always","tabWidth":999} format 1`] = `
====================================options=====================================
parsers: ["markdown"]
proseWrap: "always"
tabWidth: 999
printWidth: 80 (default) |
=====================================input======================================
- \`\`\`
a
\`\`\`
- b
- c
=====================================output=====================================
- \`\`\`
a
\`\`\`
- b
- c
================================================================================
`;
exports[`issue-17746-fenced-code-then-nested-list.md - {"proseWrap":"always"} format 1`] = `
====================================options=====================================
parsers: ["markdown"]
proseWrap: "always"
printWidth: 80 (default) |
=====================================input======================================
- \`\`\`
a
\`\`\`
- b
- c
=====================================output=====================================
- \`\`\`
a
\`\`\`
- b
- c
================================================================================
`;
exports[`issue-17746-indented-code-then-nested-list.md - {"proseWrap":"always","tabWidth":0} format 1`] = `
====================================options=====================================
parsers: ["markdown"]
proseWrap: "always"
tabWidth: 0
printWidth: 80 (default) |
=====================================input======================================
- a
- b
=====================================output=====================================
- a
- b
================================================================================
`;
exports[`issue-17746-indented-code-then-nested-list.md - {"proseWrap":"always","tabWidth":4} format 1`] = `
====================================options=====================================
parsers: ["markdown"]
proseWrap: "always"
tabWidth: 4
printWidth: 80 (default) |
=====================================input======================================
- a
- b
=====================================output=====================================
- a
- b
================================================================================
`;
exports[`issue-17746-indented-code-then-nested-list.md - {"proseWrap":"always","tabWidth":999} format 1`] = `
====================================options=====================================
parsers: ["markdown"]
proseWrap: "always"
tabWidth: 999
printWidth: 80 (default) |
=====================================input======================================
- a
- b
=====================================output=====================================
- a
- b
================================================================================
`;
exports[`issue-17746-indented-code-then-nested-list.md - {"proseWrap":"always"} format 1`] = `
====================================options=====================================
parsers: ["markdown"]
proseWrap: "always"
printWidth: 80 (default) |
=====================================input======================================
- a
- b
=====================================output=====================================
- a
- b
================================================================================
`;
exports[`long-paragraph.md - {"proseWrap":"always","tabWidth":0} format 1`] = `
====================================options=====================================
parsers: ["markdown"]
@@ -3681,12 +4176,15 @@ tabWidth: 0
=====================================output=====================================
- 123
- abc
- 456
- def
- 789
- ghi
================================================================================
@@ -3713,12 +4211,15 @@ tabWidth: 4
=====================================output=====================================
- 123
- abc
- 456
- def
- 789
- ghi
================================================================================
@@ -3745,12 +4246,15 @@ tabWidth: 999
=====================================output=====================================
- 123
- abc
- 456
- def
- 789
- ghi
================================================================================
@@ -3776,12 +4280,15 @@ proseWrap: "always"
=====================================output=====================================
- 123
- abc
- 456
- def
- 789
- ghi
================================================================================
@@ -3951,6 +4458,7 @@ tabWidth: 0
=====================================output=====================================
- parent list item parent list item parent list item parent list item parent
list item parent list item
- child list item child list item child list item child list item child list
item child list item
@@ -3959,6 +4467,7 @@ tabWidth: 0
- [x] parent task list item parent task list item parent task list item parent
task list item
- [x] child task list item child task list item child task list item child
task list item
@@ -3990,6 +4499,7 @@ tabWidth: 4
=====================================output=====================================
- parent list item parent list item parent list item parent list item parent
list item parent list item
- child list item child list item child list item child list item child list
item child list item
@@ -3998,6 +4508,7 @@ tabWidth: 4
- [x] parent task list item parent task list item parent task list item parent
task list item
- [x] child task list item child task list item child task list item child
task list item
@@ -4029,6 +4540,7 @@ tabWidth: 999
=====================================output=====================================
- parent list item parent list item parent list item parent list item parent
list item parent list item
- child list item child list item child list item child list item child
list item child list item
@@ -4037,6 +4549,7 @@ tabWidth: 999
- [x] parent task list item parent task list item parent task list item parent
task list item
- [x] child task list item child task list item child task list item child
task list item
@@ -4067,6 +4580,7 @@ proseWrap: "always"
=====================================output=====================================
- parent list item parent list item parent list item parent list item parent
list item parent list item
- child list item child list item child list item child list item child list
item child list item
@@ -4075,6 +4589,7 @@ proseWrap: "always"
- [x] parent task list item parent task list item parent task list item parent
task list item
- [x] child task list item child task list item child task list item child
task list item
@@ -5426,6 +5941,7 @@ tabWidth: 0
[title](link)
- Text
- foo
- foo
- bar
@@ -5484,6 +6000,7 @@ tabWidth: 4
[title](link)
- Text
- foo
- foo
- bar
@@ -5542,6 +6059,7 @@ tabWidth: 999
[title](link)
- Text
- foo
- foo
- bar
@@ -5599,6 +6117,7 @@ proseWrap: "always"
[title](link)
- Text
- foo
- foo
- bar
@@ -0,0 +1,4 @@
- a
- b
- c
- d
@@ -0,0 +1,7 @@
- a
```
b
```
- c
- d
@@ -0,0 +1,6 @@
- ```
a
```
- b
- c
@@ -0,0 +1,3 @@
- a
- b
@@ -0,0 +1,8 @@
- a
- b
- c
- d
@@ -368,6 +368,176 @@ opinionated-code-formatter-that-support-many-languages-and-integrate-with-most-e
================================================================================
`;
exports[`issue-17746.mdx - {"semi":false} format 1`] = `
====================================options=====================================
parsers: ["mdx"]
semi: false
printWidth: 80 (default) |
=====================================input======================================
- a
- b
- c
- d
=====================================output=====================================
- a
- b
- c
- d
================================================================================
`;
exports[`issue-17746.mdx format 1`] = `
====================================options=====================================
parsers: ["mdx"]
printWidth: 80 (default) |
=====================================input======================================
- a
- b
- c
- d
=====================================output=====================================
- a
- b
- c
- d
================================================================================
`;
exports[`issue-17746-code-before-list.mdx - {"semi":false} format 1`] = `
====================================options=====================================
parsers: ["mdx"]
semi: false
printWidth: 80 (default) |
=====================================input======================================
- a
- b
- c
- d
=====================================output=====================================
- a
- b
- c
- d
================================================================================
`;
exports[`issue-17746-code-before-list.mdx format 1`] = `
====================================options=====================================
parsers: ["mdx"]
printWidth: 80 (default) |
=====================================input======================================
- a
- b
- c
- d
=====================================output=====================================
- a
- b
- c
- d
================================================================================
`;
exports[`issue-17746-fenced-code-then-nested-list.mdx - {"semi":false} format 1`] = `
====================================options=====================================
parsers: ["mdx"]
semi: false
printWidth: 80 (default) |
=====================================input======================================
- \`\`\`
a
\`\`\`
- b
=====================================output=====================================
- \`\`\`
a
\`\`\`
- b
================================================================================
`;
exports[`issue-17746-fenced-code-then-nested-list.mdx format 1`] = `
====================================options=====================================
parsers: ["mdx"]
printWidth: 80 (default) |
=====================================input======================================
- \`\`\`
a
\`\`\`
- b
=====================================output=====================================
- \`\`\`
a
\`\`\`
- b
================================================================================
`;
exports[`issue-17746-indented-code-then-nested-list.mdx - {"semi":false} format 1`] = `
====================================options=====================================
parsers: ["mdx"]
semi: false
printWidth: 80 (default) |
=====================================input======================================
- a
- b
=====================================output=====================================
- a
- b
================================================================================
`;
exports[`issue-17746-indented-code-then-nested-list.mdx format 1`] = `
====================================options=====================================
parsers: ["mdx"]
printWidth: 80 (default) |
=====================================input======================================
- a
- b
=====================================output=====================================
- a
- b
================================================================================
`;
exports[`jsx.mdx - {"semi":false} format 1`] = `
====================================options=====================================
parsers: ["mdx"]
@@ -0,0 +1,4 @@
- a
- b
- c
- d
@@ -0,0 +1,5 @@
- ```
a
```
- b
@@ -0,0 +1,3 @@
- a
- b
+8
View File
@@ -0,0 +1,8 @@
- a
- b
- c
- d