rumdl 0.0.156__tar.gz → 0.0.157__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.156 → rumdl-0.0.157}/CHANGELOG.md +185 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/Cargo.lock +1 -1
- {rumdl-0.0.156 → rumdl-0.0.157}/Cargo.toml +1 -1
- {rumdl-0.0.156 → rumdl-0.0.157}/PKG-INFO +1 -1
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md042.md +28 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/config.rs +7 -4
- {rumdl-0.0.156 → rumdl-0.0.157}/src/lsp/server.rs +69 -3
- {rumdl-0.0.156 → rumdl-0.0.157}/src/main.rs +60 -19
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md034_no_bare_urls.rs +15 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md042_no_empty_links.rs +150 -18
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/code_block_utils.rs +31 -7
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/mkdocs_patterns.rs +33 -5
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/cli_integration_tests.rs +38 -53
- rumdl-0.0.157/tests/code_block_blockquote_edge_cases.rs +243 -0
- rumdl-0.0.157/tests/exclude_with_explicit_paths_test.rs +225 -0
- rumdl-0.0.157/tests/mkdocs_anchor_edge_cases_test.rs +338 -0
- rumdl-0.0.157/tests/mkdocs_anchor_test.rs +115 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/link_edge_cases_test.rs +18 -8
- rumdl-0.0.157/tests/rules/md033_blockquote_test.rs +282 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md034_test.rs +69 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md042_test.rs +91 -15
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md051_comprehensive_test.rs +3 -2
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/mod.rs +1 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/.config/nextest.toml +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/.mise.toml +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/.pre-commit-config.yaml +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/.rumdl.toml +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/.rustfmt.toml +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/LICENSE +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/MANIFEST.in +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/Makefile +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/README.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/assets/logo.png +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/benches/fix_performance.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/benches/range_performance.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/benches/range_utils_benchmark.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/benches/rule_performance.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/benches/simple_fix_bench.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/benchmark/bin/bench_lint_context.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/benchmark/bin/benchmark.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/benchmark/bin/benchmark_rule.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/benchmark/bin/file_parallel_benchmark.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/benchmark/bin/measure_code_span_performance.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/LINTCONTEXT_OPTIMIZATION_PLAN.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/LINTCONTEXT_OPTIMIZATION_SUMMARY.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/LINTCONTEXT_PERFORMANCE_ANALYSIS.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/PHASE_2_OPTIMIZATION_COMPLETE.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/PHASE_3_OPTIMIZATION_COMPLETE.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/RULES.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/global-settings.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/inline-configuration.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md001.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md002.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md003.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md004.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md005.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md006.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md007.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md009.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md010.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md011.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md012.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md013.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md014.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md018.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md019.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md020.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md021.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md022.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md023.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md024.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md025.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md026.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md027.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md028.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md029.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md030.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md031.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md032.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md033.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md034.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md035.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md036.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md037.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md038.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md039.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md040.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md041.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md043.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md044.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md045.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md046.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md047.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md048.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md049.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md050.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md051.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md052.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md053.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md054.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md055.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md056.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md057.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/md058.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/docs/vscode-extension.md +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/parity_check.py +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/pyproject.toml +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/rumdl/__init__.py +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/rumdl/__main__.py +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/rumdl/py.typed +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/rumdl.schema.json +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/rumdl.toml.example +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/rust-toolchain.toml +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/scripts/extract-changelog.sh +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/scripts/generate-downloads-table.sh +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/scripts/pre-release.sh +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/scripts/prepare-release.sh +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/scripts/setup-pre-commit.sh +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/scripts/update-pre-commit-docs.sh +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/exit_codes.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/fix_coordinator.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/inline_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/lib.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/lint_context.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/lsp/mod.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/lsp/types.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/markdownlint_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/output/formatters/azure.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/output/formatters/concise.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/output/formatters/github.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/output/formatters/gitlab.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/output/formatters/grouped.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/output/formatters/json.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/output/formatters/json_lines.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/output/formatters/junit.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/output/formatters/mod.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/output/formatters/pylint.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/output/formatters/sarif.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/output/formatters/text.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/output/mod.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/parallel.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/performance.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/profiling.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rule.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rule_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rule_config_serde.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/blockquote_utils.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/code_block_utils.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/code_fence_utils.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/emphasis_style.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/front_matter_utils.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/heading_utils.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/list_utils.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md001_heading_increment.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md002_first_heading_h1/md002_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md002_first_heading_h1.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md003_heading_style/md003_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md003_heading_style.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md004_unordered_list_style/md004_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md004_unordered_list_style.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md005_list_indent.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md006_start_bullets.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md007_ul_indent/md007_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md007_ul_indent.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md009_trailing_spaces/md009_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md009_trailing_spaces.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md010_no_hard_tabs/md010_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md010_no_hard_tabs.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md011_no_reversed_links.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md012_no_multiple_blanks/md012_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md012_no_multiple_blanks.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md013_line_length/md013_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md013_line_length.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md014_commands_show_output/md014_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md014_commands_show_output.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md018_no_missing_space_atx.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md019_no_multiple_space_atx.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md022_blanks_around_headings/md022_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md022_blanks_around_headings.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md023_heading_start_left.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md024_no_duplicate_heading/md024_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md024_no_duplicate_heading.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md025_single_title/md025_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md025_single_title.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md026_no_trailing_punctuation/md026_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md026_no_trailing_punctuation.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md028_no_blanks_blockquote.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md029_ordered_list_prefix/md029_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md029_ordered_list_prefix.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md030_list_marker_space/md030_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md030_list_marker_space.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md031_blanks_around_fences.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md032_blanks_around_lists.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md033_no_inline_html/md033_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md033_no_inline_html.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md035_hr_style/md035_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md035_hr_style.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md036_no_emphasis_only_first/md036_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md036_no_emphasis_only_first.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md037_spaces_around_emphasis.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md038_no_space_in_code.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md039_no_space_in_links.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md040_fenced_code_language.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md041_first_line_heading.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md043_required_headings.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md044_proper_names/md044_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md044_proper_names.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md045_no_alt_text/md045_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md045_no_alt_text.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md046_code_block_style/md046_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md046_code_block_style.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md047_single_trailing_newline.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md048_code_fence_style/md048_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md048_code_fence_style.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md049_emphasis_style/md049_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md049_emphasis_style.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md050_strong_style/md050_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md050_strong_style.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md051_link_fragments.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md052_reference_links_images.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md053_link_image_reference_definitions.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md054_link_image_style/md054_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md054_link_image_style.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md055_table_pipe_style/md055_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md055_table_pipe_style.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md056_table_column_count.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md057_existing_relative_links/md057_config.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md057_existing_relative_links.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md058_blanks_around_tables.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/mod.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/strong_style.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/anchor_styles/github.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/anchor_styles/jekyll.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/anchor_styles/kramdown.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/anchor_styles/kramdown_gfm.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/anchor_styles/mod.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/ast_utils.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/document_structure.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/early_returns.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/element_cache.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/emphasis_utils.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/fix_utils.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/header_id_utils.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/jinja_utils.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/kramdown_utils.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/line_ending.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/markdown_elements.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/mkdocs_admonitions.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/mkdocs_common.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/mkdocs_critic.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/mkdocs_footnotes.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/mkdocs_snippets.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/mkdocs_tabs.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/mkdocs_test_utils.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/mkdocstrings_refs.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/mod.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/range_utils.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/regex_cache.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/skip_context.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/string_interner.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/table_utils.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/text_reflow.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/src/vscode.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/advanced_integration_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/character_ranges/additional_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/character_ranges/basic_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/character_ranges/comprehensive_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/character_ranges/extended_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/character_ranges/mod.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/character_ranges/unicode_utils.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/cli_duplication_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/cli_explain_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/cli_flag_precedence_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/cli_lsp_fix_consistency.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/cli_statistics_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/common/cli_test_utils.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/common/fixtures.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/common/mod.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/common/test_utils.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/commonmark_compliance_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/comprehensive_integration_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/comprehensive_output_format_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/config_application_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/config_file_command_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/config_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/config_upward_traversal_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/configuration_inheritance_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/consistency_regression_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/cross_platform_compatibility_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/deeply_nested_lists_performance_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/escaped_brackets_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/final_confidence_assessment.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/fix_counting_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/fix_performance_baseline_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/fixable_unfixable_config_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/init_command_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/init_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/inline_config_blocks_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/inline_config_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/integration_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/json_output_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/kramdown_integration_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/lib.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/lsp_editor_integration_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/lsp_formatting_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/lsp_initialization_options_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/lsp_integration_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/lsp_memory_leak_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/lsp_mkdocs_flavor_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/lsp_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/lsp_unopened_document_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/malformed_markdown_stress_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/markdownlint_cli_integration.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/markdownlint_config_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/markdownlintignore_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/md009_md013_integration_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/md009_md013_order_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/md013_hard_breaks_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/md013_reflow_integration_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/md032_edge_cases_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/md032_ordered_list_bug_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/md033_edge_cases_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/md037_xxxx_regression_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/md038_false_positive_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/md051_issue_39_regression_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/md051_readme_bug_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/md051_toc_bug_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/md052_literal_brackets_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/md054_code_span_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/nested_code_block_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/output_format_integration_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/output_format_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/per_file_ignores_integration_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/perf_check.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/performance_validation_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/pyproject_config_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/real_world_repository_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/regression_prevention_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/emphasis_edge_cases_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/heading_edge_cases_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/inline_content_edge_cases_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/list_rules_integration_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md001_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md001_unicode_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md002_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md003_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md004_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md005_dynamic_indent_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md005_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md005_unicode_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md006_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md006_unicode_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md007_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md009_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md010_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md011_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md012_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md013_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md014_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md018_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md019_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md020_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md021_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md022_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md023_extended_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md023_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md024_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md025_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md026_kramdown_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md026_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md027_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md028_md009_interaction_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md028_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md029_code_block_separation_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md029_fix_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md029_issue42_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md029_markdownlint_parity_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md029_pathological_edge_cases_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md029_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md029_unicode_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md030_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md031_kramdown_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md031_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md032_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md033_extended_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md033_kramdown_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md033_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md034_ipv6_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md035_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md036_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md037_kramdown_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md037_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md038_nested_backticks_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md038_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md039_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md040_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md041_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md043_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md044_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md045_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md046_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md047_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md048_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md049_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md050_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md051_critical_edge_cases_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md051_edge_cases_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md051_issue_39_regression_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md051_performance_edge_cases_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md051_property_based_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md051_regression_prevention_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md051_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md051_unicode_security_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md052_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md053_additional_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md053_proptest.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md053_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md054_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md054_unicode_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md055_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md056_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md057_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md058_kramdown_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md058_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/mkdocs_admonitions_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/mkdocs_edge_cases_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/mkdocs_extensions_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/mkdocs_snippets_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/rule_interaction_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules_mod_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/sentence_per_line_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/skip_context_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/test_ast_code_block_issue.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/test_gfm_vs_default_parsing.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/test_lint_context_flow.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/test_list_ast_structure.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/test_multiline_ast.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/test_underscore_edge_cases.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/thread_safety_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/unfixable_rules_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/unicode_edge_case_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/utf8_boundary_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/utils/blockquote_utils_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/utils/code_block_utils_extended_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/utils/code_block_utils_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/utils/core_utils_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/utils/front_matter_utils_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/utils/line_index_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/utils/mod.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/utils_markdown_edge_cases.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/utils_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/vscode_extension_fixes.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/vscode_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/vscode_tests.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/vscode_windows_comprehensive_test.rs +0 -0
- {rumdl-0.0.156 → rumdl-0.0.157}/tests/vscode_windows_test.rs +0 -0
|
@@ -7,6 +7,191 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.0.157] - 2025-10-13 (unreleased)
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **MD042**: Full support for MkDocs paragraph anchors (#100)
|
|
15
|
+
- Recognize Python-Markdown `attr_list` extension syntax: `[](){ #anchor }`
|
|
16
|
+
- Support for both anchor IDs (`#id`) and CSS classes (`.class`)
|
|
17
|
+
- Support optional colon syntax: `[](){: #anchor }`
|
|
18
|
+
- UTF-8 boundary validation and DoS prevention (500 char limit)
|
|
19
|
+
- 28 comprehensive tests covering edge cases
|
|
20
|
+
- Complete documentation with links to official Python-Markdown specs
|
|
21
|
+
- References: [attr_list](https://python-markdown.github.io/extensions/attr_list/), [mkdocs-autorefs](https://mkdocstrings.github.io/autorefs/)
|
|
22
|
+
|
|
23
|
+
- **MD042**: Smart URL detection in empty links (#104)
|
|
24
|
+
- When link text looks like a URL (e.g., `[https://example.com]()`), use it as the destination
|
|
25
|
+
- Supports http://, https://, ftp://, ftps:// protocols
|
|
26
|
+
- More intelligent fixes than placeholder URLs
|
|
27
|
+
|
|
28
|
+
- **Always respect exclude patterns by default** (#99)
|
|
29
|
+
- Exclude patterns now always respected, even for explicitly provided files
|
|
30
|
+
- Matches behavior of ESLint, Pylint, Mypy
|
|
31
|
+
- Added `--no-exclude` flag to disable all exclusions when needed
|
|
32
|
+
- LSP support for exclude patterns
|
|
33
|
+
- Shows warnings with actionable hints when excluding files
|
|
34
|
+
|
|
35
|
+
- **Hidden directory scanning** (#102)
|
|
36
|
+
- Now scans hidden directories (like `.documentation`) by default
|
|
37
|
+
- More thorough markdown file discovery
|
|
38
|
+
|
|
39
|
+
### Fixed
|
|
40
|
+
|
|
41
|
+
- **MD033**: Code blocks in blockquotes false positives (#105)
|
|
42
|
+
- Fixed incorrect flagging of HTML tags inside fenced code blocks within blockquotes
|
|
43
|
+
- Properly strips blockquote markers before detecting fence markers
|
|
44
|
+
- 25 new tests covering nested blockquotes and edge cases
|
|
45
|
+
|
|
46
|
+
- **MD034**: Empty link construct false positives (#104)
|
|
47
|
+
- Fixed incorrect flagging of URLs in `[url]()` and `[url][]` patterns
|
|
48
|
+
- Prevents text corruption during formatting
|
|
49
|
+
- Added patterns to properly exclude empty link constructs
|
|
50
|
+
|
|
51
|
+
- **MD042**: Improved fix quality
|
|
52
|
+
- Removed "useless" placeholder fixes that just create new problems
|
|
53
|
+
- Only provides fixes when we have enough information for valid links
|
|
54
|
+
- No longer auto-fixes `[]()` or `[text]()` with placeholders
|
|
55
|
+
|
|
56
|
+
### Changed
|
|
57
|
+
|
|
58
|
+
- **BREAKING**: Exclude patterns now always respected by default
|
|
59
|
+
- Previously: `--force-exclude` flag needed to respect excludes for explicit files
|
|
60
|
+
- Now: Excludes always respected by default
|
|
61
|
+
- Migration: Use `--no-exclude` flag if you need the old behavior
|
|
62
|
+
|
|
63
|
+
## [0.0.156] - 2025-10-08
|
|
64
|
+
|
|
65
|
+
### Fixed
|
|
66
|
+
|
|
67
|
+
- **Build**: Removed feature-gated benchmark binaries that were causing unnecessary reinstalls
|
|
68
|
+
- Benchmark binaries now only built when explicitly requested
|
|
69
|
+
- Reduces package size and installation time
|
|
70
|
+
|
|
71
|
+
## [0.0.155] - 2025-10-08
|
|
72
|
+
|
|
73
|
+
### Fixed
|
|
74
|
+
|
|
75
|
+
- **PyPI Package**: Fixed package structure by removing unused cdylib and dependencies
|
|
76
|
+
- Removed unnecessary C dynamic library configuration
|
|
77
|
+
- Cleaner Python package distribution
|
|
78
|
+
|
|
79
|
+
## [0.0.154] - 2025-10-08
|
|
80
|
+
|
|
81
|
+
### Fixed
|
|
82
|
+
|
|
83
|
+
- **MD013**: Implemented segment-based reflow to preserve hard breaks
|
|
84
|
+
- Properly handles double-space line breaks
|
|
85
|
+
- Integration tests updated for new behavior
|
|
86
|
+
|
|
87
|
+
### Performance
|
|
88
|
+
|
|
89
|
+
- **MD034**: Reuse buffers to reduce per-line allocations
|
|
90
|
+
- **MD005**: Eliminate LineIndex creation overhead
|
|
91
|
+
- **MD030**: Eliminate O(n²) complexity by caching line collection
|
|
92
|
+
|
|
93
|
+
### Documentation
|
|
94
|
+
|
|
95
|
+
- Organized LintContext optimization documentation
|
|
96
|
+
|
|
97
|
+
## [0.0.153] - 2025-10-07
|
|
98
|
+
|
|
99
|
+
### Performance
|
|
100
|
+
|
|
101
|
+
- **Major optimization**: 54 rules now use LintContext character frequency caching
|
|
102
|
+
- Significant performance improvement across the board
|
|
103
|
+
- Reduced redundant scanning of document content
|
|
104
|
+
|
|
105
|
+
- **MD051**: Optimized link fragment validation
|
|
106
|
+
- Faster processing of heading anchors and fragments
|
|
107
|
+
|
|
108
|
+
### Fixed
|
|
109
|
+
|
|
110
|
+
- **MD013**: Improved nested list handling in reflow mode
|
|
111
|
+
- Better preservation of list structure during reformatting
|
|
112
|
+
|
|
113
|
+
## [0.0.152] - 2025-10-06
|
|
114
|
+
|
|
115
|
+
### Fixed
|
|
116
|
+
|
|
117
|
+
- **MD013**: Multi-paragraph list reflow improvements and refactoring
|
|
118
|
+
- Better handling of complex list structures
|
|
119
|
+
- More reliable paragraph detection within lists
|
|
120
|
+
|
|
121
|
+
## [0.0.151] - 2025-10-05
|
|
122
|
+
|
|
123
|
+
### Fixed
|
|
124
|
+
|
|
125
|
+
- **MD007**: Fixed tab indentation and cascade behavior
|
|
126
|
+
- Properly handles tabs in list indentation
|
|
127
|
+
- Correct cascade behavior matching markdownlint
|
|
128
|
+
|
|
129
|
+
## [0.0.150] - 2025-10-04
|
|
130
|
+
|
|
131
|
+
### Fixed
|
|
132
|
+
|
|
133
|
+
- **MD007**: Multiple fixes for list indentation
|
|
134
|
+
- Correct blockquote list handling
|
|
135
|
+
- Fixed text-aligned indentation to match markdownlint cascade behavior
|
|
136
|
+
- Updated test expectations for cascade behavior
|
|
137
|
+
|
|
138
|
+
## [0.0.149] - 2025-10-03
|
|
139
|
+
|
|
140
|
+
### Added
|
|
141
|
+
|
|
142
|
+
- **Configuration**: JSON Schema for rumdl.toml configuration (#89)
|
|
143
|
+
- IDE autocomplete and validation support
|
|
144
|
+
- Better configuration documentation
|
|
145
|
+
|
|
146
|
+
- **Configuration**: Per-file rule ignores (#92)
|
|
147
|
+
- Glob pattern support for ignoring rules on specific files
|
|
148
|
+
- Example: `[per-file-ignores] "docs/*.md" = ["MD013"]`
|
|
149
|
+
|
|
150
|
+
## [0.0.148] - 2025-10-02
|
|
151
|
+
|
|
152
|
+
### Fixed
|
|
153
|
+
|
|
154
|
+
- **MD042**: Display improvements
|
|
155
|
+
- Show exact source text in error messages
|
|
156
|
+
- Correct display of shorthand reference links
|
|
157
|
+
|
|
158
|
+
- **MkDocs**: Strip backticks from MkDocs auto-references (#97)
|
|
159
|
+
- Prevents false positives on `` [`module.Class`][] `` patterns
|
|
160
|
+
|
|
161
|
+
## [0.0.147] - 2025-10-01
|
|
162
|
+
|
|
163
|
+
### Added
|
|
164
|
+
|
|
165
|
+
- **MkDocs**: Added mkdocstrings support (#94)
|
|
166
|
+
- Recognizes mkdocstrings YAML options
|
|
167
|
+
- Multiple rules migrated to use LintContext for better MkDocs handling
|
|
168
|
+
|
|
169
|
+
### Fixed
|
|
170
|
+
|
|
171
|
+
- **MD041**: Removed auto-fix capability (#93)
|
|
172
|
+
- Auto-fixing front-heading violations was unreliable
|
|
173
|
+
- Now only reports issues without attempting fixes
|
|
174
|
+
|
|
175
|
+
- **MD026**: Corrected documentation to match implementation (#95)
|
|
176
|
+
- Documentation now accurately reflects punctuation handling
|
|
177
|
+
|
|
178
|
+
- **Jinja2**: Added Jinja2 template support (#96)
|
|
179
|
+
- Prevents false positives in template syntax
|
|
180
|
+
- Better support for MkDocs projects using Jinja2
|
|
181
|
+
|
|
182
|
+
- **MD013**: Prevent false positives for already-reflowed content
|
|
183
|
+
- Smarter detection of intentional line breaks
|
|
184
|
+
|
|
185
|
+
- **MD034**: Properly excludes URLs/emails in code spans and HTML
|
|
186
|
+
- No more false positives on inline code URLs
|
|
187
|
+
|
|
188
|
+
- **MD054**: Fixed column indexing bug
|
|
189
|
+
- Correct error position reporting
|
|
190
|
+
|
|
191
|
+
- **MD033 & MD032**: Resolved false positives (#90, #91)
|
|
192
|
+
- More accurate HTML tag detection
|
|
193
|
+
- Better handling of code blocks
|
|
194
|
+
|
|
10
195
|
## [0.0.146] - 2025-09-24
|
|
11
196
|
|
|
12
197
|
### Added
|
|
@@ -67,6 +67,34 @@ When enabled, this rule will:
|
|
|
67
67
|
- Reference-style links are checked for both parts
|
|
68
68
|
- Links with only whitespace are considered empty
|
|
69
69
|
|
|
70
|
+
### MkDocs mode
|
|
71
|
+
|
|
72
|
+
When using MkDocs flavor (`flavor = "mkdocs"`), this rule recognizes valid MkDocs-specific syntax:
|
|
73
|
+
|
|
74
|
+
**Auto-references** (backtick-wrapped Python identifiers):
|
|
75
|
+
|
|
76
|
+
```markdown
|
|
77
|
+
[`module.Class`][] <!-- Valid MkDocs auto-reference -->
|
|
78
|
+
[`str`][] <!-- Valid Python type reference -->
|
|
79
|
+
[`api.function`][] <!-- Valid API reference -->
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Paragraph anchors** (using Python-Markdown attr_list extension):
|
|
83
|
+
|
|
84
|
+
```markdown
|
|
85
|
+
[](){ #my-anchor } <!-- Valid anchor point -->
|
|
86
|
+
[](){ #anchor .class } <!-- Valid anchor with CSS class -->
|
|
87
|
+
[](){: #anchor } <!-- Valid with colon syntax -->
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
These patterns create anchor points in documentation and are widely used in MkDocs projects with the `attr_list` extension.
|
|
91
|
+
|
|
92
|
+
**References:**
|
|
93
|
+
|
|
94
|
+
- [Python-Markdown attr_list extension](https://python-markdown.github.io/extensions/attr_list/)
|
|
95
|
+
- [mkdocs-autorefs plugin](https://mkdocstrings.github.io/autorefs/)
|
|
96
|
+
- [MkDocs auto-references discussion](https://github.com/mkdocs/mkdocs/discussions/3754)
|
|
97
|
+
|
|
70
98
|
## Learn more
|
|
71
99
|
|
|
72
100
|
- [CommonMark specification for links](https://spec.commonmark.org/0.31.2/#links)
|
|
@@ -251,11 +251,12 @@ pub struct GlobalConfig {
|
|
|
251
251
|
#[serde(default)]
|
|
252
252
|
pub flavor: MarkdownFlavor,
|
|
253
253
|
|
|
254
|
-
/// Whether to enforce exclude
|
|
255
|
-
///
|
|
256
|
-
///
|
|
257
|
-
/// This
|
|
254
|
+
/// [DEPRECATED] Whether to enforce exclude patterns for explicitly passed paths.
|
|
255
|
+
/// This option is deprecated as of v0.0.156 and has no effect.
|
|
256
|
+
/// Exclude patterns are now always respected, even for explicitly provided files.
|
|
257
|
+
/// This prevents duplication between rumdl config and tool configs like pre-commit.
|
|
258
258
|
#[serde(default)]
|
|
259
|
+
#[deprecated(since = "0.0.156", note = "Exclude patterns are now always respected")]
|
|
259
260
|
pub force_exclude: bool,
|
|
260
261
|
}
|
|
261
262
|
|
|
@@ -269,6 +270,7 @@ fn default_line_length() -> u64 {
|
|
|
269
270
|
|
|
270
271
|
// Add the Default impl
|
|
271
272
|
impl Default for GlobalConfig {
|
|
273
|
+
#[allow(deprecated)]
|
|
272
274
|
fn default() -> Self {
|
|
273
275
|
Self {
|
|
274
276
|
enable: Vec::new(),
|
|
@@ -1962,6 +1964,7 @@ impl From<SourcedConfig> for Config {
|
|
|
1962
1964
|
}
|
|
1963
1965
|
rules.insert(normalized_rule_name, RuleConfig { values });
|
|
1964
1966
|
}
|
|
1967
|
+
#[allow(deprecated)]
|
|
1965
1968
|
let global = GlobalConfig {
|
|
1966
1969
|
enable: sourced.global.enable.value,
|
|
1967
1970
|
disable: sourced.global.disable.value,
|
|
@@ -41,7 +41,8 @@ pub struct RumdlLanguageServer {
|
|
|
41
41
|
/// Configuration for the LSP server
|
|
42
42
|
config: Arc<RwLock<RumdlLspConfig>>,
|
|
43
43
|
/// Rumdl core configuration
|
|
44
|
-
|
|
44
|
+
#[cfg_attr(test, allow(dead_code))]
|
|
45
|
+
pub(crate) rumdl_config: Arc<RwLock<Config>>,
|
|
45
46
|
/// Document store for open files and cached disk files
|
|
46
47
|
documents: Arc<RwLock<HashMap<Url, DocumentEntry>>>,
|
|
47
48
|
}
|
|
@@ -118,8 +119,63 @@ impl RumdlLanguageServer {
|
|
|
118
119
|
filtered_rules
|
|
119
120
|
}
|
|
120
121
|
|
|
122
|
+
/// Check if a file URI should be excluded based on exclude patterns
|
|
123
|
+
async fn should_exclude_uri(&self, uri: &Url) -> bool {
|
|
124
|
+
// Try to convert URI to file path
|
|
125
|
+
let file_path = match uri.to_file_path() {
|
|
126
|
+
Ok(path) => path,
|
|
127
|
+
Err(_) => return false, // If we can't get a path, don't exclude
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
let rumdl_config = self.rumdl_config.read().await;
|
|
131
|
+
let exclude_patterns = &rumdl_config.global.exclude;
|
|
132
|
+
|
|
133
|
+
// If no exclude patterns, don't exclude
|
|
134
|
+
if exclude_patterns.is_empty() {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Convert path to relative path for pattern matching
|
|
139
|
+
// This matches the CLI behavior in find_markdown_files
|
|
140
|
+
let path_to_check = if file_path.is_absolute() {
|
|
141
|
+
// Try to make it relative to the current directory
|
|
142
|
+
if let Ok(cwd) = std::env::current_dir() {
|
|
143
|
+
// Canonicalize both paths to handle symlinks
|
|
144
|
+
if let (Ok(canonical_cwd), Ok(canonical_path)) = (cwd.canonicalize(), file_path.canonicalize()) {
|
|
145
|
+
if let Ok(relative) = canonical_path.strip_prefix(&canonical_cwd) {
|
|
146
|
+
relative.to_string_lossy().to_string()
|
|
147
|
+
} else {
|
|
148
|
+
// Path is absolute but not under cwd
|
|
149
|
+
file_path.to_string_lossy().to_string()
|
|
150
|
+
}
|
|
151
|
+
} else {
|
|
152
|
+
// Canonicalization failed
|
|
153
|
+
file_path.to_string_lossy().to_string()
|
|
154
|
+
}
|
|
155
|
+
} else {
|
|
156
|
+
file_path.to_string_lossy().to_string()
|
|
157
|
+
}
|
|
158
|
+
} else {
|
|
159
|
+
// Already relative
|
|
160
|
+
file_path.to_string_lossy().to_string()
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
// Check if path matches any exclude pattern
|
|
164
|
+
for pattern in exclude_patterns {
|
|
165
|
+
if let Ok(glob) = globset::Glob::new(pattern) {
|
|
166
|
+
let matcher = glob.compile_matcher();
|
|
167
|
+
if matcher.is_match(&path_to_check) {
|
|
168
|
+
log::debug!("Excluding file from LSP linting: {path_to_check}");
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
false
|
|
175
|
+
}
|
|
176
|
+
|
|
121
177
|
/// Lint a document and return diagnostics
|
|
122
|
-
async fn lint_document(&self, uri: &Url, text: &str) -> Result<Vec<Diagnostic>> {
|
|
178
|
+
pub(crate) async fn lint_document(&self, uri: &Url, text: &str) -> Result<Vec<Diagnostic>> {
|
|
123
179
|
let config_guard = self.config.read().await;
|
|
124
180
|
|
|
125
181
|
// Skip linting if disabled
|
|
@@ -130,6 +186,11 @@ impl RumdlLanguageServer {
|
|
|
130
186
|
let lsp_config = config_guard.clone();
|
|
131
187
|
drop(config_guard); // Release config lock early
|
|
132
188
|
|
|
189
|
+
// Check if file should be excluded based on exclude patterns
|
|
190
|
+
if self.should_exclude_uri(uri).await {
|
|
191
|
+
return Ok(Vec::new());
|
|
192
|
+
}
|
|
193
|
+
|
|
133
194
|
// Get rumdl configuration
|
|
134
195
|
let rumdl_config = self.rumdl_config.read().await;
|
|
135
196
|
let all_rules = rules::all_rules(&rumdl_config);
|
|
@@ -168,7 +229,12 @@ impl RumdlLanguageServer {
|
|
|
168
229
|
}
|
|
169
230
|
|
|
170
231
|
/// Apply all available fixes to a document
|
|
171
|
-
async fn apply_all_fixes(&self,
|
|
232
|
+
async fn apply_all_fixes(&self, uri: &Url, text: &str) -> Result<Option<String>> {
|
|
233
|
+
// Check if file should be excluded based on exclude patterns
|
|
234
|
+
if self.should_exclude_uri(uri).await {
|
|
235
|
+
return Ok(None);
|
|
236
|
+
}
|
|
237
|
+
|
|
172
238
|
let config_guard = self.config.read().await;
|
|
173
239
|
let lsp_config = config_guard.clone();
|
|
174
240
|
drop(config_guard);
|
|
@@ -254,6 +254,10 @@ struct CheckArgs {
|
|
|
254
254
|
#[arg(long)]
|
|
255
255
|
exclude: Option<String>,
|
|
256
256
|
|
|
257
|
+
/// Disable all exclude patterns (lint all files regardless of exclude configuration)
|
|
258
|
+
#[arg(long, help = "Disable all exclude patterns")]
|
|
259
|
+
no_exclude: bool,
|
|
260
|
+
|
|
257
261
|
/// Include only specific files or directories (comma-separated glob patterns).
|
|
258
262
|
#[arg(long)]
|
|
259
263
|
include: Option<String>,
|
|
@@ -532,8 +536,10 @@ fn find_markdown_files(
|
|
|
532
536
|
Vec::new()
|
|
533
537
|
};
|
|
534
538
|
|
|
535
|
-
// Exclude patterns: CLI > Config
|
|
536
|
-
let final_exclude_patterns: Vec<String> = if
|
|
539
|
+
// Exclude patterns: CLI > Config (but disabled if --no-exclude is set)
|
|
540
|
+
let final_exclude_patterns: Vec<String> = if args.no_exclude {
|
|
541
|
+
Vec::new() // Disable all exclusions
|
|
542
|
+
} else if let Some(cli_exclude) = args.exclude.as_deref() {
|
|
537
543
|
cli_exclude
|
|
538
544
|
.split(',')
|
|
539
545
|
.map(|p| p.trim().to_string())
|
|
@@ -599,7 +605,7 @@ fn find_markdown_files(
|
|
|
599
605
|
walk_builder.git_global(use_gitignore); // Enable/disable global gitignore
|
|
600
606
|
walk_builder.git_exclude(use_gitignore); // Enable/disable .git/info/exclude
|
|
601
607
|
walk_builder.parents(use_gitignore); // Enable/disable parent ignores
|
|
602
|
-
walk_builder.hidden(
|
|
608
|
+
walk_builder.hidden(false); // Include hidden files and directories
|
|
603
609
|
walk_builder.require_git(false); // Process git ignores even if no repo detected
|
|
604
610
|
|
|
605
611
|
// Add support for .markdownlintignore file
|
|
@@ -608,8 +614,7 @@ fn find_markdown_files(
|
|
|
608
614
|
// --- Pre-check for explicit file paths ---
|
|
609
615
|
// If not in discovery mode, validate that specified paths exist
|
|
610
616
|
if !is_discovery_mode {
|
|
611
|
-
|
|
612
|
-
let should_force_exclude = args.force_exclude || config.global.force_exclude;
|
|
617
|
+
let mut processed_explicit_files = false;
|
|
613
618
|
|
|
614
619
|
for path_str in paths {
|
|
615
620
|
let path = Path::new(path_str);
|
|
@@ -621,42 +626,68 @@ fn find_markdown_files(
|
|
|
621
626
|
&& let Some(ext) = path.extension()
|
|
622
627
|
&& (ext == "md" || ext == "markdown")
|
|
623
628
|
{
|
|
624
|
-
|
|
629
|
+
processed_explicit_files = true;
|
|
630
|
+
// Convert to relative path for pattern matching
|
|
631
|
+
// This ensures patterns like "docs/*" work with both relative and absolute paths
|
|
632
|
+
let cleaned_path = if path.is_absolute() {
|
|
633
|
+
// Try to make it relative to the current directory
|
|
634
|
+
// Use canonicalized paths to handle symlinks (e.g., /tmp -> /private/tmp on macOS)
|
|
635
|
+
if let Ok(cwd) = std::env::current_dir() {
|
|
636
|
+
// Canonicalize both paths to resolve symlinks
|
|
637
|
+
if let (Ok(canonical_cwd), Ok(canonical_path)) = (cwd.canonicalize(), path.canonicalize()) {
|
|
638
|
+
if let Ok(relative) = canonical_path.strip_prefix(&canonical_cwd) {
|
|
639
|
+
relative.to_string_lossy().to_string()
|
|
640
|
+
} else {
|
|
641
|
+
// Path is absolute but not under cwd, keep as-is
|
|
642
|
+
path_str.clone()
|
|
643
|
+
}
|
|
644
|
+
} else {
|
|
645
|
+
// Canonicalization failed, keep path as-is
|
|
646
|
+
path_str.clone()
|
|
647
|
+
}
|
|
648
|
+
} else {
|
|
649
|
+
path_str.clone()
|
|
650
|
+
}
|
|
651
|
+
} else if let Some(stripped) = path_str.strip_prefix("./") {
|
|
625
652
|
stripped.to_string()
|
|
626
653
|
} else {
|
|
627
654
|
path_str.clone()
|
|
628
655
|
};
|
|
629
656
|
|
|
630
|
-
//
|
|
631
|
-
|
|
632
|
-
|
|
657
|
+
// Check if this file should be excluded based on exclude patterns
|
|
658
|
+
// This is the default behavior to match user expectations and avoid
|
|
659
|
+
// duplication between rumdl config and pre-commit config (issue #99)
|
|
660
|
+
if !final_exclude_patterns.is_empty() {
|
|
661
|
+
let mut matching_pattern: Option<&str> = None;
|
|
633
662
|
for pattern in &final_exclude_patterns {
|
|
634
663
|
// Use globset for pattern matching
|
|
635
664
|
if let Ok(glob) = globset::Glob::new(pattern) {
|
|
636
665
|
let matcher = glob.compile_matcher();
|
|
637
666
|
if matcher.is_match(&cleaned_path) {
|
|
638
|
-
|
|
639
|
-
if args.verbose {
|
|
640
|
-
eprintln!(
|
|
641
|
-
"Excluding explicitly provided file due to force_exclude: {cleaned_path}"
|
|
642
|
-
);
|
|
643
|
-
}
|
|
667
|
+
matching_pattern = Some(pattern);
|
|
644
668
|
break;
|
|
645
669
|
}
|
|
646
670
|
}
|
|
647
671
|
}
|
|
648
|
-
if
|
|
672
|
+
if let Some(pattern) = matching_pattern {
|
|
673
|
+
// Always print a warning when excluding explicitly provided files
|
|
674
|
+
// This matches ESLint's behavior and helps users understand why the file wasn't linted
|
|
675
|
+
eprintln!(
|
|
676
|
+
"warning: {cleaned_path} ignored because of exclude pattern '{pattern}'. Use --no-exclude to override"
|
|
677
|
+
);
|
|
678
|
+
} else {
|
|
649
679
|
file_paths.push(cleaned_path);
|
|
650
680
|
}
|
|
651
681
|
} else {
|
|
652
|
-
//
|
|
682
|
+
// No exclude patterns, add the file
|
|
653
683
|
file_paths.push(cleaned_path);
|
|
654
684
|
}
|
|
655
685
|
}
|
|
656
686
|
}
|
|
657
687
|
|
|
658
|
-
// If we
|
|
659
|
-
|
|
688
|
+
// If we processed explicit files, return the results (even if empty due to exclusions)
|
|
689
|
+
// This prevents the walker from running when explicit files were provided
|
|
690
|
+
if processed_explicit_files {
|
|
660
691
|
file_paths.sort();
|
|
661
692
|
file_paths.dedup();
|
|
662
693
|
return Ok(file_paths);
|
|
@@ -2532,6 +2563,16 @@ fn run_check(args: &CheckArgs, global_config_path: Option<&str>, isolated: bool)
|
|
|
2532
2563
|
exit::tool_error();
|
|
2533
2564
|
}
|
|
2534
2565
|
|
|
2566
|
+
// Warn about deprecated --force-exclude flag
|
|
2567
|
+
if args.force_exclude {
|
|
2568
|
+
eprintln!(
|
|
2569
|
+
"{}: --force-exclude is deprecated and has no effect",
|
|
2570
|
+
"warning".yellow().bold()
|
|
2571
|
+
);
|
|
2572
|
+
eprintln!("Exclude patterns are now always respected by default (as of v0.0.156)");
|
|
2573
|
+
eprintln!("Use --no-exclude if you want to disable exclusions");
|
|
2574
|
+
}
|
|
2575
|
+
|
|
2535
2576
|
// Check for watch mode
|
|
2536
2577
|
if args.watch {
|
|
2537
2578
|
run_watch_mode(args, global_config_path, isolated, quiet);
|
|
@@ -11,6 +11,8 @@ use crate::lint_context::LintContext;
|
|
|
11
11
|
const URL_QUICK_CHECK_STR: &str = r#"(?:https?|ftps?)://|@"#;
|
|
12
12
|
const CUSTOM_PROTOCOL_PATTERN_STR: &str = r#"(?:grpc|ws|wss|ssh|git|svn|file|data|javascript|vscode|chrome|about|slack|discord|matrix|irc|redis|mongodb|postgresql|mysql|kafka|nats|amqp|mqtt|custom|app|api|service)://"#;
|
|
13
13
|
const MARKDOWN_LINK_PATTERN_STR: &str = r#"\[(?:[^\[\]]|\[[^\]]*\])*\]\(([^)\s]+)(?:\s+(?:\"[^\"]*\"|\'[^\']*\'))?\)"#;
|
|
14
|
+
const MARKDOWN_EMPTY_LINK_PATTERN_STR: &str = r#"\[(?:[^\[\]]|\[[^\]]*\])*\]\(\)"#;
|
|
15
|
+
const MARKDOWN_EMPTY_REF_PATTERN_STR: &str = r#"\[(?:[^\[\]]|\[[^\]]*\])*\]\[\]"#;
|
|
14
16
|
const ANGLE_LINK_PATTERN_STR: &str =
|
|
15
17
|
r#"<((?:https?|ftps?)://(?:\[[0-9a-fA-F:]+(?:%[a-zA-Z0-9]+)?\]|[^>]+)|[^@\s]+@[^@\s]+\.[^@\s>]+)>"#;
|
|
16
18
|
const BADGE_LINK_LINE_STR: &str = r#"^\s*\[!\[[^\]]*\]\([^)]*\)\]\([^)]*\)\s*$"#;
|
|
@@ -163,6 +165,19 @@ impl MD034NoBareUrls {
|
|
|
163
165
|
}
|
|
164
166
|
}
|
|
165
167
|
|
|
168
|
+
// Also include empty link patterns like [text]() and [text][]
|
|
169
|
+
if let Ok(re) = get_cached_regex(MARKDOWN_EMPTY_LINK_PATTERN_STR) {
|
|
170
|
+
for mat in re.find_iter(line) {
|
|
171
|
+
buffers.markdown_link_ranges.push((mat.start(), mat.end()));
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
if let Ok(re) = get_cached_regex(MARKDOWN_EMPTY_REF_PATTERN_STR) {
|
|
176
|
+
for mat in re.find_iter(line) {
|
|
177
|
+
buffers.markdown_link_ranges.push((mat.start(), mat.end()));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
166
181
|
if let Ok(re) = get_cached_regex(ANGLE_LINK_PATTERN_STR) {
|
|
167
182
|
for cap in re.captures_iter(line) {
|
|
168
183
|
if let Some(mat) = cap.get(0) {
|