Skip to content

Commit 13ee358

Browse files
fix(md): parse space+tab indented sublists as nested list items (#10703)
Co-authored-by: Emanuele Stoppa <my.burning@gmail.com>
1 parent f62fb8b commit 13ee358

12 files changed

Lines changed: 1120 additions & 5190 deletions

crates/biome_markdown_formatter/tests/specs/prettier/markdown/list/indent.md.snap

Lines changed: 216 additions & 4681 deletions
Large diffs are not rendered by default.

crates/biome_markdown_formatter/tests/specs/prettier/markdown/list/nested-tab.md.snap

Lines changed: 30 additions & 345 deletions
Original file line numberDiff line numberDiff line change
@@ -25,354 +25,39 @@ info: markdown/list/nested-tab.md
2525
```
2626

2727

28-
# Error
29-
```text
30-
reformat: output mismatch
31-
--- re-formatted
32-
+++ formatted
33-
@@ -5,7 +5,7 @@
28+
# Prettier differences
29+
30+
```diff
31+
--- Prettier
32+
+++ Biome
33+
@@ -13,5 +13,5 @@
34+
- Top level list item 2
3435
- Nested List item 1
3536
- Nested List item 2
36-
- Sub-Nested List item 1
37-
- - Sub-Nested List item 2
37+
- _ Sub-Nested List item 1
38+
- _ Sub-Nested List item 2
39+
+ - Sub-Nested List item 1
3840
+ - Sub-Nested List item 2
39-
40-
# List with 1 tab indentation and `*`
41-
42-
@@ -14,4 +14,4 @@
43-
- Nested List item 1
44-
- Nested List item 2
45-
- Sub-Nested List item 1
46-
- - Sub-Nested List item 2
47-
+ * Sub-Nested List item 2
41+
```
42+
43+
# Output
44+
45+
```md
46+
# List with 1 tab indentation and `-`
4847
49-
IR differences:
50-
--- re-formatted IR
51-
+++ formatted IR
52-
@@ -10,103 +10,108 @@
53-
source_position(36),
54-
"`",
55-
empty_line,
56-
+ source_position(38),
57-
+ "-",
58-
source_position(39),
59-
- "-",
60-
- source_position(40),
61-
" ",
62-
align(2, [
63-
- source_position(41),
64-
+ source_position(40),
65-
"Top ",
66-
- source_position(45),
67-
+ source_position(44),
68-
"level ",
69-
- source_position(51),
70-
+ source_position(50),
71-
"list ",
72-
- source_position(56),
73-
+ source_position(55),
74-
"item ",
75-
- source_position(61),
76-
+ source_position(60),
77-
"1",
78-
hard_line_break,
79-
hard_line_break
80-
]),
81-
+ source_position(62),
82-
+ "-",
83-
source_position(63),
84-
- "-",
85-
- source_position(64),
86-
" ",
87-
align(2, [
88-
- source_position(65),
89-
+ source_position(64),
90-
"Top ",
91-
- source_position(69),
92-
+ source_position(68),
93-
"level ",
94-
- source_position(75),
95-
+ source_position(74),
96-
"list ",
97-
- source_position(80),
98-
+ source_position(79),
99-
"item ",
100-
- source_position(85),
101-
+ source_position(84),
102-
"2",
103-
hard_line_break,
104-
hard_line_break,
105-
- source_position(89),
106-
+ source_position(87),
107-
"-",
108-
- source_position(90),
109-
+ source_position(88),
110-
" ",
111-
align(2, [
112-
- source_position(91),
113-
+ source_position(89),
114-
"Nested ",
115-
- source_position(98),
116-
+ source_position(96),
117-
"List ",
118-
- source_position(103),
119-
+ source_position(101),
120-
"item ",
121-
- source_position(108),
122-
+ source_position(106),
123-
"1",
124-
hard_line_break,
125-
hard_line_break
126-
]),
127-
- source_position(112),
128-
+ source_position(109),
129-
"-",
130-
- source_position(113),
131-
+ source_position(110),
132-
" ",
133-
align(2, [
134-
- source_position(114),
135-
+ source_position(111),
136-
"Nested ",
137-
- source_position(121),
138-
+ source_position(118),
139-
"List ",
140-
- source_position(126),
141-
+ source_position(123),
142-
"item ",
143-
- source_position(131),
144-
+ source_position(128),
145-
"2",
146-
hard_line_break,
147-
hard_line_break,
148-
- source_position(137),
149-
+ source_position(132),
150-
"-",
151-
- source_position(138),
152-
+ source_position(133),
153-
" ",
154-
align(2, [
155-
- source_position(139),
156-
+ source_position(134),
157-
"Sub",
158-
- source_position(142),
159-
+ source_position(137),
160-
"-",
161-
- source_position(143),
162-
+ source_position(138),
163-
"Nested ",
164-
- source_position(150),
165-
+ source_position(145),
166-
"List ",
167-
+ source_position(150),
168-
+ "item ",
169-
source_position(155),
170-
- "item ",
171-
- source_position(160),
172-
"1",
173-
hard_line_break,
174-
- source_position(166),
175-
- "- ",
176-
- source_position(168),
177-
+ hard_line_break
178-
+ ]),
179-
+ source_position(159),
180-
+ "-",
181-
+ source_position(160),
182-
+ " ",
183-
+ align(2, [
184-
+ source_position(161),
185-
"Sub",
186-
- source_position(171),
187-
+ source_position(164),
188-
"-",
189-
- source_position(172),
190-
+ source_position(165),
191-
"Nested ",
192-
- source_position(179),
193-
+ source_position(172),
194-
"List ",
195-
- source_position(184),
196-
+ source_position(177),
197-
"item ",
198-
- source_position(189),
199-
+ source_position(182),
200-
"2",
201-
hard_line_break,
202-
hard_line_break
203-
@@ -115,124 +120,114 @@
204-
]),
205-
hard_line_break
206-
]),
207-
- source_position(191),
208-
+ source_position(184),
209-
"
210-
",
211-
- source_position(192),
212-
+ source_position(185),
213-
"# ",
214-
- source_position(193),
215-
+ source_position(186),
216-
"List with 1 tab indentation and ",
217-
- source_position(226),
218-
+ source_position(219),
219-
"`",
220-
- source_position(227),
221-
+ source_position(220),
222-
"*",
223-
- source_position(228),
224-
+ source_position(221),
225-
"`",
226-
empty_line,
227-
- source_position(231),
228-
"-",
229-
- source_position(232),
230-
+ source_position(224),
231-
" ",
232-
align(2, [
233-
- source_position(233),
234-
+ source_position(225),
235-
"Top ",
236-
- source_position(237),
237-
+ source_position(229),
238-
"level ",
239-
- source_position(243),
240-
+ source_position(235),
241-
"list ",
242-
- source_position(248),
243-
+ source_position(240),
244-
"item ",
245-
- source_position(253),
246-
+ source_position(245),
247-
"1",
248-
hard_line_break,
249-
hard_line_break
250-
]),
251-
- source_position(255),
252-
"-",
253-
- source_position(256),
254-
+ source_position(248),
255-
" ",
256-
align(2, [
257-
- source_position(257),
258-
+ source_position(249),
259-
"Top ",
260-
- source_position(261),
261-
+ source_position(253),
262-
"level ",
263-
- source_position(267),
264-
+ source_position(259),
265-
"list ",
266-
- source_position(272),
267-
+ source_position(264),
268-
"item ",
269-
- source_position(277),
270-
+ source_position(269),
271-
"2",
272-
hard_line_break,
273-
hard_line_break,
274-
- source_position(281),
275-
"-",
276-
- source_position(282),
277-
+ source_position(273),
278-
" ",
279-
align(2, [
280-
- source_position(283),
281-
+ source_position(274),
282-
"Nested ",
283-
- source_position(290),
284-
+ source_position(281),
285-
"List ",
286-
- source_position(295),
287-
+ source_position(286),
288-
"item ",
289-
- source_position(300),
290-
+ source_position(291),
291-
"1",
292-
hard_line_break,
293-
hard_line_break
294-
]),
295-
- source_position(304),
296-
"-",
297-
- source_position(305),
298-
+ source_position(295),
299-
" ",
300-
align(2, [
301-
- source_position(306),
302-
+ source_position(296),
303-
"Nested ",
304-
- source_position(313),
305-
+ source_position(303),
306-
"List ",
307-
- source_position(318),
308-
+ source_position(308),
309-
"item ",
310-
- source_position(323),
311-
+ source_position(313),
312-
"2",
313-
hard_line_break,
314-
hard_line_break,
315-
- source_position(329),
316-
"-",
317-
- source_position(330),
318-
+ source_position(321),
319-
" ",
320-
align(2, [
321-
- source_position(331),
322-
+ source_position(322),
323-
"Sub",
324-
- source_position(334),
325-
+ source_position(325),
326-
"-",
327-
- source_position(335),
328-
+ source_position(326),
329-
"Nested ",
330-
- source_position(342),
331-
+ source_position(333),
332-
"List ",
333-
- source_position(347),
334-
+ source_position(338),
335-
"item ",
336-
- source_position(352),
337-
+ source_position(343),
338-
"1",
339-
hard_line_break,
340-
- hard_line_break,
341-
+ source_position(350),
342-
+ "* ",
343-
+ source_position(352),
344-
+ "Sub",
345-
+ source_position(355),
346-
"-",
347-
- source_position(361),
348-
- " ",
349-
- align(2, [
350-
- source_position(362),
351-
- "Sub",
352-
- source_position(365),
353-
- "-",
354-
- source_position(366),
355-
- "Nested ",
356-
- source_position(373),
357-
- "List ",
358-
- source_position(378),
359-
- "item ",
360-
- source_position(383),
361-
- "2",
362-
- hard_line_break,
363-
- hard_line_break
364-
- ]),
365-
+ source_position(356),
366-
+ "Nested ",
367-
+ source_position(363),
368-
+ "List ",
369-
+ source_position(368),
370-
+ "item ",
371-
+ source_position(373),
372-
+ "2",
373-
+ hard_line_break,
374-
hard_line_break
375-
]),
376-
hard_line_break
48+
- Top level list item 1
49+
- Top level list item 2
50+
- Nested List item 1
51+
- Nested List item 2
52+
- Sub-Nested List item 1
53+
- Sub-Nested List item 2
37754
55+
# List with 1 tab indentation and `*`
56+
57+
- Top level list item 1
58+
- Top level list item 2
59+
- Nested List item 1
60+
- Nested List item 2
61+
- Sub-Nested List item 1
62+
- Sub-Nested List item 2
37863
```

0 commit comments

Comments
 (0)