Latest Results
fix(markdown_parser): column-aware tab handling around block containers
Make tab indentation around blockquote markers, list-item continuation
indent, paragraph breaks, and fenced/setext code rendering column-aware
per CommonMark §2.2. Previously, every tab was counted as four spaces
regardless of column position, which mis-parsed or mis-rendered several
constructions surfaced by a differential fuzzer against commonmark.js.
User-visible parser/rendering fixes:
- `> \t- nested` parses as a blockquote containing a bullet list instead
of an indented code block, since the tab at column 2 only advances to
column 4 (2 cols of indent, not 4).
- `> outer\n> \t- nested` interrupts the outer paragraph at the second
line so a nested list begins, by skipping leading whitespace in the
quote-prefix interrupt classifier before re-lexing at line start.
- Fenced code blocks indented by a tab inside a list item strip the full
tab from each body line. The renderer cross-checks the fence's absolute
column with the explicit `MdIndentTokenList` so a tab that spans the
list/quote prefix and the fence's own indent slot is still accounted
for when computing the body strip width.
- Paragraph rendering trims leading tabs from the first line.
- Setext heading rendering reuses `strip_paragraph_indent` so
continuation lines no longer leak interior leading whitespace.
- After a link reference definition with no blank line, an ordered list
whose first number is not `1` is treated as paragraph continuation
(it cannot interrupt a paragraph per §5.2).
- A blockquote ends when the next unprefixed line begins any block
construct (e.g. `10.` ordered list), matching CommonMark's stricter
laziness rule.
- Tab-indented bullet siblings inside a blockquote are siblings rather
than nested. `line_indent_from_current` now expands tabs relative to
the absolute column position so the list item continuation check
reports the correct indent and breaks out at the marker_indent.
Test infrastructure:
- Extends the differential fuzz corpus generator with tab-focused
combinators (`genTabIndentedSiblings`, `genTabNestedList`,
`genMixedTabSpaceIndent`, etc.).
- Adds 12 new seed cases locking in the regressions above.
- Adds 5 CST snapshot fixtures under `md_test_suite/ok/` for the new
parser behaviors.
Verification:
- `just test-crate biome_markdown_parser` (151 tests).
- `just test-crate biome_markdown_formatter` (817 tests).
- `just test-markdown-conformance` (651/652, unchanged).
- Differential fuzz against commonmark.js: 187361 cases, 0 failures
at seed 2026; 4321 cases at seed 10333 also clean.jfmcdowell:fix/markdown-fuzz-followups Latest Branches
-45%
Netail:feat/no-empty-documentation -2%
jfmcdowell:fix/markdown-fuzz-followups 0%
pkallos:pk/use-nullish-coalescing-ignore-mixed-logical © 2026 CodSpeed Technology