File rumdl.changes of Package rumdl
-------------------------------------------------------------------
Sun Nov 09 09:42:09 UTC 2025 - Johannes Kastl <opensuse_buildservice@ojkastl.de>
- Update to version 0.0.173:
* Added
- MD060: Table format rule with Prettier-style auto-compact
- New rule enforcing consistent table column alignment
(aligned/compact/tight styles)
- Auto-compact threshold: Tables exceeding max-width
automatically use compact formatting
- Configurable via max-width setting (0 = inherit from
MD013's line-length)
- Generates informative warnings showing actual width vs
threshold
- Disabled by default (opt-in feature)
- Handles edge cases: zero-width characters, escaped pipes,
HTML comments
- Respects column alignments (left/center/right) in aligned
mode
- MD043: Wildcard pattern support for heading structures
- New wildcard patterns for flexible heading structure
validation
- Allows * placeholders in heading text for dynamic content
- Expert-level edge case handling for complex heading
hierarchies
- MD044: HTML elements configuration option
- New html-elements configuration to customize proper name
handling
- Allows project-specific proper name enforcement
- RUMDL_CACHE_DIR environment variable
- Override default cache directory location via environment
variable
- Useful for CI/CD pipelines and custom cache management
* Fixed
- Definition list support in reflow mode (#136)
- Definition lists (Extended Markdown syntax) are now
correctly preserved during text reflow
- Prevents incorrect joining of terms with definitions (e.g.,
Term\n: Definition no longer becomes Term : Definition)
- Supports PHP Markdown Extra, Kramdown, Pandoc, Hugo, and
other extended Markdown flavors
- Works with all reflow modes including sentence-per-line
- MD054: Error message alignment
- Corrected error messages to match implementation behavior
- Documentation now accurately reflects link/image style
validation
- MD041: Front matter title config schema
- Added missing front_matter_title options to configuration
schema
- Fixes config validation errors when using front matter
title feature
- LSP: pyproject.toml validation
- LSP now verifies [tool.rumdl] section exists before using
pyproject.toml
- Prevents errors when pyproject.toml exists but doesn't
contain rumdl config
- CLI: Rule registration
- Fixed MD057, MD059, MD060 rules not being registered in CLI
- All rules now properly available for use
* Changed
- Documentation: TOML format migration
- Converted all configuration examples from YAML to TOML
- Reflects modern configuration best practices
- Improved clarity for MD013 reflow requirement in README
-------------------------------------------------------------------
Sat Nov 08 07:39:08 UTC 2025 - Johannes Kastl <opensuse_buildservice@ojkastl.de>
- Update to version 0.0.172:
* Added
- MD059: Link text style rule achieving 100% markdownlint
compatibility
- New rule for enforcing consistent link text formatting
- Matches markdownlint column reporting behavior
- Completes full parity with markdownlint rule set
- pulldown-cmark BrokenLink callback integration
- Enhanced link reference validation using parser callback
- Better detection of undefined reference-style links
- Improved accuracy for MD052 and related rules
* Fixed
- Critical: UTF-8 character boundary panic in ordered list
detection
- Fixed crash when processing markdown with multi-byte UTF-8
characters (Japanese, Chinese, Korean, etc.)
- Root cause: Character index was incorrectly used as byte
index for string slicing
- Now converts character positions to byte positions using
char_indices().nth()
- Discovered during validation on javascript-algorithms
repository
- Affected any non-English documentation with multi-byte
UTF-8 near numbered lists
- pulldown-cmark escaped bracket workaround
- Workaround for pulldown-cmark bug where \[ and \! are
incorrectly parsed as links/images
- Violates CommonMark spec Example 14 for backslash escapes
- Filters 90% of false positives with byte-level escape
pattern detection
- Correctly handles: \[escaped\], \
- Known limitation: \[text][ref] reference-style links still
produce 1 false positive
- Bug report filed for upstream fix
- MD042: False positives on autolinks
- Fixed empty link detection incorrectly flagging autolinks
like <https://example.com>
- Autolinks are now correctly excluded from empty link checks
- MD033: HTML tags inside HTML comments
- Fixed false positives when HTML tags appear inside HTML
comments
- Centralized HTML comment detection for consistent behavior
across rules
- HTML comments now properly ignored: <!-- <div>not
flagged</div> -->
- MD051: GitHub ASCII normalization
- Implemented proper GitHub anchor generation with ASCII
normalization
- Handles edge cases like backtick-wrapped angle brackets:
`<FILE>` → #file
- Verified against actual GitHub.com rendering behavior
- MD052: Complete Jinja template support
- Added Jinja template range checks to regex-based shortcut
reference detection
- Fixes false positives on [reference] patterns in Jinja
templates
- Completes Jinja support across all link-related rules
(MD039, MD042, MD051, MD052)
- MD039/MD042/MD051: Jinja template checks
- Added Jinja template range checks to prevent false
positives
- All rules using ctx.links/ctx.images now skip Jinja
template markers
- Validated on real-world Jinja templates
(pyo3/.towncrier.template.md)
- Link/image text extraction: Whitespace preservation
- Fixed loss of leading/trailing whitespace in link text and
image alt text
- pulldown-cmark strips newlines from Text events, causing
whitespace loss
- Now extracts directly from source bytes between brackets
for perfect fidelity
- Verified: [\nNewline\n](url) → text correctly preserved
with newlines
* Changed
- BREAKING: Removed MD002 (first-heading-h1) and MD006
(ul-start-left) rules
- Removed for 100% markdownlint compatibility
- markdownlint deprecated these rules in favor of more
specific alternatives
- Migration: Remove MD002 and MD006 from your .rumdl.toml
config if present
- Refactoring: Modernized codebase with Rust 1.91.0 features
- Migrated once_cell::sync::Lazy to std::sync::LazyLock
(stable in Rust 1.80)
- Improved error handling by replacing unwrap()/expect() with
proper error propagation
- Replaced defensive fallbacks with unreachable!() where
appropriate
- Eliminated unreachable panics and improved code robustness
- Removed '_fix' boolean redundancy and cleaned up dead code
- Refactoring: HTML comment detection centralized
- MD033 now uses centralized html_utils::find_html_comments()
for consistency
- Eliminates duplicate HTML comment parsing logic
* Performance
- 12-15% speed improvement from pulldown-cmark migration
- Migrated link/image parsing from regex-based approach to
pulldown-cmark parser
- Benchmark results: 12-15% faster on representative markdown
files
- More accurate CommonMark compliance
- Better handling of edge cases and complex markdown
structures
- Update to version 0.0.171:
* Added
- MD060: Table column formatting with markdownlint
compatibility
- Full table formatting rule with auto-fix capability
- Four formatting styles: aligned, compact, tight, and any
(default)
- any style detects existing formatting and enforces
consistency
- Supports CJK characters and emoji
- Handles alignment indicators (:---, :---:, ---:)
- Skips ZWJ emoji sequences to prevent corruption
- Configuration: MD060.enabled = false (opt-in), MD060.style
= "any"
* Fixed
- MD053: CommonMark compliance for list continuations
- Fixed false positives when backtick references appear in
list continuation paragraphs
- Enhanced ordered list marker detection for multi-digit
lists (10., 123.)
- Implemented column-based indentation model per CommonMark
spec
- Distinguishes list continuation paragraphs from
code-in-lists
- Validated against 1,562 markdown files with 0 false
positives
- LSP: Global config fallback
- Fixed global config loading when no project-specific config
exists
- Now properly falls back to ~/.config/rumdl/.rumdl.toml
- Added test coverage for fallback behavior
- LSP: Fixed test expectations for camelCase serialization
- LSP initialization options use camelCase per LSP
specification
- Corrected test assertions to match actual camelCase
behavior
- Fix mode: Type-safe exit code semantics
- Added FixMode enum for clear fix/check mode distinction
- Improved code maintainability and type safety
* Changed
- BREAKING: MD013 tables default changed to false
- Previously defaulted to true, causing conflicts with table
formatting rules
- Now defaults to false for better user experience
- Migration: If you rely on MD013 checking table line
lengths, add to .rumdl.toml:
[MD013]
tables = true
- This prevents false positives when using MD060 or other
table formatting tools
- Update to version 0.0.170:
* Added
- Include non-standard file extensions (#127)
- New --include CLI flag to check files with non-standard
extensions
- Example: rumdl check --include "*.txt" --include "*.text"
- Useful for documentation files with custom extensions
- Respects .rumdl.toml configuration: include = ["*.txt",
"*.text"]
* Fixed
- MD055: Preserve user formatting when fixing pipe placement
(#129)
- Changed from full table reconstruction to surgical pipe
addition/removal
- User's intentional spacing and alignment are now preserved
- Follows Unix philosophy: do one thing (fix pipes) well
- Example: | Cell 1 | Cell 2 → | Cell 1 | Cell 2 |
(spacing preserved)
- MD053: Allow backtick references with :: and spaces (#128)
- Fixed false positives for Rust-style references like
[`std::vec::Vec`]
- Now correctly handles references containing :: within
backticks
- Improves accuracy for Rust documentation and technical
content
* Documentation
- MD028: Clarified rule behavior for consecutive blockquotes
(#126)
- Updated documentation to accurately reflect that MD028
flags consecutive blockquote starts
- Not a bug - working as designed per markdownlint
specification
- Prevents confusion about expected behavior
* Changed
- Rust toolchain updated to 1.91.0 (from 1.89.0)
- Ensures compatibility with latest Rust features and
improvements
- Better performance and compilation times
- Update to version 0.0.169:
* Performance
* MASSIVE PERFORMANCE IMPROVEMENTS: This release delivers 7-53x
faster linting through systematic elimination of O(n²)
bottlenecks and algorithmic optimizations. rumdl is now 16-29x
faster than markdownlint-cli2 on real-world repositories.
- Fix catastrophic O(n²) bottleneck in FilteredLinesIter
- Eliminated content.lines().collect() from inside
Iterator::next() method
- Single-file optimization delivered 7,600x speedup for
affected rules
- MD011: 6.00s → 0.785ms (7,644x faster)
- MD012: 5.95s → 1.643ms (3,621x faster)
- Impact: Stress test (10k lines): 9,987ms → 187ms (53x
faster)
- Impact: Rust Book (478 files): 2,646ms → 269ms (9.8x
faster)
- Impact: PyO3 (76 files): 2,004ms → 262ms (7.6x faster)
- Pre-compute LintContext data structures to eliminate
redundant work
- LineIndex: Eliminated 46× content cloning across all rules
- Jinja template ranges: Pre-computed once instead of O(n×m)
scanning
- Table blocks: Computed once instead of 4× independent scans
per document
- HTML comment ranges: Pre-computed with 50-70x speedup
- Code block line mapping: Optimized with binary search
instead of linear scan
- Autodoc blocks (MkDocs): Pre-computed to avoid O(n²)
scaling
- Optimize link and image parsing with binary search
- Replaced linear search with binary search for code span
checks
- Faster link/image parsing across all reference-based rules
- Replace regex with byte-level parsing for better performance
- List detection: Manual byte scanning instead of regex
- Blockquote prefix: Byte-level parsing instead of regex
- Line info parsing: Eliminated redundant blockquote prefix
parsing
- Streaming parser architecture
- Replaced AST parsing with pulldown-cmark streaming for
lower memory overhead
- Better scalability for very large documents
- MD046 optimization
- Pre-compute list/tab contexts
- Use ctx.code_blocks instead of independent detection
* Benchmarks
* vs Previous Version (v0.0.168):
- Rust Book (478 files): 2,646ms → 269ms (9.8x faster)
- Stress Test (10,514 lines): 9,987ms → 187ms (53.4x faster)
- PyO3 (76 files): 2,004ms → 262ms (7.6x faster)
* vs markdownlint-cli2 (industry standard):
- Rust Book: 10.3s vs 0.35s (29.4x faster)
- PyO3: 4.4s vs 0.26s (16.9x faster)
* Current Performance:
- 0.7ms per file (Rust Book)
- 6.3x parallelization efficiency
- Zero O(n²) algorithmic bottlenecks remaining
* Added
- MDX and Quarto flavor support
- New flavors: MarkdownFlavor::MDX and MarkdownFlavor::Quarto
- JSX component handling: Skip linting inside JSX elements
- ESM import/export support: Ignore JavaScript import/export
statements
- Quarto code chunk support: Recognize {r}, {python} chunk
delimiters
- Essential for modern React-based documentation and data
science workflows
* Fixed
- MD011: Intelligent URL vs text detection in reversed links
- Smarter classification of link components as URL or text
- Reduces false positives in edge cases like
(Generic<T>)[link]
- Correctly handles (http://url)[text] vs (text)[#anchor]
- Improved heuristics for ambiguous single-word patterns
- MD013: Preserve HTML blocks in list items during reflow
- HTML blocks inside list items are now preserved during
auto-fix
- Prevents broken indentation and tag structure
- Better handling of complex nested content
* Changed
- Architecture improvements for pre-computation pattern
- LintContext now owns shared data structures
- Rules consume pre-computed data instead of duplicating work
- Consistent binary search APIs for range lookups
- Foundation for future optimizations
- Update to version 0.0.168:
* Added
- CLI: Support for Quarto (.qmd) and RMarkdown (.rmd/.Rmd)
files
- Added support for .qmd (Quarto), .rmd and .Rmd (RMarkdown)
file extensions
- Enables markdown linting for data science and scientific
documentation workflows
- Particularly useful for Jupyter-based publishing and
reproducible research documents
- LSP: will_save_wait_until for proper auto-fix on save
- Implemented LSP textDocument/willSaveWaitUntil capability
- Provides proper auto-fix on save support in compatible
editors
- More reliable than textDocument/didSave approach
- Ensures fixes are applied before file is actually saved to
disk
- MD033: LSP Quick Fix to remove HTML tags while keeping
content
- New code action removes HTML opening and closing tags while
preserving inner content
- Helps convert inline HTML to plain text when needed
- Available through editor Quick Fix menu (Ctrl+. or Cmd+.)
* Fixed
- MD013: Skip auto-fix for list items containing HTML tags
- Prevents broken auto-fix when HTML tags are present in list
items
- HTML structure (indentation, tag hierarchy) is now
preserved
- Errors are still reported but no destructive fix is applied
- Pragmatic solution until full HTML-aware reflow is
implemented
- Fixes issues where tags like </details> were split or
indentation was lost
- MD013: Fix incorrect sentence splitting after abbreviations
in sentence-per-line mode
- No longer incorrectly splits sentences after common
abbreviations (e.g., etc., i.e., Dr., Mr.)
- Improved sentence detection algorithm for better accuracy
- Prevents unwanted line breaks in the middle of sentences
- MD013: Prevent autolinks from being parsed as HTML tags
- Autolinks like <https://example.com> are no longer treated
as HTML
- Fixes false positives in HTML detection that could skip
auto-fix unnecessarily
- Properly distinguishes between markdown autolinks and
actual HTML tags
- MD013: Prevent content duplication in sentence-per-line
reflow
- Fixed bug where content could be duplicated during
paragraph reflow
- Ensures each sentence appears exactly once in reflowed
output
- Improves reliability of auto-fix in sentence-per-line mode
- MD013: Improve sentence-per-line error messages and
highlighting
- Better error messages that clearly indicate
sentence-per-line violations
- More accurate highlighting of problematic text
- Helps users understand what needs to be fixed
- MD013: Skip template directives at paragraph start in
sentence-per-line mode
- Template directives (like {{ variable }}) at start of
paragraphs no longer cause issues
- Prevents false positives in templated markdown files
- Improves compatibility with static site generators and
template engines
- MD013: Treat template directives as paragraph boundaries
- Template directives now properly separate paragraphs during
reflow
- Prevents template syntax from being joined with regular
content
- Better handling of mixed template and markdown content
- MD013: Join single-sentence paragraphs in sentence-per-line
mode
- Single-sentence paragraphs that span multiple lines are now
properly joined
- Fixes issues where short paragraphs were incorrectly
flagged
- Improves consistency of sentence-per-line formatting
- MD013: Handle multiple spaces and multi-line paragraphs in
sentence-per-line mode
- Better handling of paragraphs with inconsistent spacing
- Multi-line paragraphs are now correctly reflowed
- Fixes edge cases in whitespace handling
- MD052: Preserve backtick-wrapped patterns with dots in MkDocs
mode
- Backtick-wrapped references like `[foo.bar]` now preserve
dots in slugs
- Matches MkDocs behavior of treating code-wrapped text
literally
- Prevents false positives for code examples in documentation
- MD052: Support Pandoc citations and inline footnotes in
RMarkdown/Quarto
- Recognizes Pandoc citation syntax: [@citation], @citation,
[-@citation]
- Recognizes inline footnote syntax: ^[footnote text]
- No longer treats these as reference-style links
- Essential for academic and scientific writing in RMarkdown
and Quarto
- MD033: Only report opening HTML tags, not closing tags
- MD033 violations now only report the opening tag of an HTML
element
- Reduces noise in linting output (one violation per element
vs two)
- Closing tags like </div> are no longer separately reported
- Makes HTML-related warnings clearer and less redundant
- MD018: Skip CSS selectors and JS code inside HTML blocks
- CSS selectors like #slide-1 inside <style> tags no longer
trigger MD018
- JavaScript code inside <script> tags is properly ignored
- Prevents false positives for Quarto and RMarkdown files
with embedded HTML/CSS/JS
- Particularly important for interactive documents and custom
styling
- MD012: Enforce exactly 1 newline at EOF and clean LSP logging
- Files now must end with exactly one newline character (not
zero, not two)
- Aligns with POSIX standard and common editor behavior
- Improved LSP logging with less noise
- CI: Use cargo run instead of release binary in rumdl
pre-commit hook
- Pre-commit hooks now use cargo run for more reliable
execution
- Prevents issues with stale release binaries during
development
- Better integration with cargo workflow
- Schema: Allow root-level rule sections like [MD013] in config
validation
- Configuration schema now correctly allows [MD013] style
sections
- Fixes false validation errors for valid TOML config
- Better compatibility with common configuration patterns
* Changed
- Refactor: Detect HTML blocks before parsing headings
- Reordered LintContext initialization to detect HTML blocks
first
- Headings are no longer detected inside HTML blocks (like
<style> or <script>)
- Architectural improvement that prevents multiple false
positives
- Benefits MD018 and other heading-related rules
- More correct parsing aligned with markdown specifications
- Refactor: Use filtered_lines() for front-matter handling in
MD011 and MD012
- Improved front-matter handling using consistent
filtered_lines API
- Better code reuse and maintainability
- More reliable front-matter detection across rules
- Update to version 0.0.167:
* Added
- Configuration validation with fuzzy-match suggestions
- Comprehensive unknown key detection for .rumdl.toml and
pyproject.toml
- Intelligent "did you mean?" suggestions using Levenshtein
distance algorithm
- File path context in validation warnings for easy debugging
- Catches typos in global options, rule names, and rule
options
- Example: line-lenght → suggests line-length, reflw →
suggests reflow
- Zero-dependency implementation with configurable similarity
threshold
- Helps users catch configuration mistakes before they cause
confusion
- MD053: Support for community comment-style references
- Recognizes and ignores reference-style link syntax used as
comments
- Supports widely-used patterns: [//]: # (comment),
[comment]: #, [note]: #, [todo]: #, [fixme]: #, [hack]: #
- Any reference with just # as URL is treated as a comment
- While not in CommonMark/GFM specs, used across 23+ markdown
implementations
- Complements HTML comments with a less HTML-like syntax
option
- Improves compatibility with existing markdown practices
- MD013: line-length = 0 to disable all line length checks
- Setting line-length = 0 now completely disables MD013 rule
- Provides explicit way to turn off line length validation
entirely
- More intuitive than previous workarounds
- Useful when line length management is handled by other
tools or not desired
- MD051: mdbook template support
- Added detection and slug generation for mdbook templates
- Recognizes {{#template path/to/file.md}} syntax
- Properly generates GitHub-compatible slugs for
template-included headings
- Improves compatibility with mdbook documentation projects
- LSP: Manual "Reflow paragraph" code action for MD013 warnings
- New code action available for MD013 line length warnings
when auto-reflow is disabled
- Allows users to manually reflow specific paragraphs without
enabling global reflow in config
- Appears as "Reflow paragraph" in Quick Fix menu (not marked
as preferred, so won't trigger on save)
- Intelligently detects paragraph boundaries and reflows
entire paragraph, not just the flagged line
- Respects line length limit from warning message or defaults
to 80 characters
- Provides a way to try paragraph reflow before committing to
enabling it globally
- Gives users fine-grained control over which paragraphs to
reflow
* Fixed
- LSP: Preserve trailing newline in reflow action
- Manual reflow code action now correctly preserves trailing
newlines
- Prevents unwanted file modifications from reflow operations
- Maintains document structure integrity
- LSP: Improve logging and resolve auto-fix issues
- Enhanced LSP server logging for better debugging
- Resolved various auto-fix edge cases and reliability issues
- MD051: Correct GitHub slug generation for angle brackets
- Fixed incorrect slug generation for headings containing
angle brackets
- Now properly handles special characters in anchor
generation
- Improves accuracy of link validation for complex headings
* Changed
- MD033: Remove unhelpful message suffix
- Simplified warning messages for inline HTML detection
- Removed redundant information to reduce noise
- Cleaner, more focused error messages
- Code cleanup: Remove dead code
- Removed unused LinkImageStyle enum from MD054
- General refactoring to improve maintainability
- Fixed clippy warnings
* Documentation
- MD033: Document mdbook use case for semantic HTML
- Added documentation about using semantic HTML in mdbook
projects
- Clarifies when and why inline HTML might be intentionally
used
- Helps users understand legitimate use cases for HTML in
markdown
- Update to version 0.0.166:
* Added
- MD013: paragraphs field to control paragraph line length
checks (resolves #121)
- New boolean config field paragraphs (defaults to true)
allows disabling line length warnings for paragraph text
- Enables sentence-per-line formatting workflows without line
length validation noise
- Still checks headings, tables, code blocks, blockquotes,
and HTML when paragraphs: false
- Useful for semantic line breaks where sentence length is
determined by content, not arbitrary limits
- Example configuration:
- MD013: paragraphs: false # Don't warn about long
paragraphs code-blocks: true # Still check code blocks
tables: true # Still check tables reflow: true
reflow-mode: "sentence-per-line"
- Update to version 0.0.165:
* Fixed
- MD040: Always preserve indentation when adding language tags
(fixes #122)
- The MD040 rule was incorrectly removing indentation from
code blocks when adding language tags
- This broke list structure when code blocks were part of
list items
- Root cause: The fix logic had conditional behavior that
would remove indentation for "standalone" code blocks
- Now always preserves original indentation regardless of
context
- Removed 50+ lines of unnecessary is_in_nested_context()
helper logic
- Added comprehensive tests for various indentation scenarios
(0, 2, 4, 6 spaces)
* Added
- Conventional Commits validation hook: Git commit-msg hook
validates commit message format
- Enforces Conventional Commits specification for all commits
- Provides helpful error messages for invalid formats
- Ensures consistent commit history for changelog generation
- Automated changelog generation with git-cliff:
- Added make changelog-draft for previewing CHANGELOG updates
- Semi-automated workflow: generate draft, enhance with
details, commit
- Conventional Commits integration for automatic
categorization
* Changed
- Pre-push hook optimization: Use dev profile instead of full
suite for faster testing
- Prevents pre-push hook from hanging on slower machines
- Maintains adequate test coverage while improving developer
experience
- Update to version 0.0.164:
* Added
- File-Level Caching (Ruff-inspired): Dramatic performance
improvements for repeat runs
- Blake3-based content hashing for fast cache lookups
- Automatic cache invalidation on content, config, or version
changes
- Cache stored in .rumdl-cache/{version}/{hash}.json
- CLI flags: --no-cache to disable, --cache-dir to customize
location
- Enabled by default for instant subsequent runs
- Thread-Safe Parallel Caching: Best of both worlds -
parallelization AND caching
- Implemented Arc<Mutex> for safe cache sharing across
threads
- Mutex locked ONLY for brief cache get/set operations
- Full parallelization during expensive linting operations
- Matches Ruff's architecture for optimal performance
- Convergence Detection: Added hash-based detection to identify
when fixes have stabilized
- Stops iteration when content hash remains unchanged
- More efficient than counting rule applications
- Returns convergence status in fix results
- Convergence Failure Warnings: Report when auto-fix doesn't
converge (Ruff-style)
- Warns if 100 iteration limit reached without convergence
- Shows rule codes involved in potential infinite loop
- Encourages bug reports for convergence failures
- Available via RUMDL_DEBUG_FIX_PERF environment variable
* Changed
- Auto-fix Iteration: Automatic iteration until convergence
(fixes #88)
- --fix now automatically iterates up to 100 passes until
content stabilizes (same as Ruff)
- No need to manually re-run rumdl check --fix multiple times
- Hash-based convergence detection prevents unnecessary
iterations
- Significantly improves user experience for multi-pass fix
scenarios
- Unified Linting Architecture: Removed ~60 lines of duplicate
linting logic
- Refactored process_file_collect_warnings to use
process_file_inner
- Single code path for all file processing
- Cache works for ALL output formats (text, JSON, GitLab,
SARIF, JUnit)
- Parallel File Processing for Fix Mode: 4.8x speedup on
multi-file fixes
- Previously fix mode was always sequential
- Now uses parallel processing when safe (multiple
independent files)
- Each file processes all its fix iterations independently
* Fixed
- Multi-pass Fixes: No longer require manual re-runs to apply
all possible fixes
- Previously users had to run rumdl check --fix multiple
times
- Now automatically handles dependent rule fixes in single
command
- Examples: MD010 (tabs) before MD007 (list indent), MD013
(line length) before MD009 (trailing spaces)
- Cache Correctness: Include enabled rules in cache key
(Ruff-style)
- Cache now respects --enable/--disable CLI flags
- Different rule configurations create separate cache entries
- Prevents incorrect cached results when switching rule sets
- Changed LintWarning.rule_name from Option<&'static str> to
Option<String> for proper serialization
- Cache Parallelization: Cache now works correctly with
parallel processing
- No mutex contention during parallel file processing
- All output formats benefit from caching (previously only
JSON/GitLab/SARIF/JUnit)
* Performance
- Single file with cache: 943ms → 7ms (135x faster)
- Multi-file (21 files) cold cache: 14.4s → 4s (parallel
processing)
- Multi-file (21 files) warm cache: 14.4s → 0.019s (757x
faster!)
- JSON format (17 files) with cache: 13.9s → 60ms (231x faster)
- Update to version 0.0.163:
* Changed
- MD024: Default siblings_only to true for better usability
- Multiple headings with same text now only flagged if
they're direct siblings
- Reduces false positives in documents with common section
headings
- More intuitive default behavior matching common use cases
* Fixed
- MD013: Enforce line length in sentence_per_line mode (fixes
#111)
- Previously, sentence_per_line mode completely ignored
line_length setting
- Now warns about single sentences exceeding configured
line_length
- No auto-fix for long single sentences (requires manual
rephrasing)
- Still auto-fixes multi-sentence lines by splitting on
sentence boundaries
- Cleaned up warning messages by removing verbose
parentheticals
- Maintains semantic integrity (won't split mid-sentence)
while respecting configured line_length
- HTML Comments: Complete fix to ignore all content inside HTML
comments (fixes #119, #20)
- All rules now properly ignore content within HTML comment
blocks (<!-- ... -->)
- Added in_html_comment field to LineInfo for comprehensive
tracking
- Extended filtered lines API with skip_html_comments()
method
- Updated MD013, MD049, and other rules to skip HTML comment
content
- Prevents false positives from commented-out markdown
(MD013, MD049, MD005, MD006, MD039, MD042)
- Better handling of multi-line HTML comments across all
linting rules
- MD046: Resolve false positives from Issue #118
- Fixed incorrect flagging of valid code block syntax
- Improved code block style detection accuracy
- MD050: Resolve false positives from Issue #118
- Fixed incorrect strong style detection in edge cases
- Better handling of emphasis patterns
- Tests: Fixed sentence_per_line_detection test assertion
- Updated test to match simplified warning message from MD013
- Test was expecting verbose message after message was
simplified in earlier commit
- Update to version 0.0.162:
* Added
- Filtered Line Iterator Architecture: New infrastructure for
rule implementation
- Provides consistent interface for filtering out front
matter, code blocks, and HTML blocks
- Eliminates manual context checking in individual rules
- Improves code maintainability and reduces duplication
- Enables easier implementation of new rules
* Fixed
- MD052: Skip code blocks in blockquotes when checking
references
- Prevents false positives for reference syntax inside code
blocks within blockquotes
- Properly handles nested markdown structures
- MD034: Skip URLs in front matter
- URLs in YAML/TOML/JSON front matter no longer flagged as
bare URLs
- Improves compatibility with static site generators
- Tests: Fixed flaky profiling::tests::test_concurrent_access
test
- Added #[serial_test::serial] attribute to prevent race
conditions
- Ensures reliable test execution in CI/CD environments
- Documentation: Build badge now displays correctly
* Performance
- MD005: Optimized continuation detection from O(n²) to O(n)
- Dramatically faster processing of documents with many list
items
- Eliminates redundant line scanning
- General: Consolidated multiple line_info() calls for same
line
- Reduced redundant lookups across multiple rules
- Improved overall linting performance
* Changed
- Internal Refactoring: Eliminated manual checks across all
rules
- Removed manual front matter detection from individual rules
- Removed manual code block detection from individual rules
- Removed manual HTML block detection from individual rules
- All rules now use centralized filtering infrastructure
* Documentation
- Per-File-Ignores: Added comprehensive documentation for
per-file-ignores feature
- Detailed usage examples with glob patterns
- Integration with both .rumdl.toml and pyproject.toml
-------------------------------------------------------------------
Thu Oct 16 06:30:28 UTC 2025 - Johannes Kastl <opensuse_buildservice@ojkastl.de>
- new package rumdl: a Markdown Linter written in Rust