rumdl 0.0.121__tar.gz → 0.0.122__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rumdl might be problematic. Click here for more details.
- {rumdl-0.0.121 → rumdl-0.0.122}/CHANGELOG.md +4 -1
- {rumdl-0.0.121 → rumdl-0.0.122}/Cargo.lock +3 -3
- {rumdl-0.0.121 → rumdl-0.0.122}/Cargo.toml +1 -1
- {rumdl-0.0.121 → rumdl-0.0.122}/PKG-INFO +16 -1
- {rumdl-0.0.121 → rumdl-0.0.122}/README.md +15 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/output/formatters/github.rs +165 -24
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/comprehensive_output_format_tests.rs +7 -2
- {rumdl-0.0.121 → rumdl-0.0.122}/.config/nextest.toml +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/.mise.toml +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/.pre-commit-config.yaml +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/.rumdl.toml +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/.rustfmt.toml +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/LICENSE +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/MANIFEST.in +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/Makefile +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/assets/logo.png +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/benches/fix_performance.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/benches/range_performance.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/benches/range_utils_benchmark.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/benches/rule_performance.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/benches/simple_fix_bench.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/benchmark/bin/bench_lint_context.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/benchmark/bin/benchmark.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/benchmark/bin/benchmark_rule.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/benchmark/bin/file_parallel_benchmark.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/benchmark/bin/measure_code_span_performance.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/RULES.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/global-settings.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md001.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md002.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md003.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md004.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md005.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md006.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md007.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md009.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md010.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md011.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md012.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md013.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md014.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md018.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md019.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md020.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md021.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md022.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md023.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md024.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md025.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md026.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md027.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md028.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md029.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md030.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md031.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md032.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md033.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md034.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md035.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md036.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md037.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md038.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md039.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md040.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md041.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md042.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md043.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md044.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md045.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md046.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md047.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md048.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md049.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md050.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md051.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md052.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md053.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md054.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md055.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md056.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md057.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/md058.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/docs/vscode-extension.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/parity_check.py +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/pyproject.toml +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/python/MANIFEST.in +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/python/PYTHON-README.md +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/python/rumdl/__init__.py +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/python/rumdl/__main__.py +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/python/rumdl/py.typed +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/rumdl.toml.example +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/rust-toolchain.toml +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/scripts/extract-changelog.sh +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/scripts/generate-downloads-table.sh +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/scripts/pre-release.sh +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/scripts/prepare-release.sh +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/scripts/setup-pre-commit.sh +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/scripts/update-pre-commit-docs.sh +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/exit_codes.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/inline_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/lib.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/lint_context.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/lsp/mod.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/lsp/server.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/lsp/types.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/main.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/markdownlint_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/output/formatters/azure.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/output/formatters/concise.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/output/formatters/gitlab.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/output/formatters/grouped.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/output/formatters/json.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/output/formatters/json_lines.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/output/formatters/junit.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/output/formatters/mod.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/output/formatters/pylint.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/output/formatters/sarif.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/output/formatters/text.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/output/mod.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/parallel.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/performance.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/profiling.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/python.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rule.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rule_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rule_config_serde.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/blockquote_utils.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/code_block_utils.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/code_fence_utils.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/emphasis_style.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/front_matter_utils.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/heading_utils.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/list_utils.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md001_heading_increment.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md002_first_heading_h1/md002_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md002_first_heading_h1.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md003_heading_style/md003_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md003_heading_style.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md004_unordered_list_style/md004_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md004_unordered_list_style.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md005_list_indent.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md006_start_bullets.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md007_ul_indent/md007_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md007_ul_indent.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md009_trailing_spaces/md009_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md009_trailing_spaces.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md010_no_hard_tabs/md010_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md010_no_hard_tabs.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md011_no_reversed_links.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md012_no_multiple_blanks/md012_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md012_no_multiple_blanks.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md013_line_length/md013_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md013_line_length.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md014_commands_show_output/md014_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md014_commands_show_output.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md018_no_missing_space_atx.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md019_no_multiple_space_atx.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md022_blanks_around_headings/md022_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md022_blanks_around_headings.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md023_heading_start_left.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md024_no_duplicate_heading/md024_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md024_no_duplicate_heading.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md025_single_title/md025_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md025_single_title.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md026_no_trailing_punctuation/md026_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md026_no_trailing_punctuation.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md028_no_blanks_blockquote.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md029_ordered_list_prefix/md029_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md029_ordered_list_prefix.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md030_list_marker_space/md030_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md030_list_marker_space.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md031_blanks_around_fences.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md032_blanks_around_lists.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md033_no_inline_html/md033_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md033_no_inline_html.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md034_no_bare_urls.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md035_hr_style/md035_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md035_hr_style.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md036_no_emphasis_only_first/md036_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md036_no_emphasis_only_first.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md037_spaces_around_emphasis.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md038_no_space_in_code.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md039_no_space_in_links.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md040_fenced_code_language.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md041_first_line_heading.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md042_no_empty_links.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md043_required_headings.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md044_proper_names/md044_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md044_proper_names.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md045_no_alt_text/md045_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md045_no_alt_text.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md046_code_block_style/md046_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md046_code_block_style.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md047_single_trailing_newline.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md048_code_fence_style/md048_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md048_code_fence_style.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md049_emphasis_style/md049_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md049_emphasis_style.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md050_strong_style/md050_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md050_strong_style.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md051_link_fragments.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md052_reference_links_images.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md053_link_image_reference_definitions.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md054_link_image_style/md054_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md054_link_image_style.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md055_table_pipe_style/md055_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md055_table_pipe_style.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md056_table_column_count.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md057_existing_relative_links/md057_config.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md057_existing_relative_links.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/md058_blanks_around_tables.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/mod.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/rules/strong_style.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/utils/anchor_styles/github.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/utils/anchor_styles/jekyll.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/utils/anchor_styles/kramdown.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/utils/anchor_styles/kramdown_gfm.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/utils/anchor_styles/mod.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/utils/ast_utils.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/utils/code_block_utils.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/utils/document_structure.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/utils/early_returns.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/utils/element_cache.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/utils/emphasis_utils.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/utils/fix_utils.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/utils/header_id_utils.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/utils/kramdown_utils.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/utils/markdown_elements.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/utils/mod.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/utils/range_utils.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/utils/regex_cache.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/utils/skip_context.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/utils/string_interner.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/utils/table_utils.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/utils/text_reflow.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/src/vscode.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/advanced_integration_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/character_ranges/additional_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/character_ranges/basic_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/character_ranges/comprehensive_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/character_ranges/extended_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/character_ranges/mod.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/character_ranges/unicode_utils.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/cli_duplication_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/cli_explain_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/cli_flag_precedence_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/cli_integration_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/cli_lsp_fix_consistency.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/cli_statistics_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/common/cli_test_utils.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/common/fixtures.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/common/mod.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/common/test_utils.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/commonmark_compliance_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/comprehensive_integration_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/config_application_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/config_file_command_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/config_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/configuration_inheritance_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/consistency_regression_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/cross_platform_compatibility_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/deeply_nested_lists_performance_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/escaped_brackets_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/final_confidence_assessment.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/fixable_unfixable_config_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/init_command_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/init_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/inline_config_blocks_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/inline_config_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/integration_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/json_output_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/kramdown_integration_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/lib.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/lsp_editor_integration_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/lsp_integration_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/lsp_memory_leak_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/lsp_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/malformed_markdown_stress_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/markdownlint_cli_integration.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/markdownlint_config_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/markdownlintignore_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/md013_reflow_integration_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/md051_issue_39_regression_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/nested_code_block_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/output_format_integration_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/output_format_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/perf_check.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/performance_validation_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/pyproject_config_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/python_bindings_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/real_world_repository_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/regression_prevention_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/emphasis_edge_cases_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/heading_edge_cases_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/inline_content_edge_cases_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/link_edge_cases_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/list_rules_integration_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md001_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md001_unicode_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md002_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md003_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md004_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md005_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md005_unicode_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md006_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md006_unicode_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md007_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md009_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md010_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md011_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md012_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md013_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md014_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md018_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md019_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md020_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md021_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md022_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md023_extended_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md023_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md024_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md025_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md026_kramdown_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md026_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md027_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md028_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md029_code_block_separation_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md029_issue42_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md029_pathological_edge_cases_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md029_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md029_unicode_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md030_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md031_kramdown_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md031_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md032_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md033_extended_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md033_kramdown_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md033_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md034_ipv6_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md034_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md035_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md036_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md037_kramdown_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md037_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md038_nested_backticks_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md038_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md039_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md040_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md041_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md042_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md043_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md044_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md045_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md046_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md047_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md048_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md049_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md050_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md051_comprehensive_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md051_critical_edge_cases_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md051_edge_cases_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md051_issue_39_regression_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md051_performance_edge_cases_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md051_property_based_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md051_regression_prevention_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md051_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md051_unicode_security_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md052_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md053_additional_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md053_proptest.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md053_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md054_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md054_unicode_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md055_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md056_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md057_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md058_kramdown_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/md058_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules/mod.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/rules_mod_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/skip_context_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/test_underscore_edge_cases.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/thread_safety_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/unicode_edge_case_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/utils/blockquote_utils_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/utils/code_block_utils_extended_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/utils/code_block_utils_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/utils/core_utils_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/utils/front_matter_utils_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/utils/line_index_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/utils/mod.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/utils_markdown_edge_cases.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/utils_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/vscode_extension_fixes.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/vscode_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/vscode_tests.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/vscode_windows_comprehensive_test.rs +0 -0
- {rumdl-0.0.121 → rumdl-0.0.122}/tests/vscode_windows_test.rs +0 -0
|
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.0.122] - 2025-08-19
|
|
11
|
+
|
|
10
12
|
## [0.0.121] - 2025-08-19
|
|
11
13
|
|
|
12
14
|
### Fixed
|
|
@@ -370,7 +372,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
370
372
|
|
|
371
373
|
- Initial implementation of remaining rules for markdownlint parity
|
|
372
374
|
|
|
373
|
-
[Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.
|
|
375
|
+
[Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.122...HEAD
|
|
376
|
+
[0.0.122]: https://github.com/rvben/rumdl/compare/v0.0.121...v0.0.122
|
|
374
377
|
[0.0.121]: https://github.com/rvben/rumdl/compare/v0.0.120...v0.0.121
|
|
375
378
|
[0.0.120]: https://github.com/rvben/rumdl/compare/v0.0.119...v0.0.120
|
|
376
379
|
[0.0.119]: https://github.com/rvben/rumdl/compare/v0.0.118...v0.0.119
|
|
@@ -229,9 +229,9 @@ dependencies = [
|
|
|
229
229
|
|
|
230
230
|
[[package]]
|
|
231
231
|
name = "cfg-if"
|
|
232
|
-
version = "1.0.
|
|
232
|
+
version = "1.0.3"
|
|
233
233
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
234
|
-
checksum = "
|
|
234
|
+
checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9"
|
|
235
235
|
|
|
236
236
|
[[package]]
|
|
237
237
|
name = "chrono"
|
|
@@ -1493,7 +1493,7 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
|
|
|
1493
1493
|
|
|
1494
1494
|
[[package]]
|
|
1495
1495
|
name = "rumdl"
|
|
1496
|
-
version = "0.0.
|
|
1496
|
+
version = "0.0.122"
|
|
1497
1497
|
dependencies = [
|
|
1498
1498
|
"anyhow",
|
|
1499
1499
|
"assert_cmd",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rumdl
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.122
|
|
4
4
|
Classifier: Development Status :: 4 - Beta
|
|
5
5
|
Classifier: Environment :: Console
|
|
6
6
|
Classifier: Intended Audience :: Developers
|
|
@@ -96,6 +96,8 @@ It offers:
|
|
|
96
96
|
- [VS Code Extension](#vs-code-extension)
|
|
97
97
|
- [Usage](#usage)
|
|
98
98
|
- [Pre-commit Integration](#pre-commit-integration)
|
|
99
|
+
- [CI/CD Integration](#cicd-integration)
|
|
100
|
+
- [GitHub Actions](#github-actions)
|
|
99
101
|
- [Rules](#rules)
|
|
100
102
|
- [Command-line Interface](#command-line-interface)
|
|
101
103
|
- [Commands](#commands)
|
|
@@ -270,6 +272,19 @@ repos:
|
|
|
270
272
|
|
|
271
273
|
When you run `pre-commit install` or `pre-commit run`, pre-commit will automatically install `rumdl` in an isolated Python environment using pip. You do **not** need to install rumdl manually.
|
|
272
274
|
|
|
275
|
+
## CI/CD Integration
|
|
276
|
+
|
|
277
|
+
### GitHub Actions
|
|
278
|
+
|
|
279
|
+
rumdl can output annotations directly in GitHub Actions format, making issues appear inline in pull requests:
|
|
280
|
+
|
|
281
|
+
```yaml
|
|
282
|
+
- name: Lint Markdown
|
|
283
|
+
run: rumdl check --output-format github .
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
This produces annotations that GitHub automatically displays in the PR's "Files changed" tab. Supports error/warning severity levels and precise issue locations.
|
|
287
|
+
|
|
273
288
|
## Rules
|
|
274
289
|
|
|
275
290
|
rumdl implements 54 lint rules for Markdown files. Here are some key rule categories:
|
|
@@ -67,6 +67,8 @@ It offers:
|
|
|
67
67
|
- [VS Code Extension](#vs-code-extension)
|
|
68
68
|
- [Usage](#usage)
|
|
69
69
|
- [Pre-commit Integration](#pre-commit-integration)
|
|
70
|
+
- [CI/CD Integration](#cicd-integration)
|
|
71
|
+
- [GitHub Actions](#github-actions)
|
|
70
72
|
- [Rules](#rules)
|
|
71
73
|
- [Command-line Interface](#command-line-interface)
|
|
72
74
|
- [Commands](#commands)
|
|
@@ -241,6 +243,19 @@ repos:
|
|
|
241
243
|
|
|
242
244
|
When you run `pre-commit install` or `pre-commit run`, pre-commit will automatically install `rumdl` in an isolated Python environment using pip. You do **not** need to install rumdl manually.
|
|
243
245
|
|
|
246
|
+
## CI/CD Integration
|
|
247
|
+
|
|
248
|
+
### GitHub Actions
|
|
249
|
+
|
|
250
|
+
rumdl can output annotations directly in GitHub Actions format, making issues appear inline in pull requests:
|
|
251
|
+
|
|
252
|
+
```yaml
|
|
253
|
+
- name: Lint Markdown
|
|
254
|
+
run: rumdl check --output-format github .
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
This produces annotations that GitHub automatically displays in the PR's "Files changed" tab. Supports error/warning severity levels and precise issue locations.
|
|
258
|
+
|
|
244
259
|
## Rules
|
|
245
260
|
|
|
246
261
|
rumdl implements 54 lint rules for Markdown files. Here are some key rule categories:
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
//! GitHub Actions annotation format
|
|
2
|
+
//!
|
|
3
|
+
//! Outputs annotations in GitHub Actions workflow command format for PR annotations.
|
|
4
|
+
//! See: https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions
|
|
2
5
|
|
|
3
6
|
use crate::output::OutputFormatter;
|
|
4
|
-
use crate::rule::LintWarning;
|
|
7
|
+
use crate::rule::{LintWarning, Severity};
|
|
5
8
|
|
|
6
9
|
/// GitHub Actions formatter
|
|
7
|
-
/// Outputs in the format:
|
|
10
|
+
/// Outputs in the format: ::<level> file=<file>,line=<line>,col=<col>,endLine=<endLine>,endColumn=<endCol>,title=<rule>::<message>
|
|
8
11
|
pub struct GitHubFormatter;
|
|
9
12
|
|
|
10
13
|
impl Default for GitHubFormatter {
|
|
@@ -17,6 +20,24 @@ impl GitHubFormatter {
|
|
|
17
20
|
pub fn new() -> Self {
|
|
18
21
|
Self
|
|
19
22
|
}
|
|
23
|
+
|
|
24
|
+
/// Escape special characters according to GitHub Actions specification
|
|
25
|
+
/// Percent-encodes: %, \r, \n, :, ,
|
|
26
|
+
/// Used for property values (file, title, etc.)
|
|
27
|
+
fn escape_property(value: &str) -> String {
|
|
28
|
+
value
|
|
29
|
+
.replace('%', "%25")
|
|
30
|
+
.replace('\r', "%0D")
|
|
31
|
+
.replace('\n', "%0A")
|
|
32
|
+
.replace(':', "%3A")
|
|
33
|
+
.replace(',', "%2C")
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/// Escape special characters in the message part
|
|
37
|
+
/// Percent-encodes: %, \r, \n
|
|
38
|
+
fn escape_message(value: &str) -> String {
|
|
39
|
+
value.replace('%', "%25").replace('\r', "%0D").replace('\n', "%0A")
|
|
40
|
+
}
|
|
20
41
|
}
|
|
21
42
|
|
|
22
43
|
impl OutputFormatter for GitHubFormatter {
|
|
@@ -26,12 +47,38 @@ impl OutputFormatter for GitHubFormatter {
|
|
|
26
47
|
for warning in warnings {
|
|
27
48
|
let rule_name = warning.rule_name.unwrap_or("unknown");
|
|
28
49
|
|
|
29
|
-
// GitHub Actions annotation
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
50
|
+
// Map severity to GitHub Actions annotation level
|
|
51
|
+
let level = match warning.severity {
|
|
52
|
+
Severity::Error => "error",
|
|
53
|
+
Severity::Warning => "warning",
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
// Escape special characters in all properties
|
|
57
|
+
let escaped_file = Self::escape_property(file_path);
|
|
58
|
+
let escaped_rule = Self::escape_property(rule_name);
|
|
59
|
+
let escaped_message = Self::escape_message(&warning.message);
|
|
60
|
+
|
|
61
|
+
// GitHub Actions annotation format with optional end position
|
|
62
|
+
let line = if warning.end_line != warning.line || warning.end_column != warning.column {
|
|
63
|
+
// Include end position if different from start
|
|
64
|
+
format!(
|
|
65
|
+
"::{} file={},line={},col={},endLine={},endColumn={},title={}::{}",
|
|
66
|
+
level,
|
|
67
|
+
escaped_file,
|
|
68
|
+
warning.line,
|
|
69
|
+
warning.column,
|
|
70
|
+
warning.end_line,
|
|
71
|
+
warning.end_column,
|
|
72
|
+
escaped_rule,
|
|
73
|
+
escaped_message
|
|
74
|
+
)
|
|
75
|
+
} else {
|
|
76
|
+
// Omit end position if same as start
|
|
77
|
+
format!(
|
|
78
|
+
"::{} file={},line={},col={},title={}::{}",
|
|
79
|
+
level, escaped_file, warning.line, warning.column, escaped_rule, escaped_message
|
|
80
|
+
)
|
|
81
|
+
};
|
|
35
82
|
|
|
36
83
|
output.push_str(&line);
|
|
37
84
|
output.push('\n');
|
|
@@ -88,7 +135,7 @@ mod tests {
|
|
|
88
135
|
let output = formatter.format_warnings(&warnings, "README.md");
|
|
89
136
|
assert_eq!(
|
|
90
137
|
output,
|
|
91
|
-
"::warning file=README.md,line=10,col=5,title=MD001::Heading levels should only increment by one level at a time"
|
|
138
|
+
"::warning file=README.md,line=10,col=5,endLine=10,endColumn=15,title=MD001::Heading levels should only increment by one level at a time"
|
|
92
139
|
);
|
|
93
140
|
}
|
|
94
141
|
|
|
@@ -119,7 +166,7 @@ mod tests {
|
|
|
119
166
|
];
|
|
120
167
|
|
|
121
168
|
let output = formatter.format_warnings(&warnings, "test.md");
|
|
122
|
-
let expected = "::warning file=test.md,line=5,col=1,title=MD001::First warning\n::
|
|
169
|
+
let expected = "::warning file=test.md,line=5,col=1,endLine=5,endColumn=10,title=MD001::First warning\n::error file=test.md,line=10,col=3,endLine=10,endColumn=20,title=MD013::Second warning";
|
|
123
170
|
assert_eq!(output, expected);
|
|
124
171
|
}
|
|
125
172
|
|
|
@@ -141,10 +188,10 @@ mod tests {
|
|
|
141
188
|
}];
|
|
142
189
|
|
|
143
190
|
let output = formatter.format_warnings(&warnings, "doc.md");
|
|
144
|
-
// GitHub format doesn't show fix indicator
|
|
191
|
+
// GitHub format doesn't show fix indicator but includes end position
|
|
145
192
|
assert_eq!(
|
|
146
193
|
output,
|
|
147
|
-
"::warning file=doc.md,line=15,col=1,title=MD022::Headings should be surrounded by blank lines"
|
|
194
|
+
"::warning file=doc.md,line=15,col=1,endLine=15,endColumn=10,title=MD022::Headings should be surrounded by blank lines"
|
|
148
195
|
);
|
|
149
196
|
}
|
|
150
197
|
|
|
@@ -165,7 +212,7 @@ mod tests {
|
|
|
165
212
|
let output = formatter.format_warnings(&warnings, "file.md");
|
|
166
213
|
assert_eq!(
|
|
167
214
|
output,
|
|
168
|
-
"::warning file=file.md,line=1,col=1,title=unknown::Unknown rule warning"
|
|
215
|
+
"::warning file=file.md,line=1,col=1,endLine=1,endColumn=5,title=unknown::Unknown rule warning"
|
|
169
216
|
);
|
|
170
217
|
}
|
|
171
218
|
|
|
@@ -188,7 +235,7 @@ mod tests {
|
|
|
188
235
|
let output = formatter.format_warnings(&warnings, "large.md");
|
|
189
236
|
assert_eq!(
|
|
190
237
|
output,
|
|
191
|
-
"::
|
|
238
|
+
"::error file=large.md,line=99999,col=12345,endLine=100000,endColumn=12350,title=MD999::Edge case warning"
|
|
192
239
|
);
|
|
193
240
|
}
|
|
194
241
|
|
|
@@ -207,10 +254,32 @@ mod tests {
|
|
|
207
254
|
}];
|
|
208
255
|
|
|
209
256
|
let output = formatter.format_warnings(&warnings, "test.md");
|
|
210
|
-
//
|
|
257
|
+
// Newline should be escaped as %0A
|
|
258
|
+
assert_eq!(
|
|
259
|
+
output,
|
|
260
|
+
"::warning file=test.md,line=1,col=1,endLine=1,endColumn=5,title=MD001::Warning with \"quotes\" and 'apostrophes' and %0A newline"
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
#[test]
|
|
265
|
+
fn test_percent_encoding() {
|
|
266
|
+
let formatter = GitHubFormatter::new();
|
|
267
|
+
let warnings = vec![LintWarning {
|
|
268
|
+
line: 1,
|
|
269
|
+
column: 1,
|
|
270
|
+
end_line: 1,
|
|
271
|
+
end_column: 1,
|
|
272
|
+
rule_name: Some("MD001"),
|
|
273
|
+
message: "100% complete\r\nNew line".to_string(),
|
|
274
|
+
severity: Severity::Warning,
|
|
275
|
+
fix: None,
|
|
276
|
+
}];
|
|
277
|
+
|
|
278
|
+
let output = formatter.format_warnings(&warnings, "test%.md");
|
|
279
|
+
// %, \r, and \n should be encoded
|
|
211
280
|
assert_eq!(
|
|
212
281
|
output,
|
|
213
|
-
"::warning file=test.md,line=1,col=1,title=MD001::
|
|
282
|
+
"::warning file=test%25.md,line=1,col=1,title=MD001::100%25 complete%0D%0ANew line"
|
|
214
283
|
);
|
|
215
284
|
}
|
|
216
285
|
|
|
@@ -231,7 +300,7 @@ mod tests {
|
|
|
231
300
|
let output = formatter.format_warnings(&warnings, "path/with spaces/and-dashes.md");
|
|
232
301
|
assert_eq!(
|
|
233
302
|
output,
|
|
234
|
-
"::warning file=path/with spaces/and-dashes.md,line=1,col=1,title=MD001::Test"
|
|
303
|
+
"::warning file=path/with spaces/and-dashes.md,line=1,col=1,endLine=1,endColumn=5,title=MD001::Test"
|
|
235
304
|
);
|
|
236
305
|
}
|
|
237
306
|
|
|
@@ -256,15 +325,17 @@ mod tests {
|
|
|
256
325
|
assert!(output.contains("file=test.md"));
|
|
257
326
|
assert!(output.contains("line=42"));
|
|
258
327
|
assert!(output.contains("col=7"));
|
|
328
|
+
assert!(output.contains("endLine=42"));
|
|
329
|
+
assert!(output.contains("endColumn=10"));
|
|
259
330
|
assert!(output.contains("title=MD010"));
|
|
260
331
|
assert!(output.ends_with("::Hard tabs"));
|
|
261
332
|
}
|
|
262
333
|
|
|
263
334
|
#[test]
|
|
264
|
-
fn
|
|
335
|
+
fn test_severity_mapping() {
|
|
265
336
|
let formatter = GitHubFormatter::new();
|
|
266
337
|
|
|
267
|
-
// Test that
|
|
338
|
+
// Test that severities are properly mapped
|
|
268
339
|
let warnings = vec![
|
|
269
340
|
LintWarning {
|
|
270
341
|
line: 1,
|
|
@@ -291,16 +362,16 @@ mod tests {
|
|
|
291
362
|
let output = formatter.format_warnings(&warnings, "test.md");
|
|
292
363
|
let lines: Vec<&str> = output.lines().collect();
|
|
293
364
|
|
|
294
|
-
//
|
|
365
|
+
// Warning should use ::warning, Error should use ::error
|
|
295
366
|
assert!(lines[0].starts_with("::warning "));
|
|
296
|
-
assert!(lines[1].starts_with("::
|
|
367
|
+
assert!(lines[1].starts_with("::error "));
|
|
297
368
|
}
|
|
298
369
|
|
|
299
370
|
#[test]
|
|
300
371
|
fn test_commas_in_parameters() {
|
|
301
372
|
let formatter = GitHubFormatter::new();
|
|
302
373
|
|
|
303
|
-
// Test that commas in the title
|
|
374
|
+
// Test that commas in the title and file path are properly escaped
|
|
304
375
|
let warnings = vec![LintWarning {
|
|
305
376
|
line: 1,
|
|
306
377
|
column: 1,
|
|
@@ -313,10 +384,80 @@ mod tests {
|
|
|
313
384
|
}];
|
|
314
385
|
|
|
315
386
|
let output = formatter.format_warnings(&warnings, "file,with,commas.md");
|
|
316
|
-
//
|
|
387
|
+
// Commas in properties should be escaped as %2C
|
|
388
|
+
assert_eq!(
|
|
389
|
+
output,
|
|
390
|
+
"::warning file=file%2Cwith%2Ccommas.md,line=1,col=1,endLine=1,endColumn=5,title=MD%2C001::Test message, with comma"
|
|
391
|
+
);
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
#[test]
|
|
395
|
+
fn test_colons_in_parameters() {
|
|
396
|
+
let formatter = GitHubFormatter::new();
|
|
397
|
+
|
|
398
|
+
// Test that colons in file path and rule name are properly escaped
|
|
399
|
+
let warnings = vec![LintWarning {
|
|
400
|
+
line: 1,
|
|
401
|
+
column: 1,
|
|
402
|
+
end_line: 1,
|
|
403
|
+
end_column: 5,
|
|
404
|
+
rule_name: Some("MD:001"), // Unlikely but test edge case
|
|
405
|
+
message: "Test message: with colon".to_string(),
|
|
406
|
+
severity: Severity::Warning,
|
|
407
|
+
fix: None,
|
|
408
|
+
}];
|
|
409
|
+
|
|
410
|
+
let output = formatter.format_warnings(&warnings, "file:with:colons.md");
|
|
411
|
+
// Colons in properties should be escaped as %3A, but not in message
|
|
412
|
+
assert_eq!(
|
|
413
|
+
output,
|
|
414
|
+
"::warning file=file%3Awith%3Acolons.md,line=1,col=1,endLine=1,endColumn=5,title=MD%3A001::Test message: with colon"
|
|
415
|
+
);
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
#[test]
|
|
419
|
+
fn test_same_start_end_position() {
|
|
420
|
+
let formatter = GitHubFormatter::new();
|
|
421
|
+
|
|
422
|
+
// When start and end are the same, end position should be omitted
|
|
423
|
+
let warnings = vec![LintWarning {
|
|
424
|
+
line: 5,
|
|
425
|
+
column: 10,
|
|
426
|
+
end_line: 5,
|
|
427
|
+
end_column: 10,
|
|
428
|
+
rule_name: Some("MD001"),
|
|
429
|
+
message: "Single position warning".to_string(),
|
|
430
|
+
severity: Severity::Warning,
|
|
431
|
+
fix: None,
|
|
432
|
+
}];
|
|
433
|
+
|
|
434
|
+
let output = formatter.format_warnings(&warnings, "test.md");
|
|
435
|
+
// Should not include endLine and endColumn when they're the same as line and column
|
|
436
|
+
assert_eq!(
|
|
437
|
+
output,
|
|
438
|
+
"::warning file=test.md,line=5,col=10,title=MD001::Single position warning"
|
|
439
|
+
);
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
#[test]
|
|
443
|
+
fn test_error_severity() {
|
|
444
|
+
let formatter = GitHubFormatter::new();
|
|
445
|
+
|
|
446
|
+
let warnings = vec![LintWarning {
|
|
447
|
+
line: 1,
|
|
448
|
+
column: 1,
|
|
449
|
+
end_line: 1,
|
|
450
|
+
end_column: 5,
|
|
451
|
+
rule_name: Some("MD001"),
|
|
452
|
+
message: "Error level issue".to_string(),
|
|
453
|
+
severity: Severity::Error,
|
|
454
|
+
fix: None,
|
|
455
|
+
}];
|
|
456
|
+
|
|
457
|
+
let output = formatter.format_warnings(&warnings, "test.md");
|
|
317
458
|
assert_eq!(
|
|
318
459
|
output,
|
|
319
|
-
"::
|
|
460
|
+
"::error file=test.md,line=1,col=1,endLine=1,endColumn=5,title=MD001::Error level issue"
|
|
320
461
|
);
|
|
321
462
|
}
|
|
322
463
|
}
|
|
@@ -126,8 +126,13 @@ fn test_github_output_format() {
|
|
|
126
126
|
cmd.assert()
|
|
127
127
|
.failure()
|
|
128
128
|
.stdout(predicate::str::contains("::warning file="))
|
|
129
|
-
.stdout(predicate::str::contains("line=1,col=1,
|
|
130
|
-
.stdout(predicate::str::contains("
|
|
129
|
+
.stdout(predicate::str::contains("line=1,col=1,"))
|
|
130
|
+
.stdout(predicate::str::contains("title=MD022::"))
|
|
131
|
+
.stdout(predicate::str::contains("line=2,col=28,"))
|
|
132
|
+
.stdout(predicate::str::contains("title=MD009::"))
|
|
133
|
+
// Also check for new endLine/endColumn parameters
|
|
134
|
+
.stdout(predicate::str::contains("endLine="))
|
|
135
|
+
.stdout(predicate::str::contains("endColumn="));
|
|
131
136
|
}
|
|
132
137
|
|
|
133
138
|
#[test]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|