Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package rumdl for openSUSE:Factory checked in at 2026-03-23 17:14:23 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/rumdl (Old) and /work/SRC/openSUSE:Factory/.rumdl.new.8177 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rumdl" Mon Mar 23 17:14:23 2026 rev:48 rq:1341961 version:0.1.58 Changes: -------- --- /work/SRC/openSUSE:Factory/rumdl/rumdl.changes 2026-03-20 21:27:29.680686659 +0100 +++ /work/SRC/openSUSE:Factory/.rumdl.new.8177/rumdl.changes 2026-03-23 17:16:05.908487551 +0100 @@ -1,0 +2,14 @@ +Mon Mar 23 06:19:40 UTC 2026 - Johannes Kastl <[email protected]> + +- Update to version 0.1.58: + * Fixed + - MD037: Detect spacing issues in bold metadata patterns like + ** Key**: value — the doc pattern exemption was too broad, + suppressing valid MD037 warnings when ** was followed by : + (thanks @vEnhance in #539) + - MDX support: All rules now skip MDX comments ({/* ... */}) + alongside HTML comments — MD010, MD011, MD018, MD022, MD028, + MD030, MD032, MD033, MD034, MD036, MD046, MD052, MD066, + MD067, MD068, MD069, MD070, MD075, MD076, MD077 + +------------------------------------------------------------------- Old: ---- rumdl-0.1.57.obscpio New: ---- rumdl-0.1.58.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ rumdl.spec ++++++ --- /var/tmp/diff_new_pack.UZHV0F/_old 2026-03-23 17:16:08.764606336 +0100 +++ /var/tmp/diff_new_pack.UZHV0F/_new 2026-03-23 17:16:08.780607002 +0100 @@ -17,7 +17,7 @@ Name: rumdl -Version: 0.1.57 +Version: 0.1.58 Release: 0 Summary: Markdown Linter written in Rust License: MIT ++++++ _service ++++++ --- /var/tmp/diff_new_pack.UZHV0F/_old 2026-03-23 17:16:08.864610495 +0100 +++ /var/tmp/diff_new_pack.UZHV0F/_new 2026-03-23 17:16:08.868610661 +0100 @@ -3,7 +3,7 @@ <param name="url">https://github.com/rvben/rumdl.git</param> <param name="scm">git</param> <param name="submodules">enable</param> - <param name="revision">v0.1.57</param> + <param name="revision">v0.1.58</param> <param name="match-tag">v*.*.*</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.UZHV0F/_old 2026-03-23 17:16:08.900611992 +0100 +++ /var/tmp/diff_new_pack.UZHV0F/_new 2026-03-23 17:16:08.904612159 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/rvben/rumdl.git</param> - <param name="changesrevision">b52183a24937296947580d86711ecde803ba6e83</param></service></servicedata> + <param name="changesrevision">9e2fcf2a8bc963f04b8484f0e23c671d71fba5e6</param></service></servicedata> (No newline at EOF) ++++++ rumdl-0.1.57.obscpio -> rumdl-0.1.58.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/CHANGELOG.md new/rumdl-0.1.58/CHANGELOG.md --- old/rumdl-0.1.57/CHANGELOG.md 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/CHANGELOG.md 2026-03-22 20:03:22.000000000 +0100 @@ -7,6 +7,13 @@ ## [Unreleased] +## [0.1.58] - 2026-03-22 + +### Fixed + +- **MD037**: Detect spacing issues in bold metadata patterns like `** Key**: value` — the doc pattern exemption was too broad, suppressing valid MD037 warnings when `**` was followed by `:` (thanks @vEnhance in [#539](https://github.com/rvben/rumdl/pull/539)) +- **MDX support**: All rules now skip MDX comments (`{/* ... */}`) alongside HTML comments — MD010, MD011, MD018, MD022, MD028, MD030, MD032, MD033, MD034, MD036, MD046, MD052, MD066, MD067, MD068, MD069, MD070, MD075, MD076, MD077 + ## [0.1.57] - 2026-03-20 ### Fixed diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/Cargo.lock new/rumdl-0.1.58/Cargo.lock --- old/rumdl-0.1.57/Cargo.lock 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/Cargo.lock 2026-03-22 20:03:22.000000000 +0100 @@ -2247,7 +2247,7 @@ [[package]] name = "rumdl" -version = "0.1.57" +version = "0.1.58" dependencies = [ "anyhow", "assert_cmd", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/Cargo.toml new/rumdl-0.1.58/Cargo.toml --- old/rumdl-0.1.57/Cargo.toml 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/Cargo.toml 2026-03-22 20:03:22.000000000 +0100 @@ -1,6 +1,6 @@ [package] name = "rumdl" -version = "0.1.57" +version = "0.1.58" edition = "2024" rust-version = "1.94.0" description = "A fast Markdown linter written in Rust (Ru(st) MarkDown Linter)" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/README.md new/rumdl-0.1.58/README.md --- old/rumdl-0.1.57/README.md 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/README.md 2026-03-22 20:03:22.000000000 +0100 @@ -196,7 +196,7 @@ mise install rumdl # Use a specific version for the project -mise use [email protected] +mise use [email protected] ``` ### Using Nix (macOS/Linux) @@ -346,7 +346,7 @@ ```yaml repos: - repo: https://github.com/rvben/rumdl-pre-commit - rev: v0.1.57 + rev: v0.1.58 hooks: - id: rumdl # Lint only (fails on issues) - id: rumdl-fmt # Auto-format and fail if issues remain @@ -368,7 +368,7 @@ ```yaml repos: - repo: https://github.com/rvben/rumdl-pre-commit - rev: v0.1.57 + rev: v0.1.58 hooks: - id: rumdl args: [--no-exclude] # Disable all exclude patterns @@ -821,7 +821,7 @@ This means you can place a `.markdownlint.yaml` at your project root and run rumdl from any subdirectory - it will find and use the config automatically. -** Explicit Import**: Convert markdownlint configs to rumdl format: +**Explicit Import**: Convert markdownlint configs to rumdl format: ```bash # Convert to .rumdl.toml diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/npm/cli-darwin-arm64/package.json new/rumdl-0.1.58/npm/cli-darwin-arm64/package.json --- old/rumdl-0.1.57/npm/cli-darwin-arm64/package.json 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/npm/cli-darwin-arm64/package.json 2026-03-22 20:03:22.000000000 +0100 @@ -1,6 +1,6 @@ { "name": "@rumdl/cli-darwin-arm64", - "version": "0.1.57", + "version": "0.1.58", "description": "rumdl binary for macOS ARM64 (Apple Silicon)", "license": "MIT", "repository": { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/npm/cli-darwin-x64/package.json new/rumdl-0.1.58/npm/cli-darwin-x64/package.json --- old/rumdl-0.1.57/npm/cli-darwin-x64/package.json 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/npm/cli-darwin-x64/package.json 2026-03-22 20:03:22.000000000 +0100 @@ -1,6 +1,6 @@ { "name": "@rumdl/cli-darwin-x64", - "version": "0.1.57", + "version": "0.1.58", "description": "rumdl binary for macOS x64 (Intel)", "license": "MIT", "repository": { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/npm/cli-linux-arm64/package.json new/rumdl-0.1.58/npm/cli-linux-arm64/package.json --- old/rumdl-0.1.57/npm/cli-linux-arm64/package.json 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/npm/cli-linux-arm64/package.json 2026-03-22 20:03:22.000000000 +0100 @@ -1,6 +1,6 @@ { "name": "@rumdl/cli-linux-arm64", - "version": "0.1.57", + "version": "0.1.58", "description": "rumdl binary for Linux ARM64 (glibc)", "license": "MIT", "repository": { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/npm/cli-linux-arm64-musl/package.json new/rumdl-0.1.58/npm/cli-linux-arm64-musl/package.json --- old/rumdl-0.1.57/npm/cli-linux-arm64-musl/package.json 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/npm/cli-linux-arm64-musl/package.json 2026-03-22 20:03:22.000000000 +0100 @@ -1,6 +1,6 @@ { "name": "@rumdl/cli-linux-arm64-musl", - "version": "0.1.57", + "version": "0.1.58", "description": "rumdl binary for Linux ARM64 (musl/Alpine)", "license": "MIT", "repository": { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/npm/cli-linux-x64/package.json new/rumdl-0.1.58/npm/cli-linux-x64/package.json --- old/rumdl-0.1.57/npm/cli-linux-x64/package.json 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/npm/cli-linux-x64/package.json 2026-03-22 20:03:22.000000000 +0100 @@ -1,6 +1,6 @@ { "name": "@rumdl/cli-linux-x64", - "version": "0.1.57", + "version": "0.1.58", "description": "rumdl binary for Linux x64 (glibc)", "license": "MIT", "repository": { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/npm/cli-linux-x64-musl/package.json new/rumdl-0.1.58/npm/cli-linux-x64-musl/package.json --- old/rumdl-0.1.57/npm/cli-linux-x64-musl/package.json 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/npm/cli-linux-x64-musl/package.json 2026-03-22 20:03:22.000000000 +0100 @@ -1,6 +1,6 @@ { "name": "@rumdl/cli-linux-x64-musl", - "version": "0.1.57", + "version": "0.1.58", "description": "rumdl binary for Linux x64 (musl/Alpine)", "license": "MIT", "repository": { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/npm/cli-win32-x64/package.json new/rumdl-0.1.58/npm/cli-win32-x64/package.json --- old/rumdl-0.1.57/npm/cli-win32-x64/package.json 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/npm/cli-win32-x64/package.json 2026-03-22 20:03:22.000000000 +0100 @@ -1,6 +1,6 @@ { "name": "@rumdl/cli-win32-x64", - "version": "0.1.57", + "version": "0.1.58", "description": "rumdl binary for Windows x64", "license": "MIT", "repository": { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/npm/rumdl/package.json new/rumdl-0.1.58/npm/rumdl/package.json --- old/rumdl-0.1.57/npm/rumdl/package.json 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/npm/rumdl/package.json 2026-03-22 20:03:22.000000000 +0100 @@ -1,6 +1,6 @@ { "name": "rumdl", - "version": "0.1.57", + "version": "0.1.58", "description": "A fast Markdown linter written in Rust", "license": "MIT", "repository": { @@ -33,12 +33,12 @@ "node": ">=18.0.0" }, "optionalDependencies": { - "@rumdl/cli-darwin-x64": "0.1.57", - "@rumdl/cli-darwin-arm64": "0.1.57", - "@rumdl/cli-linux-x64": "0.1.57", - "@rumdl/cli-linux-arm64": "0.1.57", - "@rumdl/cli-linux-x64-musl": "0.1.57", - "@rumdl/cli-linux-arm64-musl": "0.1.57", - "@rumdl/cli-win32-x64": "0.1.57" + "@rumdl/cli-darwin-x64": "0.1.58", + "@rumdl/cli-darwin-arm64": "0.1.58", + "@rumdl/cli-linux-x64": "0.1.58", + "@rumdl/cli-linux-arm64": "0.1.58", + "@rumdl/cli-linux-x64-musl": "0.1.58", + "@rumdl/cli-linux-arm64-musl": "0.1.58", + "@rumdl/cli-win32-x64": "0.1.58" } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/src/lint_context/mod.rs new/rumdl-0.1.58/src/lint_context/mod.rs --- old/rumdl-0.1.57/src/lint_context/mod.rs 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/src/lint_context/mod.rs 2026-03-22 20:03:22.000000000 +0100 @@ -758,6 +758,7 @@ || line_info.in_front_matter || line_info.in_mkdocstrings || line_info.in_html_comment + || line_info.in_mdx_comment || line_info.in_esm_block { continue; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/src/rules/md010_no_hard_tabs.rs new/rumdl-0.1.58/src/rules/md010_no_hard_tabs.rs --- old/rumdl-0.1.57/src/rules/md010_no_hard_tabs.rs 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/src/rules/md010_no_hard_tabs.rs 2026-03-22 20:03:22.000000000 +0100 @@ -148,6 +148,7 @@ // Skip HTML comments, HTML blocks, PyMdown blocks, mkdocstrings, ESM blocks if ctx.line_info(line_num + 1).is_some_and(|info| { info.in_html_comment + || info.in_mdx_comment || info.in_html_block || info.in_pymdown_block || info.in_mkdocstrings @@ -241,6 +242,7 @@ let should_skip = fenced_lines[i] || ctx.line_info(i + 1).is_some_and(|info| { info.in_html_comment + || info.in_mdx_comment || info.in_html_block || info.in_pymdown_block || info.in_mkdocstrings diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/src/rules/md011_no_reversed_links.rs new/rumdl-0.1.58/src/rules/md011_no_reversed_links.rs --- old/rumdl-0.1.57/src/rules/md011_no_reversed_links.rs 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/src/rules/md011_no_reversed_links.rs 2026-03-22 20:03:22.000000000 +0100 @@ -169,6 +169,7 @@ // Skip if in code block, inline code, HTML comments, math contexts, or Jinja templates if ctx.is_in_code_block_or_span(match_byte_pos) || ctx.is_in_html_comment(match_byte_pos) + || ctx.is_in_mdx_comment(match_byte_pos) || is_in_math_context(ctx, match_byte_pos) || ctx.is_in_jinja_range(match_byte_pos) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/src/rules/md018_no_missing_space_atx.rs new/rumdl-0.1.58/src/rules/md018_no_missing_space_atx.rs --- old/rumdl-0.1.57/src/rules/md018_no_missing_space_atx.rs 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/src/rules/md018_no_missing_space_atx.rs 2026-03-22 20:03:22.000000000 +0100 @@ -188,7 +188,11 @@ // Check all lines that have ATX headings from cached info for (line_num, line_info) in ctx.lines.iter().enumerate() { // Skip lines inside HTML blocks, HTML comments, or PyMdown blocks - if line_info.in_html_block || line_info.in_html_comment || line_info.in_pymdown_block { + if line_info.in_html_block + || line_info.in_html_comment + || line_info.in_mdx_comment + || line_info.in_pymdown_block + { continue; } @@ -262,6 +266,7 @@ } else if !line_info.in_code_block && !line_info.in_front_matter && !line_info.in_html_comment + && !line_info.in_mdx_comment && !line_info.is_blank { // Check for malformed headings that weren't detected as proper headings @@ -352,6 +357,7 @@ } else if !line_info.in_code_block && !line_info.in_front_matter && !line_info.in_html_comment + && !line_info.in_mdx_comment && !line_info.is_blank { // Fix malformed headings diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/src/rules/md022_blanks_around_headings.rs new/rumdl-0.1.58/src/rules/md022_blanks_around_headings.rs --- old/rumdl-0.1.57/src/rules/md022_blanks_around_headings.rs 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/src/rules/md022_blanks_around_headings.rs 2026-03-22 20:03:22.000000000 +0100 @@ -130,7 +130,7 @@ } else { // HTML comments and blank lines are "transparent" - they don't count as content // that would prevent a heading from being "at document start" - if !line.is_blank && !line.in_html_comment { + if !line.is_blank && !line.in_html_comment && !line.in_mdx_comment { let trimmed = line.content(ctx.content).trim(); // Check for single-line HTML comments too if trimmed.starts_with("<!--") && trimmed.ends_with("-->") { @@ -355,7 +355,7 @@ } else { // HTML comments and blank lines are "transparent" - they don't count as content // that would prevent a heading from being "at document start" - if !line.is_blank && !line.in_html_comment { + if !line.is_blank && !line.in_html_comment && !line.in_mdx_comment { let trimmed = line.content(ctx.content).trim(); // Check for single-line HTML comments too if trimmed.starts_with("<!--") && trimmed.ends_with("-->") { @@ -421,7 +421,9 @@ let trimmed = line_content.trim(); if ctx.lines[j].is_blank { blank_lines_above += 1; - } else if ctx.lines[j].in_html_comment || (trimmed.starts_with("<!--") && trimmed.ends_with("-->")) + } else if ctx.lines[j].in_html_comment + || ctx.lines[j].in_mdx_comment + || (trimmed.starts_with("<!--") && trimmed.ends_with("-->")) { // Skip HTML comments - they are transparent for blank line counting continue; @@ -481,6 +483,7 @@ if check_line.is_blank { next_non_blank_idx += 1; } else if check_line.in_html_comment + || check_line.in_mdx_comment || (check_trimmed.starts_with("<!--") && check_trimmed.ends_with("-->")) { // Skip HTML comments - they are transparent for blank line counting diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/src/rules/md028_no_blanks_blockquote.rs new/rumdl-0.1.58/src/rules/md028_no_blanks_blockquote.rs --- old/rumdl-0.1.57/src/rules/md028_no_blanks_blockquote.rs 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/src/rules/md028_no_blanks_blockquote.rs 2026-03-22 20:03:22.000000000 +0100 @@ -69,7 +69,7 @@ #[inline] fn is_in_skip_context(line_infos: &[LineInfo], idx: usize) -> bool { if let Some(li) = line_infos.get(idx) { - li.in_html_comment || li.in_code_block || li.in_html_block || li.in_front_matter + li.in_html_comment || li.in_mdx_comment || li.in_code_block || li.in_html_block || li.in_front_matter } else { false } @@ -416,7 +416,8 @@ // Skip lines in non-markdown content contexts if line_idx < ctx.lines.len() { let li = &ctx.lines[line_idx]; - if li.in_code_block || li.in_html_comment || li.in_html_block || li.in_front_matter { + if li.in_code_block || li.in_html_comment || li.in_mdx_comment || li.in_html_block || li.in_front_matter + { continue; } } @@ -478,7 +479,8 @@ // Skip lines in non-markdown content contexts if line_idx < ctx.lines.len() { let li = &ctx.lines[line_idx]; - if li.in_code_block || li.in_html_comment || li.in_html_block || li.in_front_matter { + if li.in_code_block || li.in_html_comment || li.in_mdx_comment || li.in_html_block || li.in_front_matter + { result.push(line.to_string()); continue; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/src/rules/md030_list_marker_space.rs new/rumdl-0.1.58/src/rules/md030_list_marker_space.rs --- old/rumdl-0.1.57/src/rules/md030_list_marker_space.rs 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/src/rules/md030_list_marker_space.rs 2026-03-22 20:03:22.000000000 +0100 @@ -160,6 +160,7 @@ && (line_info.in_code_block || line_info.in_front_matter || line_info.in_html_comment + || line_info.in_mdx_comment || line_info.in_math_block || line_info.in_pymdown_block || line_info.in_mkdocs_html_markdown) @@ -245,7 +246,10 @@ // Skip lines in code blocks, front matter, or HTML comments if let Some(line_info) = ctx.lines.get(line_idx) - && (line_info.in_code_block || line_info.in_front_matter || line_info.in_html_comment) + && (line_info.in_code_block + || line_info.in_front_matter + || line_info.in_html_comment + || line_info.in_mdx_comment) { result_lines.push(line.to_string()); continue; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/src/rules/md032_blanks_around_lists.rs new/rumdl-0.1.58/src/rules/md032_blanks_around_lists.rs --- old/rumdl-0.1.57/src/rules/md032_blanks_around_lists.rs 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/src/rules/md032_blanks_around_lists.rs 2026-03-22 20:03:22.000000000 +0100 @@ -174,7 +174,7 @@ fn should_apply_lazy_fix(ctx: &crate::lint_context::LintContext, line_num: usize) -> bool { ctx.lines .get(line_num.saturating_sub(1)) - .map(|li| !li.in_code_block && !li.in_front_matter && !li.in_html_comment) + .map(|li| !li.in_code_block && !li.in_front_matter && !li.in_html_comment && !li.in_mdx_comment) .unwrap_or(false) } @@ -251,8 +251,8 @@ for line_num in (1..before_line).rev() { let idx = line_num - 1; if let Some(info) = ctx.lines.get(idx) { - // Skip HTML comment lines - they're transparent - if info.in_html_comment { + // Skip HTML/MDX comment lines - they're transparent + if info.in_html_comment || info.in_mdx_comment { continue; } // Skip Quarto div markers in Quarto flavor - they're transparent @@ -281,8 +281,8 @@ for line_num in (after_line + 1)..=num_lines { let idx = line_num - 1; if let Some(info) = ctx.lines.get(idx) { - // Skip HTML comment lines - they're transparent - if info.in_html_comment { + // Skip HTML/MDX comment lines - they're transparent + if info.in_html_comment || info.in_mdx_comment { continue; } // Skip Quarto div markers in Quarto flavor - they're transparent @@ -483,8 +483,11 @@ // Filter out lists entirely inside HTML comments blocks.retain(|(start, end, _)| { // Check if ALL lines of this block are inside HTML comments - let all_in_comment = - (*start..=*end).all(|line_num| ctx.lines.get(line_num - 1).is_some_and(|info| info.in_html_comment)); + let all_in_comment = (*start..=*end).all(|line_num| { + ctx.lines + .get(line_num - 1) + .is_some_and(|info| info.in_html_comment || info.in_mdx_comment) + }); !all_in_comment }); @@ -519,6 +522,7 @@ info.in_code_block || info.in_front_matter || info.in_html_comment + || info.in_mdx_comment || info.in_html_block || info.in_jsx_block }) { @@ -614,8 +618,11 @@ } for &(start_line, end_line, ref prefix) in list_blocks { - // Skip lists that start inside HTML comments - if ctx.line_info(start_line).is_some_and(|info| info.in_html_comment) { + // Skip lists that start inside HTML/MDX comments + if ctx + .line_info(start_line) + .is_some_and(|info| info.in_html_comment || info.in_mdx_comment) + { continue; } @@ -881,8 +888,11 @@ continue; } - // Skip lists that start inside HTML comments - if ctx.line_info(start_line).is_some_and(|info| info.in_html_comment) { + // Skip lists that start inside HTML/MDX comments + if ctx + .line_info(start_line) + .is_some_and(|info| info.in_html_comment || info.in_mdx_comment) + { continue; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/src/rules/md033_no_inline_html.rs new/rumdl-0.1.58/src/rules/md033_no_inline_html.rs --- old/rumdl-0.1.57/src/rules/md033_no_inline_html.rs 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/src/rules/md033_no_inline_html.rs 2026-03-22 20:03:22.000000000 +0100 @@ -1050,7 +1050,7 @@ } // Skip HTML tags inside HTML comments - if ctx.is_in_html_comment(tag_byte_start) { + if ctx.is_in_html_comment(tag_byte_start) || ctx.is_in_mdx_comment(tag_byte_start) { continue; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/src/rules/md034_no_bare_urls.rs new/rumdl-0.1.58/src/rules/md034_no_bare_urls.rs --- old/rumdl-0.1.57/src/rules/md034_no_bare_urls.rs 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/src/rules/md034_no_bare_urls.rs 2026-03-22 20:03:22.000000000 +0100 @@ -313,7 +313,7 @@ } // Check if we're inside an HTML comment - if ctx.is_in_html_comment(absolute_pos) { + if ctx.is_in_html_comment(absolute_pos) || ctx.is_in_mdx_comment(absolute_pos) { continue; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/src/rules/md036_no_emphasis_only_first.rs new/rumdl-0.1.58/src/rules/md036_no_emphasis_only_first.rs --- old/rumdl-0.1.57/src/rules/md036_no_emphasis_only_first.rs 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/src/rules/md036_no_emphasis_only_first.rs 2026-03-22 20:03:22.000000000 +0100 @@ -140,7 +140,11 @@ if LIST_MARKER.is_match(line) || BLOCKQUOTE_MARKER.is_match(line) || ctx.line_info(line_num + 1).is_some_and(|info| { - info.in_code_block || info.in_html_comment || info.in_pymdown_block || info.in_mkdocstrings + info.in_code_block + || info.in_html_comment + || info.in_mdx_comment + || info.in_pymdown_block + || info.in_mkdocstrings }) { return None; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/src/rules/md037_spaces_around_emphasis.rs new/rumdl-0.1.58/src/rules/md037_spaces_around_emphasis.rs --- old/rumdl-0.1.57/src/rules/md037_spaces_around_emphasis.rs 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/src/rules/md037_spaces_around_emphasis.rs 2026-03-22 20:03:22.000000000 +0100 @@ -1032,4 +1032,49 @@ ); assert_eq!(result4[0].column, 6); } + + #[test] + fn test_spaced_bold_metadata_pattern_detected() { + let rule = MD037NoSpaceInEmphasis; + + // Broken bold metadata — leading space after opening ** + let content = "# Test\n\n** Explicit Import**: Convert markdownlint configs to rumdl format:"; + let ctx = LintContext::new(content, crate::config::MarkdownFlavor::Standard, None); + let result = rule.check(&ctx).unwrap(); + assert_eq!( + result.len(), + 1, + "Should flag '** Explicit Import**' as spaced emphasis. Got: {result:?}" + ); + assert_eq!(result[0].line, 3); + + // Trailing space before closing ** + let content2 = "# Test\n\n**trailing only **: some text"; + let ctx2 = LintContext::new(content2, crate::config::MarkdownFlavor::Standard, None); + let result2 = rule.check(&ctx2).unwrap(); + assert_eq!( + result2.len(), + 1, + "Should flag '**trailing only **' as spaced emphasis. Got: {result2:?}" + ); + + // Both leading and trailing spaces with colon + let content3 = "# Test\n\n** both spaces **: some text"; + let ctx3 = LintContext::new(content3, crate::config::MarkdownFlavor::Standard, None); + let result3 = rule.check(&ctx3).unwrap(); + assert_eq!( + result3.len(), + 1, + "Should flag '** both spaces **' as spaced emphasis. Got: {result3:?}" + ); + + // Valid bold metadata — should NOT be flagged + let content4 = "# Test\n\n**Key**: value"; + let ctx4 = LintContext::new(content4, crate::config::MarkdownFlavor::Standard, None); + let result4 = rule.check(&ctx4).unwrap(); + assert!( + result4.is_empty(), + "Should not flag valid bold metadata '**Key**: value'. Got: {result4:?}" + ); + } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/src/rules/md046_code_block_style.rs new/rumdl-0.1.58/src/rules/md046_code_block_style.rs --- old/rumdl-0.1.57/src/rules/md046_code_block_style.rs 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/src/rules/md046_code_block_style.rs 2026-03-22 20:03:22.000000000 +0100 @@ -555,7 +555,11 @@ if !has_closing_fence { // Skip if inside HTML comment - if ctx.lines.get(opening_line_idx).is_some_and(|info| info.in_html_comment) { + if ctx + .lines + .get(opening_line_idx) + .is_some_and(|info| info.in_html_comment || info.in_mdx_comment) + { continue; } @@ -720,7 +724,11 @@ if target_style == CodeBlockStyle::Indented { let line = lines.get(start_line_idx).unwrap_or(&""); - if ctx.lines.get(start_line_idx).is_some_and(|info| info.in_html_comment) { + if ctx + .lines + .get(start_line_idx) + .is_some_and(|info| info.in_html_comment || info.in_mdx_comment) + { continue; } @@ -744,6 +752,7 @@ // Skip blocks in contexts that aren't real indented code blocks if ctx.lines.get(start_line_idx).is_some_and(|info| { info.in_html_comment + || info.in_mdx_comment || info.in_html_block || info.in_jsx_block || info.in_mkdocstrings diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/src/rules/md052_reference_links_images.rs new/rumdl-0.1.58/src/rules/md052_reference_links_images.rs --- old/rumdl-0.1.57/src/rules/md052_reference_links_images.rs 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/src/rules/md052_reference_links_images.rs 2026-03-22 20:03:22.000000000 +0100 @@ -340,7 +340,7 @@ } // Skip links inside HTML comments (uses pre-computed ranges) - if ctx.is_in_html_comment(link.byte_offset) { + if ctx.is_in_html_comment(link.byte_offset) || ctx.is_in_mdx_comment(link.byte_offset) { continue; } @@ -447,7 +447,7 @@ } // Skip images inside HTML comments (uses pre-computed ranges) - if ctx.is_in_html_comment(image.byte_offset) { + if ctx.is_in_html_comment(image.byte_offset) || ctx.is_in_mdx_comment(image.byte_offset) { continue; } @@ -727,7 +727,7 @@ } // Skip if inside HTML comment (uses pre-computed ranges) - if ctx.is_in_html_comment(byte_pos) { + if ctx.is_in_html_comment(byte_pos) || ctx.is_in_mdx_comment(byte_pos) { continue; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/src/rules/md066_footnote_validation.rs new/rumdl-0.1.58/src/rules/md066_footnote_validation.rs --- old/rumdl-0.1.57/src/rules/md066_footnote_validation.rs 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/src/rules/md066_footnote_validation.rs 2026-03-22 20:03:22.000000000 +0100 @@ -141,7 +141,11 @@ for footnote_ref in &ctx.footnote_refs { // Skip if in code block, frontmatter, HTML comment, or HTML block if ctx.line_info(footnote_ref.line).is_some_and(|info| { - info.in_code_block || info.in_front_matter || info.in_html_comment || info.in_html_block + info.in_code_block + || info.in_front_matter + || info.in_html_comment + || info.in_mdx_comment + || info.in_html_block }) { continue; } @@ -157,6 +161,7 @@ if line_info.in_code_block || line_info.in_front_matter || line_info.in_html_comment + || line_info.in_mdx_comment || line_info.in_html_block { continue; @@ -208,6 +213,7 @@ if line_info.in_code_block || line_info.in_front_matter || line_info.in_html_comment + || line_info.in_mdx_comment || line_info.in_html_block { continue; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/src/rules/md067_footnote_definition_order.rs new/rumdl-0.1.58/src/rules/md067_footnote_definition_order.rs --- old/rumdl-0.1.57/src/rules/md067_footnote_definition_order.rs 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/src/rules/md067_footnote_definition_order.rs 2026-03-22 20:03:22.000000000 +0100 @@ -74,6 +74,7 @@ if line_info.in_code_block || line_info.in_front_matter || line_info.in_html_comment + || line_info.in_mdx_comment || line_info.in_html_block { continue; @@ -115,6 +116,7 @@ if line_info.in_code_block || line_info.in_front_matter || line_info.in_html_comment + || line_info.in_mdx_comment || line_info.in_html_block { continue; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/src/rules/md068_empty_footnote_definition.rs new/rumdl-0.1.58/src/rules/md068_empty_footnote_definition.rs --- old/rumdl-0.1.57/src/rules/md068_empty_footnote_definition.rs 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/src/rules/md068_empty_footnote_definition.rs 2026-03-22 20:03:22.000000000 +0100 @@ -46,7 +46,11 @@ for next_idx in (def_line_idx + 1)..ctx.lines.len() { if let Some(next_line_info) = ctx.lines.get(next_idx) { // Skip frontmatter, HTML comments, and HTML blocks - if next_line_info.in_front_matter || next_line_info.in_html_comment || next_line_info.in_html_block { + if next_line_info.in_front_matter + || next_line_info.in_html_comment + || next_line_info.in_mdx_comment + || next_line_info.in_html_block + { continue; } @@ -116,6 +120,7 @@ if line_info.in_code_block || line_info.in_front_matter || line_info.in_html_comment + || line_info.in_mdx_comment || line_info.in_html_block { continue; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/src/rules/md069_no_duplicate_list_markers.rs new/rumdl-0.1.58/src/rules/md069_no_duplicate_list_markers.rs --- old/rumdl-0.1.57/src/rules/md069_no_duplicate_list_markers.rs 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/src/rules/md069_no_duplicate_list_markers.rs 2026-03-22 20:03:22.000000000 +0100 @@ -141,7 +141,11 @@ // Check if this line should be skipped (structural contexts) let should_skip = ctx.lines.get(i).is_some_and(|info| { - info.in_front_matter || info.in_code_block || info.in_html_block || info.in_html_comment + info.in_front_matter + || info.in_code_block + || info.in_html_block + || info.in_html_comment + || info.in_mdx_comment }); // Also check if rule is disabled via inline config comments diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/src/rules/md070_nested_code_fence.rs new/rumdl-0.1.58/src/rules/md070_nested_code_fence.rs --- old/rumdl-0.1.57/src/rules/md070_nested_code_fence.rs 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/src/rules/md070_nested_code_fence.rs 2026-03-22 20:03:22.000000000 +0100 @@ -252,7 +252,10 @@ while i < lines.len() { // Skip lines in contexts that shouldn't be processed if let Some(line_info) = ctx.lines.get(i) - && (line_info.in_front_matter || line_info.in_html_comment || line_info.in_html_block) + && (line_info.in_front_matter + || line_info.in_html_comment + || line_info.in_mdx_comment + || line_info.in_html_block) { i += 1; continue; @@ -393,7 +396,10 @@ // Skip lines in contexts that shouldn't be processed if let Some(line_info) = ctx.lines.get(i) - && (line_info.in_front_matter || line_info.in_html_comment || line_info.in_html_block) + && (line_info.in_front_matter + || line_info.in_html_comment + || line_info.in_mdx_comment + || line_info.in_html_block) { result.push_str(lines[i]); result.push('\n'); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/src/rules/md075_orphaned_table_rows.rs new/rumdl-0.1.58/src/rules/md075_orphaned_table_rows.rs --- old/rumdl-0.1.57/src/rules/md075_orphaned_table_rows.rs 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/src/rules/md075_orphaned_table_rows.rs 2026-03-22 20:03:22.000000000 +0100 @@ -55,6 +55,7 @@ || line_info.in_code_block || line_info.in_html_block || line_info.in_html_comment + || line_info.in_mdx_comment || line_info.in_esm_block || line_info.in_mkdocstrings } else { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/src/rules/md076_list_item_spacing.rs new/rumdl-0.1.58/src/rules/md076_list_item_spacing.rs --- old/rumdl-0.1.57/src/rules/md076_list_item_spacing.rs 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/src/rules/md076_list_item_spacing.rs 2026-03-22 20:03:22.000000000 +0100 @@ -154,6 +154,7 @@ if info.in_code_block || info.in_html_block || info.in_html_comment + || info.in_mdx_comment || info.in_front_matter || info.in_math_block || info.blockquote.is_some() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/src/rules/md077_list_continuation_indent.rs new/rumdl-0.1.58/src/rules/md077_list_continuation_indent.rs --- old/rumdl-0.1.57/src/rules/md077_list_continuation_indent.rs 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/src/rules/md077_list_continuation_indent.rs 2026-03-22 20:03:22.000000000 +0100 @@ -54,6 +54,7 @@ info.in_front_matter || info.in_html_block || info.in_html_comment + || info.in_mdx_comment || info.in_mkdocstrings || info.in_esm_block || info.in_math_block diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rumdl-0.1.57/src/utils/emphasis_utils.rs new/rumdl-0.1.58/src/utils/emphasis_utils.rs --- old/rumdl-0.1.57/src/utils/emphasis_utils.rs 2026-03-20 13:26:48.000000000 +0100 +++ new/rumdl-0.1.58/src/utils/emphasis_utils.rs 2026-03-22 20:03:22.000000000 +0100 @@ -12,7 +12,8 @@ static LIST_MARKER: LazyLock<Regex> = LazyLock::new(|| Regex::new(r"^\s*[*+-]\s+").unwrap()); // Documentation style patterns -static DOC_METADATA_PATTERN: LazyLock<Regex> = LazyLock::new(|| Regex::new(r"^\s*\*?\s*\*\*[^*]+\*\*\s*:").unwrap()); +static DOC_METADATA_PATTERN: LazyLock<Regex> = + LazyLock::new(|| Regex::new(r"^\s*\*?\s*\*\*(?:[^*\s][^*]*[^*\s]|[^*\s])\*\*\s*:").unwrap()); // Bold text pattern (for preserving bold text in documentation) - only match valid bold without spaces static BOLD_TEXT_PATTERN: LazyLock<Regex> = @@ -427,4 +428,22 @@ // Only opening brace without closing should not match assert!(!has_doc_patterns("{* incomplete")); } + + #[test] + fn test_doc_pattern_rejects_spaced_bold_metadata() { + // Valid bold metadata — should be treated as doc pattern (skip MD037) + assert!(has_doc_patterns("**Key**: value")); + assert!(has_doc_patterns("**Name**: another value")); + assert!(has_doc_patterns("**X**: single char")); + assert!(has_doc_patterns("* **Key**: list item with bold key")); + + // Broken bold with internal spaces — should NOT be treated as doc pattern + // so MD037 can flag the spacing issue + assert!(!has_doc_patterns("** Key**: value")); + assert!(!has_doc_patterns("**Key **: value")); + assert!(!has_doc_patterns("** Key **: value")); + assert!(!has_doc_patterns( + "** Explicit Import**: Convert markdownlint configs to rumdl format:" + )); + } } ++++++ rumdl.obsinfo ++++++ --- /var/tmp/diff_new_pack.UZHV0F/_old 2026-03-23 17:16:09.960656079 +0100 +++ /var/tmp/diff_new_pack.UZHV0F/_new 2026-03-23 17:16:09.964656245 +0100 @@ -1,5 +1,5 @@ name: rumdl -version: 0.1.57 -mtime: 1774009608 -commit: b52183a24937296947580d86711ecde803ba6e83 +version: 0.1.58 +mtime: 1774206202 +commit: 9e2fcf2a8bc963f04b8484f0e23c671d71fba5e6 ++++++ vendor.tar.zst ++++++ /work/SRC/openSUSE:Factory/rumdl/vendor.tar.zst /work/SRC/openSUSE:Factory/.rumdl.new.8177/vendor.tar.zst differ: char 7, line 1
