From 82124fa9e6a5ac70f276b3177c334a46148f42dd Mon Sep 17 00:00:00 2001 From: RivoLink Date: Thu, 2 Jul 2026 20:13:50 +0300 Subject: [PATCH] fix: thematic break metadata-block --- src/markdown/mod.rs | 5 ++++- src/tests/markdown_blocks.rs | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/markdown/mod.rs b/src/markdown/mod.rs index 4dfc9de..835bace 100644 --- a/src/markdown/mod.rs +++ b/src/markdown/mod.rs @@ -339,7 +339,10 @@ pub(crate) fn parse_markdown_with_width( let normalized = normalize_code_fences(src); let line_starts = compute_line_starts(&normalized); - for (ev, range) in Parser::new_ext(&normalized, Options::all()).into_offset_iter() { + let parser_options = Options::all() + - Options::ENABLE_YAML_STYLE_METADATA_BLOCKS + - Options::ENABLE_PLUSES_DELIMITED_METADATA_BLOCKS; + for (ev, range) in Parser::new_ext(&normalized, parser_options).into_offset_iter() { state.truncate(lines.len()); let before = lines.len(); let raw_line = byte_to_line(&line_starts, range.start); diff --git a/src/tests/markdown_blocks.rs b/src/tests/markdown_blocks.rs index f3ac5ce..8e2695a 100644 --- a/src/tests/markdown_blocks.rs +++ b/src/tests/markdown_blocks.rs @@ -109,6 +109,28 @@ fn rules_use_render_width_without_extra_blank_after() { assert_eq!(rendered[rule_idx + 1], "Beta"); } +#[test] +fn body_dashes_are_thematic_breaks_not_metadata_block() { + let (ss, theme) = test_assets(); + let src = "# Title\n\n---\n### SSL\n\n- item 1\n- item 2\n\n---\n### TLS\nend\n"; + let (lines, _, _, _) = + parse_markdown_with_width(src, &ss, &theme, 40, &test_md_theme(), false, true).into(); + let rendered = rendered_non_empty_lines(&lines); + + let rule_count = rendered + .iter() + .filter(|line| line.trim_start().starts_with('─')) + .count(); + assert!( + rule_count >= 2, + "expected two thematic breaks, got {rule_count}" + ); + assert!(rendered.iter().any(|line| line.contains("SSL"))); + assert!(rendered.iter().any(|line| line.contains("item 1"))); + assert!(rendered.iter().any(|line| line.contains("item 2"))); + assert!(rendered.iter().any(|line| line.contains("TLS"))); +} + #[test] fn source_line_map_plain_document_is_aligned_with_first_event() { let (ss, theme) = test_assets();