rumdl 0.0.107__tar.gz → 0.0.108__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.107 → rumdl-0.0.108}/.config/nextest.toml +21 -1
- {rumdl-0.0.107 → rumdl-0.0.108}/.pre-commit-config.yaml +38 -11
- {rumdl-0.0.107 → rumdl-0.0.108}/CHANGELOG.md +8 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/Cargo.lock +5 -5
- {rumdl-0.0.107 → rumdl-0.0.108}/Cargo.toml +1 -1
- {rumdl-0.0.107 → rumdl-0.0.108}/Makefile +11 -1
- {rumdl-0.0.107 → rumdl-0.0.108}/PKG-INFO +1 -1
- rumdl-0.0.108/src/bin/debug_frontmatter.rs +42 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md037_spaces_around_emphasis.rs +100 -1
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md044_proper_names.rs +107 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md049_emphasis_style.rs +74 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md050_strong_style.rs +83 -6
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md052_reference_links_images.rs +81 -3
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md058_blanks_around_tables.rs +30 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/utils/table_utils.rs +36 -11
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/emphasis_edge_cases_test.rs +7 -2
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/inline_content_edge_cases_test.rs +4 -2
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md044_test.rs +2 -1
- {rumdl-0.0.107 → rumdl-0.0.108}/.mise.toml +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/.rumdl.toml +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/.rustfmt.toml +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/LICENSE +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/MANIFEST.in +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/README.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/assets/logo.png +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/benches/fix_performance.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/benches/range_performance.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/benches/range_utils_benchmark.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/benches/rule_performance.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/benches/simple_fix_bench.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/benchmark/bin/bench_lint_context.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/benchmark/bin/benchmark.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/benchmark/bin/benchmark_rule.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/benchmark/bin/file_parallel_benchmark.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/benchmark/bin/measure_code_span_performance.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/RULES.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/global-settings.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md001.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md002.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md003.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md004.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md005.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md006.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md007.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md009.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md010.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md011.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md012.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md013.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md014.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md018.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md019.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md020.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md021.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md022.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md023.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md024.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md025.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md026.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md027.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md028.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md029.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md030.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md031.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md032.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md033.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md034.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md035.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md036.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md037.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md038.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md039.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md040.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md041.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md042.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md043.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md044.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md045.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md046.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md047.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md048.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md049.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md050.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md051.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md052.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md053.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md054.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md055.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md056.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md057.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/md058.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/docs/vscode-extension.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/parity_check.py +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/pyproject.toml +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/python/MANIFEST.in +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/python/PYTHON-README.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/python/rumdl/__init__.py +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/python/rumdl/__main__.py +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/python/rumdl/py.typed +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/rumdl.toml.example +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/rust-toolchain.toml +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/scripts/extract-changelog.sh +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/scripts/prepare-release.sh +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/scripts/setup-pre-commit.sh +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/scripts/update-pre-commit-docs.sh +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/exit_codes.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/inline_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/lib.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/lint_context.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/lsp/mod.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/lsp/server.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/lsp/types.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/main.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/markdownlint_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/output/formatters/azure.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/output/formatters/concise.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/output/formatters/github.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/output/formatters/gitlab.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/output/formatters/grouped.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/output/formatters/json.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/output/formatters/json_lines.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/output/formatters/junit.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/output/formatters/mod.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/output/formatters/pylint.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/output/formatters/sarif.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/output/formatters/text.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/output/mod.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/parallel.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/performance.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/profiling.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/python.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rule.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rule_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rule_config_serde.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/blockquote_utils.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/code_block_utils.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/code_fence_utils.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/emphasis_style.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/front_matter_utils.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/heading_utils.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/list_utils.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md001_heading_increment.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md002_first_heading_h1/md002_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md002_first_heading_h1.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md003_heading_style/md003_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md003_heading_style.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md004_unordered_list_style/md004_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md004_unordered_list_style.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md005_list_indent.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md006_start_bullets.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md007_ul_indent/md007_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md007_ul_indent.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md009_trailing_spaces/md009_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md009_trailing_spaces.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md010_no_hard_tabs/md010_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md010_no_hard_tabs.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md011_no_reversed_links.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md012_no_multiple_blanks/md012_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md012_no_multiple_blanks.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md013_line_length/md013_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md013_line_length.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md014_commands_show_output/md014_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md014_commands_show_output.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md018_no_missing_space_atx.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md019_no_multiple_space_atx.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md022_blanks_around_headings/md022_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md022_blanks_around_headings.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md023_heading_start_left.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md024_no_duplicate_heading/md024_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md024_no_duplicate_heading.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md025_single_title/md025_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md025_single_title.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md026_no_trailing_punctuation/md026_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md026_no_trailing_punctuation.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md028_no_blanks_blockquote.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md029_ordered_list_prefix/md029_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md029_ordered_list_prefix.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md030_list_marker_space/md030_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md030_list_marker_space.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md031_blanks_around_fences.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md032_blanks_around_lists.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md033_no_inline_html/md033_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md033_no_inline_html.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md034_no_bare_urls.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md035_hr_style/md035_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md035_hr_style.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md036_no_emphasis_only_first/md036_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md036_no_emphasis_only_first.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md038_no_space_in_code.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md039_no_space_in_links.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md040_fenced_code_language.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md041_first_line_heading.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md042_no_empty_links.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md043_required_headings.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md044_proper_names/md044_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md045_no_alt_text/md045_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md045_no_alt_text.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md046_code_block_style/md046_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md046_code_block_style.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md047_single_trailing_newline.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md048_code_fence_style/md048_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md048_code_fence_style.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md049_emphasis_style/md049_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md050_strong_style/md050_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md051_link_fragments.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md053_link_image_reference_definitions.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md054_link_image_style/md054_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md054_link_image_style.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md055_table_pipe_style/md055_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md055_table_pipe_style.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md056_table_column_count.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md057_existing_relative_links/md057_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/md057_existing_relative_links.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/mod.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/rules/strong_style.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/utils/ast_utils.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/utils/code_block_utils.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/utils/document_structure.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/utils/early_returns.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/utils/element_cache.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/utils/emphasis_utils.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/utils/fix_utils.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/utils/markdown_elements.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/utils/mod.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/utils/range_utils.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/utils/regex_cache.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/utils/string_interner.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/utils/text_reflow.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/src/vscode.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/advanced_integration_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/character_ranges/additional_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/character_ranges/basic_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/character_ranges/comprehensive_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/character_ranges/extended_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/character_ranges/mod.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/character_ranges/unicode_utils.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/cli_duplication_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/cli_explain_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/cli_flag_precedence_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/cli_integration_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/cli_lsp_fix_consistency.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/cli_statistics_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/commonmark_compliance_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/comprehensive_integration_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/comprehensive_output_format_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/config_application_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/config_file_command_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/config_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/configuration_inheritance_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/consistency_regression_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/cross_platform_compatibility_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/deeply_nested_lists_performance_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/escaped_brackets_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/final_confidence_assessment.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/init_command_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/init_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/inline_config_blocks_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/inline_config_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/integration_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/json_output_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/lib.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/lsp_editor_integration_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/lsp_integration_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/lsp_memory_leak_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/lsp_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/malformed_markdown_stress_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/markdownlint_cli_integration.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/markdownlint_config_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/markdownlintignore_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/md013_reflow_integration_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/nested_code_block_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/output_format_integration_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/output_format_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/perf_check.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/performance_validation_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/pyproject_config_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/python_bindings_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/real_world_repository_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/regression_prevention_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/heading_edge_cases_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/link_edge_cases_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/list_rules_integration_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md001_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md001_unicode_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md002_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md003_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md004_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md005_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md005_unicode_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md006_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md006_unicode_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md007_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md009_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md010_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md011_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md012_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md013_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md014_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md018_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md019_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md020_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md021_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md022_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md023_extended_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md023_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md024_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md025_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md026_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md027_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md028_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md029_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md029_unicode_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md030_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md031_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md032_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md033_extended_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md033_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md034_ipv6_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md034_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md035_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md036_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md037_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md038_nested_backticks_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md038_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md039_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md040_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md041_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md042_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md043_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md045_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md046_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md047_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md048_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md049_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md050_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md051_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md051_unicode_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md052_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md053_additional_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md053_proptest.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md053_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md054_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md054_unicode_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md055_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md056_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md057_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/md058_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules/mod.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/rules_mod_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/thread_safety_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/unicode_edge_case_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/utils/blockquote_utils_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/utils/code_block_utils_extended_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/utils/code_block_utils_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/utils/core_utils_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/utils/front_matter_utils_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/utils/line_index_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/utils/mod.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/utils_markdown_edge_cases.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/utils_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/vscode_extension_fixes.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/vscode_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/vscode_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/vscode_windows_comprehensive_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.108}/tests/vscode_windows_test.rs +0 -0
|
@@ -43,4 +43,24 @@ default-filter = 'not test(/memory/) and not test(/stress/) and not test(/large/
|
|
|
43
43
|
test-threads = "num-cpus"
|
|
44
44
|
|
|
45
45
|
# Less verbose output
|
|
46
|
-
status-level = "fail"
|
|
46
|
+
status-level = "fail"
|
|
47
|
+
|
|
48
|
+
# Ultra-fast profile for pre-commit hooks
|
|
49
|
+
[profile.pre-commit]
|
|
50
|
+
|
|
51
|
+
# Only run unit tests in lib, skip all integration tests and binaries
|
|
52
|
+
default-filter = 'package(rumdl) and kind(lib) and not test(/slow|stress|large|integration|comprehensive|cli|config|advanced|commonmark|consistency|performance|benchmark|parity/)'
|
|
53
|
+
|
|
54
|
+
# Maximum parallelism for speed
|
|
55
|
+
test-threads = "num-cpus"
|
|
56
|
+
|
|
57
|
+
# Minimal output for speed
|
|
58
|
+
status-level = "fail"
|
|
59
|
+
failure-output = "immediate"
|
|
60
|
+
success-output = "never"
|
|
61
|
+
|
|
62
|
+
# No retries to save time
|
|
63
|
+
retries = 0
|
|
64
|
+
|
|
65
|
+
# Fail fast on first failure
|
|
66
|
+
fail-fast = true
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
# Pre-commit hooks for rumdl
|
|
2
|
-
# Install with:
|
|
3
|
-
#
|
|
2
|
+
# Install with:
|
|
3
|
+
# pre-commit install # Install commit hooks
|
|
4
|
+
# pre-commit install --hook-type pre-push # Install push hooks
|
|
5
|
+
# Run manually:
|
|
6
|
+
# pre-commit run --all-files # Run commit hooks
|
|
7
|
+
# pre-commit run --hook-stage push --all-files # Run push hooks
|
|
4
8
|
|
|
5
9
|
repos:
|
|
6
10
|
# Rust formatting and linting
|
|
@@ -15,26 +19,19 @@ repos:
|
|
|
15
19
|
|
|
16
20
|
- id: cargo-clippy
|
|
17
21
|
name: cargo clippy
|
|
18
|
-
entry: make lint
|
|
22
|
+
entry: make lint-fast
|
|
19
23
|
language: system
|
|
20
24
|
types: [rust]
|
|
21
25
|
pass_filenames: false
|
|
22
26
|
|
|
23
27
|
- id: cargo-test-quick
|
|
24
28
|
name: cargo test (quick)
|
|
25
|
-
entry: make test-
|
|
29
|
+
entry: make test-pre-commit
|
|
26
30
|
language: system
|
|
27
31
|
types: [rust]
|
|
28
32
|
pass_filenames: false
|
|
29
33
|
stages: [pre-commit]
|
|
30
34
|
|
|
31
|
-
- id: cargo-check
|
|
32
|
-
name: cargo check
|
|
33
|
-
entry: cargo check --all-targets --all-features
|
|
34
|
-
language: system
|
|
35
|
-
types: [rust]
|
|
36
|
-
pass_filenames: false
|
|
37
|
-
|
|
38
35
|
# General file quality checks
|
|
39
36
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
40
37
|
rev: v4.6.0
|
|
@@ -57,3 +54,33 @@ repos:
|
|
|
57
54
|
hooks:
|
|
58
55
|
- id: rumdl
|
|
59
56
|
exclude: ^(test_tmp|benchmark/test-data|docs/temp|CHANGELOG\.md)
|
|
57
|
+
|
|
58
|
+
# Pre-push hooks for comprehensive validation
|
|
59
|
+
- repo: local
|
|
60
|
+
hooks:
|
|
61
|
+
- id: cargo-test-full
|
|
62
|
+
name: cargo test (full suite)
|
|
63
|
+
entry: make test-push
|
|
64
|
+
language: system
|
|
65
|
+
types: [rust]
|
|
66
|
+
pass_filenames: false
|
|
67
|
+
stages: [push]
|
|
68
|
+
verbose: true
|
|
69
|
+
|
|
70
|
+
- id: cargo-lint-full
|
|
71
|
+
name: cargo clippy (all targets)
|
|
72
|
+
entry: make lint
|
|
73
|
+
language: system
|
|
74
|
+
types: [rust]
|
|
75
|
+
pass_filenames: false
|
|
76
|
+
stages: [push]
|
|
77
|
+
verbose: true
|
|
78
|
+
|
|
79
|
+
- id: cargo-doc-check
|
|
80
|
+
name: cargo doc (check)
|
|
81
|
+
entry: cargo doc --no-deps --all-features
|
|
82
|
+
language: system
|
|
83
|
+
types: [rust]
|
|
84
|
+
pass_filenames: false
|
|
85
|
+
stages: [push]
|
|
86
|
+
verbose: true
|
|
@@ -9,6 +9,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
## [0.0.107] - 2025-08-06
|
|
11
11
|
|
|
12
|
+
## [0.0.107] - 2025-08-06
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
- MD036: Remove automatic fix to prevent document corruption when bold/italic text is used as image captions, labels, or warnings (#23)
|
|
16
|
+
- MD011: No longer flags patterns like `()[1]` inside inline code as reversed links (#19)
|
|
17
|
+
- MD052: No longer flags reference patterns inside HTML comments as undefined references (#20)
|
|
18
|
+
|
|
12
19
|
## [0.0.106] - 2025-08-05
|
|
13
20
|
|
|
14
21
|
### Changed
|
|
@@ -293,6 +300,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
293
300
|
|
|
294
301
|
[Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.107...HEAD
|
|
295
302
|
[0.0.107]: https://github.com/rvben/rumdl/compare/v0.0.106...v0.0.107
|
|
303
|
+
[0.0.107]: https://github.com/rvben/rumdl/compare/v0.0.106...v0.0.107
|
|
296
304
|
[0.0.105]: https://github.com/rvben/rumdl/compare/v0.0.104...v0.0.105
|
|
297
305
|
[0.0.105]: https://github.com/rvben/rumdl/compare/v0.0.104...v0.0.105
|
|
298
306
|
[0.0.104]: https://github.com/rvben/rumdl/compare/v0.0.103...v0.0.104
|
|
@@ -277,9 +277,9 @@ dependencies = [
|
|
|
277
277
|
|
|
278
278
|
[[package]]
|
|
279
279
|
name = "clap"
|
|
280
|
-
version = "4.5.
|
|
280
|
+
version = "4.5.43"
|
|
281
281
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
282
|
-
checksum = "
|
|
282
|
+
checksum = "50fd97c9dc2399518aa331917ac6f274280ec5eb34e555dd291899745c48ec6f"
|
|
283
283
|
dependencies = [
|
|
284
284
|
"clap_builder",
|
|
285
285
|
"clap_derive",
|
|
@@ -287,9 +287,9 @@ dependencies = [
|
|
|
287
287
|
|
|
288
288
|
[[package]]
|
|
289
289
|
name = "clap_builder"
|
|
290
|
-
version = "4.5.
|
|
290
|
+
version = "4.5.43"
|
|
291
291
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
292
|
-
checksum = "
|
|
292
|
+
checksum = "c35b5830294e1fa0462034af85cc95225a4cb07092c088c55bda3147cfcd8f65"
|
|
293
293
|
dependencies = [
|
|
294
294
|
"anstream",
|
|
295
295
|
"anstyle",
|
|
@@ -1493,7 +1493,7 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
|
|
|
1493
1493
|
|
|
1494
1494
|
[[package]]
|
|
1495
1495
|
name = "rumdl"
|
|
1496
|
-
version = "0.0.
|
|
1496
|
+
version = "0.0.108"
|
|
1497
1497
|
dependencies = [
|
|
1498
1498
|
"anyhow",
|
|
1499
1499
|
"assert_cmd",
|
|
@@ -69,6 +69,13 @@ test-nextest:
|
|
|
69
69
|
test-quick:
|
|
70
70
|
cargo nextest run --profile quick
|
|
71
71
|
|
|
72
|
+
test-pre-commit:
|
|
73
|
+
cargo nextest run --profile pre-commit
|
|
74
|
+
|
|
75
|
+
test-push:
|
|
76
|
+
@echo "Running full test suite (this may take a few minutes)..."
|
|
77
|
+
cargo nextest run
|
|
78
|
+
|
|
72
79
|
test-ci:
|
|
73
80
|
cargo nextest run --profile ci
|
|
74
81
|
|
|
@@ -81,7 +88,10 @@ fmt:
|
|
|
81
88
|
cargo fix --allow-dirty --allow-staged
|
|
82
89
|
|
|
83
90
|
lint:
|
|
84
|
-
cargo clippy --all-targets --all-features -- -D warnings
|
|
91
|
+
CARGO_INCREMENTAL=1 cargo clippy --all-targets --all-features -- -D warnings
|
|
92
|
+
|
|
93
|
+
lint-fast:
|
|
94
|
+
CARGO_INCREMENTAL=1 cargo clippy --workspace --lib --bins -- -D warnings
|
|
85
95
|
|
|
86
96
|
check:
|
|
87
97
|
cargo check --all-targets --all-features
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
use rumdl::rules::front_matter_utils::FrontMatterUtils;
|
|
2
|
+
use std::env;
|
|
3
|
+
use std::fs;
|
|
4
|
+
|
|
5
|
+
fn main() {
|
|
6
|
+
let args: Vec<String> = env::args().collect();
|
|
7
|
+
let content = if args.len() > 1 {
|
|
8
|
+
fs::read_to_string(&args[1]).expect("Failed to read file")
|
|
9
|
+
} else {
|
|
10
|
+
r#"+++
|
|
11
|
+
title = "My Post"
|
|
12
|
+
tags = ["example", "test"]
|
|
13
|
+
+++
|
|
14
|
+
|
|
15
|
+
# Content
|
|
16
|
+
|
|
17
|
+
[missing] reference should be flagged."#
|
|
18
|
+
.to_string()
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
println!("Content:");
|
|
22
|
+
for (i, line) in content.lines().enumerate() {
|
|
23
|
+
println!("Line {}: {}", i + 1, line);
|
|
24
|
+
}
|
|
25
|
+
println!();
|
|
26
|
+
|
|
27
|
+
let line_count = content.lines().count();
|
|
28
|
+
|
|
29
|
+
// Test with 0-based indexing (what the function actually uses)
|
|
30
|
+
println!("Testing is_in_front_matter with 0-based indexing:");
|
|
31
|
+
for i in 0..line_count {
|
|
32
|
+
let in_frontmatter = FrontMatterUtils::is_in_front_matter(&content, i);
|
|
33
|
+
println!("Line {} (0-based={}): in_frontmatter={}", i + 1, i, in_frontmatter);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Test also with 1-based indexing (what we pass from MD052)
|
|
37
|
+
println!("\nTesting is_in_front_matter with 1-based indexing:");
|
|
38
|
+
for i in 1..=line_count {
|
|
39
|
+
let in_frontmatter = FrontMatterUtils::is_in_front_matter(&content, i);
|
|
40
|
+
println!("Line {i}: in_frontmatter={in_frontmatter}");
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -7,6 +7,15 @@ use crate::utils::emphasis_utils::{
|
|
|
7
7
|
EmphasisSpan, find_emphasis_markers, find_emphasis_spans, has_doc_patterns, replace_inline_code,
|
|
8
8
|
};
|
|
9
9
|
use crate::utils::regex_cache::UNORDERED_LIST_MARKER_REGEX;
|
|
10
|
+
use lazy_static::lazy_static;
|
|
11
|
+
use regex::Regex;
|
|
12
|
+
|
|
13
|
+
lazy_static! {
|
|
14
|
+
// Reference definition pattern - matches [ref]: url "title"
|
|
15
|
+
static ref REF_DEF_REGEX: Regex = Regex::new(
|
|
16
|
+
r#"(?m)^[ ]{0,3}\[([^\]]+)\]:\s*([^\s]+)(?:\s+(?:"([^"]*)"|'([^']*)'))?$"#
|
|
17
|
+
).unwrap();
|
|
18
|
+
}
|
|
10
19
|
|
|
11
20
|
/// Check if an emphasis span has spacing issues that should be flagged
|
|
12
21
|
#[inline]
|
|
@@ -24,6 +33,34 @@ impl Default for MD037NoSpaceInEmphasis {
|
|
|
24
33
|
}
|
|
25
34
|
}
|
|
26
35
|
|
|
36
|
+
impl MD037NoSpaceInEmphasis {
|
|
37
|
+
/// Check if a byte position is within a link (inline links, reference links, or reference definitions)
|
|
38
|
+
fn is_in_link(&self, ctx: &crate::lint_context::LintContext, byte_pos: usize) -> bool {
|
|
39
|
+
// Check inline and reference links
|
|
40
|
+
for link in &ctx.links {
|
|
41
|
+
if link.byte_offset <= byte_pos && byte_pos < link.byte_end {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Check images (which use similar syntax)
|
|
47
|
+
for image in &ctx.images {
|
|
48
|
+
if image.byte_offset <= byte_pos && byte_pos < image.byte_end {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Check reference definitions [ref]: url "title" using regex pattern
|
|
54
|
+
for m in REF_DEF_REGEX.find_iter(ctx.content) {
|
|
55
|
+
if m.start() <= byte_pos && byte_pos < m.end() {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
false
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
27
64
|
impl Rule for MD037NoSpaceInEmphasis {
|
|
28
65
|
fn name(&self) -> &'static str {
|
|
29
66
|
"MD037"
|
|
@@ -83,7 +120,30 @@ impl Rule for MD037NoSpaceInEmphasis {
|
|
|
83
120
|
self.check_line_for_emphasis_issues_fast(&line_no_code, line_num + 1, &mut warnings);
|
|
84
121
|
}
|
|
85
122
|
|
|
86
|
-
|
|
123
|
+
// Filter out warnings for emphasis markers that are inside links
|
|
124
|
+
let mut filtered_warnings = Vec::new();
|
|
125
|
+
let mut line_start_pos = 0;
|
|
126
|
+
|
|
127
|
+
for (line_idx, line) in content.lines().enumerate() {
|
|
128
|
+
let line_num = line_idx + 1;
|
|
129
|
+
|
|
130
|
+
// Find warnings for this line
|
|
131
|
+
for warning in &warnings {
|
|
132
|
+
if warning.line == line_num {
|
|
133
|
+
// Calculate byte position of the warning
|
|
134
|
+
let byte_pos = line_start_pos + (warning.column - 1);
|
|
135
|
+
|
|
136
|
+
// Only keep warnings that are not inside links
|
|
137
|
+
if !self.is_in_link(ctx, byte_pos) {
|
|
138
|
+
filtered_warnings.push(warning.clone());
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
line_start_pos += line.len() + 1; // +1 for newline
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
Ok(filtered_warnings)
|
|
87
147
|
}
|
|
88
148
|
|
|
89
149
|
fn fix(&self, ctx: &crate::lint_context::LintContext) -> Result<String, LintError> {
|
|
@@ -367,4 +427,43 @@ mod tests {
|
|
|
367
427
|
"Expected warnings for spaces in emphasis outside code block"
|
|
368
428
|
);
|
|
369
429
|
}
|
|
430
|
+
|
|
431
|
+
#[test]
|
|
432
|
+
fn test_emphasis_in_links_not_flagged() {
|
|
433
|
+
let rule = MD037NoSpaceInEmphasis;
|
|
434
|
+
let content = r#"Check this [* spaced asterisk *](https://example.com/*test*) link.
|
|
435
|
+
|
|
436
|
+
This has * real spaced emphasis * that should be flagged."#;
|
|
437
|
+
let ctx = crate::lint_context::LintContext::new(content);
|
|
438
|
+
let result = rule.check(&ctx).unwrap();
|
|
439
|
+
|
|
440
|
+
// Test passed - emphasis inside links are filtered out correctly
|
|
441
|
+
|
|
442
|
+
// Only the real emphasis outside links should be flagged
|
|
443
|
+
assert_eq!(
|
|
444
|
+
result.len(),
|
|
445
|
+
1,
|
|
446
|
+
"Expected exactly 1 warning, but got: {:?}",
|
|
447
|
+
result.len()
|
|
448
|
+
);
|
|
449
|
+
assert!(result[0].message.contains("Spaces inside emphasis markers"));
|
|
450
|
+
// Should flag "* real spaced emphasis *" but not emphasis patterns inside links
|
|
451
|
+
assert!(result[0].line == 3); // Line with "* real spaced emphasis *"
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
#[test]
|
|
455
|
+
fn test_emphasis_in_links_vs_outside_links() {
|
|
456
|
+
let rule = MD037NoSpaceInEmphasis;
|
|
457
|
+
let content = r#"Check [* spaced *](https://example.com/*test*) and inline * real spaced * text.
|
|
458
|
+
|
|
459
|
+
[* link *]: https://example.com/*path*"#;
|
|
460
|
+
let ctx = crate::lint_context::LintContext::new(content);
|
|
461
|
+
let result = rule.check(&ctx).unwrap();
|
|
462
|
+
|
|
463
|
+
// Only the actual emphasis outside links should be flagged
|
|
464
|
+
assert_eq!(result.len(), 1);
|
|
465
|
+
assert!(result[0].message.contains("Spaces inside emphasis markers"));
|
|
466
|
+
// Should be the "* real spaced *" text on line 1
|
|
467
|
+
assert!(result[0].line == 1);
|
|
468
|
+
}
|
|
370
469
|
}
|
|
@@ -13,6 +13,10 @@ use md044_config::MD044Config;
|
|
|
13
13
|
|
|
14
14
|
lazy_static! {
|
|
15
15
|
static ref HTML_COMMENT_REGEX: Regex = Regex::new(r"<!--([\s\S]*?)-->").unwrap();
|
|
16
|
+
// Reference definition pattern - matches [ref]: url "title"
|
|
17
|
+
static ref REF_DEF_REGEX: regex::Regex = regex::Regex::new(
|
|
18
|
+
r#"(?m)^[ ]{0,3}\[([^\]]+)\]:\s*([^\s]+)(?:\s+(?:"([^"]*)"|'([^']*)'))?$"#
|
|
19
|
+
).unwrap();
|
|
16
20
|
}
|
|
17
21
|
|
|
18
22
|
type WarningPosition = (usize, usize, String); // (line, column, found_name)
|
|
@@ -304,6 +308,12 @@ impl MD044ProperNames {
|
|
|
304
308
|
}
|
|
305
309
|
}
|
|
306
310
|
|
|
311
|
+
// Skip if in link (inline links, reference links, or reference definitions)
|
|
312
|
+
let byte_pos = line_info.byte_offset + cap.start();
|
|
313
|
+
if self.is_in_link(ctx, byte_pos) {
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
|
|
307
317
|
// Find which proper name this matches
|
|
308
318
|
if let Some(proper_name) = self.get_proper_name_for(found_name) {
|
|
309
319
|
// Only flag if it's not already correct
|
|
@@ -334,6 +344,32 @@ impl MD044ProperNames {
|
|
|
334
344
|
false
|
|
335
345
|
}
|
|
336
346
|
|
|
347
|
+
/// Check if a byte position is within a link (inline links, reference links, or reference definitions)
|
|
348
|
+
fn is_in_link(&self, ctx: &crate::lint_context::LintContext, byte_pos: usize) -> bool {
|
|
349
|
+
// Check inline and reference links
|
|
350
|
+
for link in &ctx.links {
|
|
351
|
+
if link.byte_offset <= byte_pos && byte_pos < link.byte_end {
|
|
352
|
+
return true;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
// Check images (which use similar syntax)
|
|
357
|
+
for image in &ctx.images {
|
|
358
|
+
if image.byte_offset <= byte_pos && byte_pos < image.byte_end {
|
|
359
|
+
return true;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// Check reference definitions [ref]: url "title" using regex pattern
|
|
364
|
+
for m in REF_DEF_REGEX.find_iter(ctx.content) {
|
|
365
|
+
if m.start() <= byte_pos && byte_pos < m.end() {
|
|
366
|
+
return true;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
false
|
|
371
|
+
}
|
|
372
|
+
|
|
337
373
|
// Check if a character is a word boundary (handles Unicode)
|
|
338
374
|
fn is_word_boundary_char(c: char) -> bool {
|
|
339
375
|
!c.is_alphanumeric()
|
|
@@ -1003,4 +1039,75 @@ More JavaScript."#;
|
|
|
1003
1039
|
"Should not fix names inside HTML comments when disabled"
|
|
1004
1040
|
);
|
|
1005
1041
|
}
|
|
1042
|
+
|
|
1043
|
+
#[test]
|
|
1044
|
+
fn test_proper_names_in_links_not_flagged() {
|
|
1045
|
+
let rule = MD044ProperNames::new(
|
|
1046
|
+
vec!["JavaScript".to_string(), "Node.js".to_string(), "Python".to_string()],
|
|
1047
|
+
true,
|
|
1048
|
+
);
|
|
1049
|
+
|
|
1050
|
+
let content = r#"Check this [javascript documentation](https://javascript.info) for info.
|
|
1051
|
+
|
|
1052
|
+
Visit [node.js homepage](https://nodejs.org) and [python tutorial](https://python.org).
|
|
1053
|
+
|
|
1054
|
+
Real javascript should be flagged.
|
|
1055
|
+
|
|
1056
|
+
Also see the [typescript guide][ts-ref] for more.
|
|
1057
|
+
|
|
1058
|
+
Real python should be flagged too.
|
|
1059
|
+
|
|
1060
|
+
[ts-ref]: https://typescript.org/handbook"#;
|
|
1061
|
+
|
|
1062
|
+
let ctx = create_context(content);
|
|
1063
|
+
let result = rule.check(&ctx).unwrap();
|
|
1064
|
+
|
|
1065
|
+
// Only the real standalone proper names should be flagged
|
|
1066
|
+
assert_eq!(
|
|
1067
|
+
result.len(),
|
|
1068
|
+
2,
|
|
1069
|
+
"Expected exactly 2 warnings for standalone proper names"
|
|
1070
|
+
);
|
|
1071
|
+
assert!(result[0].message.contains("'javascript' should be 'JavaScript'"));
|
|
1072
|
+
assert!(result[1].message.contains("'python' should be 'Python'"));
|
|
1073
|
+
// Should be on lines with standalone instances
|
|
1074
|
+
assert!(result[0].line == 5); // "Real javascript should be flagged."
|
|
1075
|
+
assert!(result[1].line == 9); // "Real python should be flagged too."
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
#[test]
|
|
1079
|
+
fn test_proper_names_in_images_not_flagged() {
|
|
1080
|
+
let rule = MD044ProperNames::new(vec!["JavaScript".to_string()], true);
|
|
1081
|
+
|
|
1082
|
+
let content = r#"Here is a  image.
|
|
1083
|
+
|
|
1084
|
+
Real javascript should be flagged."#;
|
|
1085
|
+
|
|
1086
|
+
let ctx = create_context(content);
|
|
1087
|
+
let result = rule.check(&ctx).unwrap();
|
|
1088
|
+
|
|
1089
|
+
// Only the standalone proper name should be flagged
|
|
1090
|
+
assert_eq!(result.len(), 1, "Expected exactly 1 warning for standalone proper name");
|
|
1091
|
+
assert!(result[0].message.contains("'javascript' should be 'JavaScript'"));
|
|
1092
|
+
assert!(result[0].line == 3); // "Real javascript should be flagged."
|
|
1093
|
+
}
|
|
1094
|
+
|
|
1095
|
+
#[test]
|
|
1096
|
+
fn test_proper_names_in_reference_definitions_not_flagged() {
|
|
1097
|
+
let rule = MD044ProperNames::new(vec!["JavaScript".to_string(), "TypeScript".to_string()], true);
|
|
1098
|
+
|
|
1099
|
+
let content = r#"Check the [javascript guide][js-ref] for details.
|
|
1100
|
+
|
|
1101
|
+
Real javascript should be flagged.
|
|
1102
|
+
|
|
1103
|
+
[js-ref]: https://javascript.info/typescript/guide"#;
|
|
1104
|
+
|
|
1105
|
+
let ctx = create_context(content);
|
|
1106
|
+
let result = rule.check(&ctx).unwrap();
|
|
1107
|
+
|
|
1108
|
+
// Only the standalone proper name should be flagged
|
|
1109
|
+
assert_eq!(result.len(), 1, "Expected exactly 1 warning for standalone proper name");
|
|
1110
|
+
assert!(result[0].message.contains("'javascript' should be 'JavaScript'"));
|
|
1111
|
+
assert!(result[0].line == 3); // "Real javascript should be flagged."
|
|
1112
|
+
}
|
|
1006
1113
|
}
|
|
@@ -2,6 +2,15 @@ use crate::rule::{Fix, LintError, LintResult, LintWarning, Rule, Severity};
|
|
|
2
2
|
use crate::rules::emphasis_style::EmphasisStyle;
|
|
3
3
|
use crate::utils::document_structure::DocumentStructure;
|
|
4
4
|
use crate::utils::emphasis_utils::{find_emphasis_markers, find_single_emphasis_spans, replace_inline_code};
|
|
5
|
+
use lazy_static::lazy_static;
|
|
6
|
+
use regex::Regex;
|
|
7
|
+
|
|
8
|
+
lazy_static! {
|
|
9
|
+
// Reference definition pattern - matches [ref]: url "title"
|
|
10
|
+
static ref REF_DEF_REGEX: Regex = Regex::new(
|
|
11
|
+
r#"(?m)^[ ]{0,3}\[([^\]]+)\]:\s*([^\s]+)(?:\s+(?:"([^"]*)"|'([^']*)'))?$"#
|
|
12
|
+
).unwrap();
|
|
13
|
+
}
|
|
5
14
|
|
|
6
15
|
mod md049_config;
|
|
7
16
|
use md049_config::MD049Config;
|
|
@@ -32,6 +41,32 @@ impl MD049EmphasisStyle {
|
|
|
32
41
|
Self { config }
|
|
33
42
|
}
|
|
34
43
|
|
|
44
|
+
/// Check if a byte position is within a link (inline links, reference links, or reference definitions)
|
|
45
|
+
fn is_in_link(&self, ctx: &crate::lint_context::LintContext, byte_pos: usize) -> bool {
|
|
46
|
+
// Check inline and reference links
|
|
47
|
+
for link in &ctx.links {
|
|
48
|
+
if link.byte_offset <= byte_pos && byte_pos < link.byte_end {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Check images (which use similar syntax)
|
|
54
|
+
for image in &ctx.images {
|
|
55
|
+
if image.byte_offset <= byte_pos && byte_pos < image.byte_end {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Check reference definitions [ref]: url "title" using regex pattern
|
|
61
|
+
for m in REF_DEF_REGEX.find_iter(ctx.content) {
|
|
62
|
+
if m.start() <= byte_pos && byte_pos < m.end() {
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
false
|
|
68
|
+
}
|
|
69
|
+
|
|
35
70
|
// Collect emphasis from a single line
|
|
36
71
|
fn collect_emphasis_from_line(
|
|
37
72
|
&self,
|
|
@@ -121,6 +156,9 @@ impl Rule for MD049EmphasisStyle {
|
|
|
121
156
|
abs_pos += line.len() + 1;
|
|
122
157
|
}
|
|
123
158
|
|
|
159
|
+
// Filter out emphasis markers that are inside links
|
|
160
|
+
emphasis_info.retain(|(_, abs_col, _, _)| !self.is_in_link(ctx, *abs_col));
|
|
161
|
+
|
|
124
162
|
match self.config.style {
|
|
125
163
|
EmphasisStyle::Consistent => {
|
|
126
164
|
// If we have less than 2 emphasis nodes, no need to check consistency
|
|
@@ -271,4 +309,40 @@ mod tests {
|
|
|
271
309
|
assert_eq!(EmphasisStyle::from("underscore"), EmphasisStyle::Underscore);
|
|
272
310
|
assert_eq!(EmphasisStyle::from("other"), EmphasisStyle::Consistent);
|
|
273
311
|
}
|
|
312
|
+
|
|
313
|
+
#[test]
|
|
314
|
+
fn test_emphasis_in_links_not_flagged() {
|
|
315
|
+
let rule = MD049EmphasisStyle::new(EmphasisStyle::Asterisk);
|
|
316
|
+
let content = r#"Check this [*asterisk*](https://example.com/*pattern*) link and [_underscore_](https://example.com/_private_).
|
|
317
|
+
|
|
318
|
+
Also see the [`__init__`][__init__] reference.
|
|
319
|
+
|
|
320
|
+
This should be _flagged_ since we're using asterisk style.
|
|
321
|
+
|
|
322
|
+
[__init__]: https://example.com/__init__.py"#;
|
|
323
|
+
let ctx = crate::lint_context::LintContext::new(content);
|
|
324
|
+
let result = rule.check(&ctx).unwrap();
|
|
325
|
+
|
|
326
|
+
// Only the real emphasis outside links should be flagged
|
|
327
|
+
assert_eq!(result.len(), 1);
|
|
328
|
+
assert!(result[0].message.contains("Emphasis should use * instead of _"));
|
|
329
|
+
// Should flag "_flagged_" but not emphasis patterns inside links
|
|
330
|
+
assert!(result[0].line == 5); // Line with "_flagged_"
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
#[test]
|
|
334
|
+
fn test_emphasis_in_links_vs_outside_links() {
|
|
335
|
+
let rule = MD049EmphasisStyle::new(EmphasisStyle::Underscore);
|
|
336
|
+
let content = r#"Check [*emphasis*](https://example.com/*test*) and inline *real emphasis* text.
|
|
337
|
+
|
|
338
|
+
[*link*]: https://example.com/*path*"#;
|
|
339
|
+
let ctx = crate::lint_context::LintContext::new(content);
|
|
340
|
+
let result = rule.check(&ctx).unwrap();
|
|
341
|
+
|
|
342
|
+
// Only the actual emphasis outside links should be flagged
|
|
343
|
+
assert_eq!(result.len(), 1);
|
|
344
|
+
assert!(result[0].message.contains("Emphasis should use _ instead of *"));
|
|
345
|
+
// Should be the "real emphasis" text on line 1
|
|
346
|
+
assert!(result[0].line == 1);
|
|
347
|
+
}
|
|
274
348
|
}
|