rumdl 0.0.106__tar.gz → 0.0.107__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.106 → rumdl-0.0.107}/CHANGELOG.md +4 -1
- {rumdl-0.0.106 → rumdl-0.0.107}/Cargo.lock +11 -11
- {rumdl-0.0.106 → rumdl-0.0.107}/Cargo.toml +1 -1
- {rumdl-0.0.106 → rumdl-0.0.107}/PKG-INFO +1 -1
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md036.md +16 -13
- {rumdl-0.0.106 → rumdl-0.0.107}/src/config.rs +40 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/lib.rs +11 -2
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md011_no_reversed_links.rs +53 -6
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md029_ordered_list_prefix.rs +125 -147
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md036_no_emphasis_only_first.rs +64 -99
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md046_code_block_style.rs +130 -1
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md052_reference_links_images.rs +77 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/vscode.rs +31 -6
- rumdl-0.0.107/tests/cli_duplication_test.rs +58 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/init_tests.rs +27 -50
- rumdl-0.0.107/tests/integration_tests.rs +29 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/emphasis_edge_cases_test.rs +2 -5
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md029_test.rs +71 -3
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md036_test.rs +19 -23
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md046_test.rs +123 -0
- rumdl-0.0.107/tests/vscode_windows_comprehensive_test.rs +263 -0
- rumdl-0.0.107/tests/vscode_windows_test.rs +113 -0
- rumdl-0.0.106/src/init.rs +0 -337
- rumdl-0.0.106/tests/cli_duplication_test.rs +0 -39
- rumdl-0.0.106/tests/integration_tests.rs +0 -18
- {rumdl-0.0.106 → rumdl-0.0.107}/.config/nextest.toml +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/.mise.toml +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/.pre-commit-config.yaml +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/.rumdl.toml +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/.rustfmt.toml +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/LICENSE +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/MANIFEST.in +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/Makefile +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/README.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/assets/logo.png +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/benches/fix_performance.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/benches/range_performance.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/benches/range_utils_benchmark.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/benches/rule_performance.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/benches/simple_fix_bench.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/benchmark/bin/bench_lint_context.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/benchmark/bin/benchmark.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/benchmark/bin/benchmark_rule.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/benchmark/bin/file_parallel_benchmark.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/benchmark/bin/measure_code_span_performance.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/RULES.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/global-settings.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md001.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md002.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md003.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md004.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md005.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md006.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md007.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md009.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md010.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md011.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md012.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md013.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md014.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md018.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md019.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md020.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md021.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md022.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md023.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md024.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md025.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md026.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md027.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md028.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md029.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md030.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md031.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md032.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md033.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md034.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md035.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md037.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md038.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md039.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md040.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md041.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md042.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md043.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md044.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md045.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md046.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md047.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md048.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md049.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md050.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md051.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md052.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md053.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md054.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md055.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md056.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md057.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/md058.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/docs/vscode-extension.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/parity_check.py +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/pyproject.toml +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/python/MANIFEST.in +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/python/PYTHON-README.md +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/python/rumdl/__init__.py +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/python/rumdl/__main__.py +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/python/rumdl/py.typed +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/rumdl.toml.example +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/rust-toolchain.toml +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/scripts/extract-changelog.sh +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/scripts/prepare-release.sh +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/scripts/setup-pre-commit.sh +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/scripts/update-pre-commit-docs.sh +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/exit_codes.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/inline_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/lint_context.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/lsp/mod.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/lsp/server.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/lsp/types.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/main.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/markdownlint_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/output/formatters/azure.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/output/formatters/concise.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/output/formatters/github.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/output/formatters/gitlab.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/output/formatters/grouped.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/output/formatters/json.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/output/formatters/json_lines.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/output/formatters/junit.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/output/formatters/mod.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/output/formatters/pylint.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/output/formatters/sarif.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/output/formatters/text.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/output/mod.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/parallel.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/performance.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/profiling.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/python.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rule.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rule_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rule_config_serde.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/blockquote_utils.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/code_block_utils.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/code_fence_utils.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/emphasis_style.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/front_matter_utils.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/heading_utils.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/list_utils.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md001_heading_increment.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md002_first_heading_h1/md002_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md002_first_heading_h1.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md003_heading_style/md003_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md003_heading_style.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md004_unordered_list_style/md004_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md004_unordered_list_style.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md005_list_indent.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md006_start_bullets.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md007_ul_indent/md007_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md007_ul_indent.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md009_trailing_spaces/md009_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md009_trailing_spaces.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md010_no_hard_tabs/md010_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md010_no_hard_tabs.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md012_no_multiple_blanks/md012_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md012_no_multiple_blanks.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md013_line_length/md013_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md013_line_length.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md014_commands_show_output/md014_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md014_commands_show_output.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md018_no_missing_space_atx.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md019_no_multiple_space_atx.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md022_blanks_around_headings/md022_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md022_blanks_around_headings.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md023_heading_start_left.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md024_no_duplicate_heading/md024_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md024_no_duplicate_heading.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md025_single_title/md025_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md025_single_title.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md026_no_trailing_punctuation/md026_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md026_no_trailing_punctuation.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md028_no_blanks_blockquote.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md029_ordered_list_prefix/md029_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md030_list_marker_space/md030_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md030_list_marker_space.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md031_blanks_around_fences.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md032_blanks_around_lists.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md033_no_inline_html/md033_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md033_no_inline_html.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md034_no_bare_urls.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md035_hr_style/md035_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md035_hr_style.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md036_no_emphasis_only_first/md036_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md037_spaces_around_emphasis.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md038_no_space_in_code.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md039_no_space_in_links.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md040_fenced_code_language.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md041_first_line_heading.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md042_no_empty_links.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md043_required_headings.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md044_proper_names/md044_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md044_proper_names.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md045_no_alt_text/md045_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md045_no_alt_text.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md046_code_block_style/md046_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md047_single_trailing_newline.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md048_code_fence_style/md048_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md048_code_fence_style.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md049_emphasis_style/md049_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md049_emphasis_style.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md050_strong_style/md050_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md050_strong_style.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md051_link_fragments.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md053_link_image_reference_definitions.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md054_link_image_style/md054_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md054_link_image_style.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md055_table_pipe_style/md055_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md055_table_pipe_style.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md056_table_column_count.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md057_existing_relative_links/md057_config.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md057_existing_relative_links.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/md058_blanks_around_tables.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/mod.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/rules/strong_style.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/utils/ast_utils.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/utils/code_block_utils.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/utils/document_structure.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/utils/early_returns.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/utils/element_cache.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/utils/emphasis_utils.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/utils/fix_utils.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/utils/markdown_elements.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/utils/mod.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/utils/range_utils.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/utils/regex_cache.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/utils/string_interner.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/utils/table_utils.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/src/utils/text_reflow.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/advanced_integration_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/character_ranges/additional_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/character_ranges/basic_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/character_ranges/comprehensive_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/character_ranges/extended_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/character_ranges/mod.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/character_ranges/unicode_utils.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/cli_explain_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/cli_flag_precedence_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/cli_integration_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/cli_lsp_fix_consistency.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/cli_statistics_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/commonmark_compliance_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/comprehensive_integration_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/comprehensive_output_format_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/config_application_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/config_file_command_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/config_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/configuration_inheritance_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/consistency_regression_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/cross_platform_compatibility_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/deeply_nested_lists_performance_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/escaped_brackets_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/final_confidence_assessment.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/init_command_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/inline_config_blocks_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/inline_config_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/json_output_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/lib.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/lsp_editor_integration_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/lsp_integration_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/lsp_memory_leak_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/lsp_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/malformed_markdown_stress_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/markdownlint_cli_integration.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/markdownlint_config_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/markdownlintignore_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/md013_reflow_integration_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/nested_code_block_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/output_format_integration_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/output_format_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/perf_check.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/performance_validation_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/pyproject_config_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/python_bindings_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/real_world_repository_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/regression_prevention_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/heading_edge_cases_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/inline_content_edge_cases_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/link_edge_cases_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/list_rules_integration_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md001_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md001_unicode_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md002_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md003_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md004_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md005_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md005_unicode_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md006_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md006_unicode_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md007_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md009_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md010_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md011_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md012_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md013_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md014_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md018_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md019_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md020_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md021_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md022_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md023_extended_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md023_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md024_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md025_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md026_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md027_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md028_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md029_unicode_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md030_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md031_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md032_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md033_extended_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md033_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md034_ipv6_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md034_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md035_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md037_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md038_nested_backticks_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md038_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md039_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md040_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md041_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md042_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md043_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md044_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md045_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md047_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md048_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md049_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md050_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md051_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md051_unicode_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md052_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md053_additional_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md053_proptest.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md053_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md054_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md054_unicode_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md055_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md056_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md057_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/md058_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules/mod.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/rules_mod_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/thread_safety_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/unicode_edge_case_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/utils/blockquote_utils_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/utils/code_block_utils_extended_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/utils/code_block_utils_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/utils/core_utils_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/utils/front_matter_utils_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/utils/line_index_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/utils/mod.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/utils_markdown_edge_cases.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/utils_tests.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/vscode_extension_fixes.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/vscode_test.rs +0 -0
- {rumdl-0.0.106 → rumdl-0.0.107}/tests/vscode_tests.rs +0 -0
|
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.0.107] - 2025-08-06
|
|
11
|
+
|
|
10
12
|
## [0.0.106] - 2025-08-05
|
|
11
13
|
|
|
12
14
|
### Changed
|
|
@@ -289,7 +291,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
289
291
|
|
|
290
292
|
- Initial implementation of remaining rules for markdownlint parity
|
|
291
293
|
|
|
292
|
-
[Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.
|
|
294
|
+
[Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.107...HEAD
|
|
295
|
+
[0.0.107]: https://github.com/rvben/rumdl/compare/v0.0.106...v0.0.107
|
|
293
296
|
[0.0.105]: https://github.com/rvben/rumdl/compare/v0.0.104...v0.0.105
|
|
294
297
|
[0.0.105]: https://github.com/rvben/rumdl/compare/v0.0.104...v0.0.105
|
|
295
298
|
[0.0.104]: https://github.com/rvben/rumdl/compare/v0.0.103...v0.0.104
|
|
@@ -49,9 +49,9 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
|
|
|
49
49
|
|
|
50
50
|
[[package]]
|
|
51
51
|
name = "anstream"
|
|
52
|
-
version = "0.6.
|
|
52
|
+
version = "0.6.20"
|
|
53
53
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
54
|
-
checksum = "
|
|
54
|
+
checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192"
|
|
55
55
|
dependencies = [
|
|
56
56
|
"anstyle",
|
|
57
57
|
"anstyle-parse",
|
|
@@ -79,22 +79,22 @@ dependencies = [
|
|
|
79
79
|
|
|
80
80
|
[[package]]
|
|
81
81
|
name = "anstyle-query"
|
|
82
|
-
version = "1.1.
|
|
82
|
+
version = "1.1.4"
|
|
83
83
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
84
|
-
checksum = "
|
|
84
|
+
checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2"
|
|
85
85
|
dependencies = [
|
|
86
|
-
"windows-sys 0.
|
|
86
|
+
"windows-sys 0.60.2",
|
|
87
87
|
]
|
|
88
88
|
|
|
89
89
|
[[package]]
|
|
90
90
|
name = "anstyle-wincon"
|
|
91
|
-
version = "3.0.
|
|
91
|
+
version = "3.0.10"
|
|
92
92
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
93
|
-
checksum = "
|
|
93
|
+
checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a"
|
|
94
94
|
dependencies = [
|
|
95
95
|
"anstyle",
|
|
96
96
|
"once_cell_polyfill",
|
|
97
|
-
"windows-sys 0.
|
|
97
|
+
"windows-sys 0.60.2",
|
|
98
98
|
]
|
|
99
99
|
|
|
100
100
|
[[package]]
|
|
@@ -1493,7 +1493,7 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
|
|
|
1493
1493
|
|
|
1494
1494
|
[[package]]
|
|
1495
1495
|
name = "rumdl"
|
|
1496
|
-
version = "0.0.
|
|
1496
|
+
version = "0.0.107"
|
|
1497
1497
|
dependencies = [
|
|
1498
1498
|
"anyhow",
|
|
1499
1499
|
"assert_cmd",
|
|
@@ -2527,9 +2527,9 @@ dependencies = [
|
|
|
2527
2527
|
|
|
2528
2528
|
[[package]]
|
|
2529
2529
|
name = "zerovec"
|
|
2530
|
-
version = "0.11.
|
|
2530
|
+
version = "0.11.4"
|
|
2531
2531
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2532
|
-
checksum = "
|
|
2532
|
+
checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b"
|
|
2533
2533
|
dependencies = [
|
|
2534
2534
|
"yoke",
|
|
2535
2535
|
"zerofrom",
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
# MD036 - Use real headings, not just bold text
|
|
2
2
|
|
|
3
|
+
> **Note:** This rule does not provide automatic fixes because it cannot reliably determine user intent. Bold text on its own line has many legitimate uses (image captions, labels, warnings, etc.).
|
|
4
|
+
|
|
3
5
|
## What this rule does
|
|
4
6
|
|
|
5
|
-
Detects when bold or italic text is used as a standalone heading
|
|
7
|
+
Detects when bold or italic text is used as a standalone heading.
|
|
6
8
|
|
|
7
9
|
## Why this matters
|
|
8
10
|
|
|
@@ -43,9 +45,9 @@ Using emphasis as headings:
|
|
|
43
45
|
**Configuration:**
|
|
44
46
|
```
|
|
45
47
|
|
|
46
|
-
### 🔧
|
|
48
|
+
### 🔧 Manual Fix Required
|
|
47
49
|
|
|
48
|
-
|
|
50
|
+
These should be manually converted to proper headings:
|
|
49
51
|
|
|
50
52
|
```markdown
|
|
51
53
|
## This looks like a heading
|
|
@@ -57,28 +59,29 @@ Converted to proper headings:
|
|
|
57
59
|
## Configuration
|
|
58
60
|
```
|
|
59
61
|
|
|
62
|
+
**Note:** rumdl will detect these issues but won't automatically fix them. You need to manually decide if the emphasized text should be a heading.
|
|
63
|
+
|
|
60
64
|
<!-- rumdl-enable MD036 -->
|
|
61
65
|
|
|
62
66
|
## Configuration
|
|
63
67
|
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
|
|
68
|
+
```toml
|
|
69
|
+
# .rumdl.toml
|
|
70
|
+
[MD036]
|
|
71
|
+
punctuation = ".,;:!?" # Configure punctuation checking
|
|
67
72
|
```
|
|
68
73
|
|
|
69
74
|
### Options
|
|
70
75
|
|
|
71
|
-
- `punctuation`: String of punctuation marks
|
|
72
|
-
- Set to `""` to
|
|
76
|
+
- `punctuation`: String of punctuation marks that, when found at the end of emphasized text, prevent it from being flagged (default: `".,;:!?"`)
|
|
77
|
+
- Set to `""` to flag all emphasized lines regardless of punctuation
|
|
73
78
|
- Customize to remove only specific marks
|
|
74
79
|
|
|
75
80
|
## Automatic fixes
|
|
76
81
|
|
|
77
|
-
This rule
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
- Choose appropriate heading level (## for bold, # for italic)
|
|
81
|
-
- Preserve common labels like "Table of Contents" as-is
|
|
82
|
+
This rule does **not** provide automatic fixes. Converting bold or italic text to headings is too risky as it can corrupt documents. For example, bold text is often used for image captions, labels, or other legitimate emphasis that should not be converted to headings.
|
|
83
|
+
|
|
84
|
+
Users should manually review each warning and decide whether the emphasized text should be converted to a heading.
|
|
82
85
|
|
|
83
86
|
## Learn more
|
|
84
87
|
|
|
@@ -862,6 +862,46 @@ local_time = 07:32:00
|
|
|
862
862
|
// Note: local_date and local_time might not be parsed by the current implementation
|
|
863
863
|
}
|
|
864
864
|
}
|
|
865
|
+
|
|
866
|
+
#[test]
|
|
867
|
+
fn test_default_config_passes_validation() {
|
|
868
|
+
use crate::rules;
|
|
869
|
+
|
|
870
|
+
let temp_dir = tempdir().unwrap();
|
|
871
|
+
let config_path = temp_dir.path().join(".rumdl.toml");
|
|
872
|
+
let config_path_str = config_path.to_str().unwrap();
|
|
873
|
+
|
|
874
|
+
// Create the default config using the same function that `rumdl init` uses
|
|
875
|
+
create_default_config(config_path_str).unwrap();
|
|
876
|
+
|
|
877
|
+
// Load it back as a SourcedConfig
|
|
878
|
+
let sourced =
|
|
879
|
+
SourcedConfig::load(Some(config_path_str), None).expect("Default config should load successfully");
|
|
880
|
+
|
|
881
|
+
// Create the rule registry
|
|
882
|
+
let all_rules = rules::all_rules(&Config::default());
|
|
883
|
+
let registry = RuleRegistry::from_rules(&all_rules);
|
|
884
|
+
|
|
885
|
+
// Validate the config
|
|
886
|
+
let warnings = validate_config_sourced(&sourced, ®istry);
|
|
887
|
+
|
|
888
|
+
// The default config should have no warnings
|
|
889
|
+
if !warnings.is_empty() {
|
|
890
|
+
for warning in &warnings {
|
|
891
|
+
eprintln!("Config validation warning: {}", warning.message);
|
|
892
|
+
if let Some(rule) = &warning.rule {
|
|
893
|
+
eprintln!(" Rule: {rule}");
|
|
894
|
+
}
|
|
895
|
+
if let Some(key) = &warning.key {
|
|
896
|
+
eprintln!(" Key: {key}");
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
}
|
|
900
|
+
assert!(
|
|
901
|
+
warnings.is_empty(),
|
|
902
|
+
"Default config from rumdl init should pass validation without warnings"
|
|
903
|
+
);
|
|
904
|
+
}
|
|
865
905
|
}
|
|
866
906
|
|
|
867
907
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
pub mod config;
|
|
2
2
|
pub mod exit_codes;
|
|
3
|
-
pub mod init;
|
|
4
3
|
pub mod inline_config;
|
|
5
4
|
pub mod lint_context;
|
|
6
5
|
pub mod lsp;
|
|
@@ -190,8 +189,18 @@ pub fn lint(content: &str, rules: &[Box<dyn Rule>], _verbose: bool) -> LintResul
|
|
|
190
189
|
let filtered_warnings: Vec<_> = rule_warnings
|
|
191
190
|
.into_iter()
|
|
192
191
|
.filter(|warning| {
|
|
192
|
+
// Use the warning's rule_name if available, otherwise use the rule's name
|
|
193
|
+
let rule_name_to_check = warning.rule_name.unwrap_or(rule.name());
|
|
194
|
+
|
|
195
|
+
// Extract the base rule name for sub-rules like "MD029-style" -> "MD029"
|
|
196
|
+
let base_rule_name = if let Some(dash_pos) = rule_name_to_check.find('-') {
|
|
197
|
+
&rule_name_to_check[..dash_pos]
|
|
198
|
+
} else {
|
|
199
|
+
rule_name_to_check
|
|
200
|
+
};
|
|
201
|
+
|
|
193
202
|
!inline_config.is_rule_disabled(
|
|
194
|
-
|
|
203
|
+
base_rule_name,
|
|
195
204
|
warning.line, // Already 1-indexed
|
|
196
205
|
)
|
|
197
206
|
})
|
|
@@ -204,18 +204,18 @@ impl Rule for MD011NoReversedLinks {
|
|
|
204
204
|
let mut byte_pos = 0;
|
|
205
205
|
|
|
206
206
|
for (line_num, line) in content.lines().enumerate() {
|
|
207
|
-
// Skip if this line is in a code block
|
|
208
|
-
if ctx.is_in_code_block_or_span(byte_pos) {
|
|
209
|
-
byte_pos += line.len() + 1;
|
|
210
|
-
continue;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
207
|
// Part 1: Check for existing perfectly formed reversed links
|
|
214
208
|
for cap in REVERSED_LINK_CHECK_REGEX.captures_iter(line) {
|
|
215
209
|
let match_obj = cap.get(0).unwrap();
|
|
216
210
|
let match_start = match_obj.start();
|
|
217
211
|
let match_end = match_obj.end();
|
|
218
212
|
|
|
213
|
+
// Check if this specific match is within a code block or inline code span
|
|
214
|
+
let match_byte_pos = byte_pos + match_start;
|
|
215
|
+
if ctx.is_in_code_block_or_span(match_byte_pos) {
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
219
|
// Check if the match contains escaped brackets or parentheses
|
|
220
220
|
let match_text = match_obj.as_str();
|
|
221
221
|
|
|
@@ -277,6 +277,12 @@ impl Rule for MD011NoReversedLinks {
|
|
|
277
277
|
// Part 2: Check for malformed link attempts where user intent is clear
|
|
278
278
|
let malformed_attempts = self.detect_malformed_link_attempts(line);
|
|
279
279
|
for (start, len, url, text) in malformed_attempts {
|
|
280
|
+
// Check if this specific match is within a code block or inline code span
|
|
281
|
+
let match_byte_pos = byte_pos + start;
|
|
282
|
+
if ctx.is_in_code_block_or_span(match_byte_pos) {
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
285
|
+
|
|
280
286
|
// Calculate precise character range for the malformed syntax
|
|
281
287
|
let (start_line, start_col, end_line, end_col) = calculate_match_range(line_num + 1, line, start, len);
|
|
282
288
|
|
|
@@ -593,4 +599,45 @@ But this (https://example.com)[reversed link] should be flagged."#;
|
|
|
593
599
|
let result = rule.check(&ctx).unwrap();
|
|
594
600
|
assert_eq!(result.len(), 1, "Should still flag URLs with nested parentheses");
|
|
595
601
|
}
|
|
602
|
+
|
|
603
|
+
#[test]
|
|
604
|
+
fn test_inline_code_patterns() {
|
|
605
|
+
// Test for issue #19 - MD011 should not flag patterns inside inline code
|
|
606
|
+
let rule = MD011NoReversedLinks;
|
|
607
|
+
|
|
608
|
+
// Test the exact case from issue #19
|
|
609
|
+
let content = "I find `inspect.stack()[1].frame` a lot easier to understand (or at least guess about) at a glance than `inspect.stack()[1][0]`.";
|
|
610
|
+
let ctx = LintContext::new(content);
|
|
611
|
+
let result = rule.check(&ctx).unwrap();
|
|
612
|
+
assert_eq!(result.len(), 0, "Should not flag ()[1] patterns inside inline code");
|
|
613
|
+
|
|
614
|
+
// Test other patterns that might look like reversed links in code
|
|
615
|
+
let content = "Use `array()[0]` or `func()[1]` to access elements.";
|
|
616
|
+
let ctx = LintContext::new(content);
|
|
617
|
+
let result = rule.check(&ctx).unwrap();
|
|
618
|
+
assert_eq!(result.len(), 0, "Should not flag array access patterns in inline code");
|
|
619
|
+
|
|
620
|
+
// Test that actual reversed links outside code are still caught
|
|
621
|
+
let content = "Check out (https://example.com)[this link] and use `array()[1]`.";
|
|
622
|
+
let ctx = LintContext::new(content);
|
|
623
|
+
let result = rule.check(&ctx).unwrap();
|
|
624
|
+
assert_eq!(result.len(), 1, "Should flag actual reversed link but not code pattern");
|
|
625
|
+
assert!(result[0].message.contains("Reversed link syntax"));
|
|
626
|
+
|
|
627
|
+
// Test mixed scenario with code blocks
|
|
628
|
+
let content = r#"
|
|
629
|
+
Here's some code: `func()[1]` and `other()[2]`.
|
|
630
|
+
|
|
631
|
+
But this is wrong: (https://example.com)[Click here]
|
|
632
|
+
|
|
633
|
+
```python
|
|
634
|
+
# This should not be flagged
|
|
635
|
+
result = inspect.stack()[1]
|
|
636
|
+
```
|
|
637
|
+
"#;
|
|
638
|
+
let ctx = LintContext::new(content);
|
|
639
|
+
let result = rule.check(&ctx).unwrap();
|
|
640
|
+
assert_eq!(result.len(), 1, "Should only flag the actual reversed link");
|
|
641
|
+
assert_eq!(result[0].line, 4, "Should flag the reversed link on line 4");
|
|
642
|
+
}
|
|
596
643
|
}
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
use crate::rule::{Fix, LintError, LintResult, LintWarning, Rule, RuleCategory, Severity};
|
|
5
5
|
use crate::rule_config_serde::RuleConfig;
|
|
6
6
|
use crate::utils::document_structure::{DocumentStructure, DocumentStructureExtensions};
|
|
7
|
-
use crate::utils::range_utils::LineIndex;
|
|
8
7
|
use crate::utils::regex_cache::ORDERED_LIST_MARKER_REGEX;
|
|
9
8
|
use lazy_static::lazy_static;
|
|
10
9
|
use regex::Regex;
|
|
@@ -136,10 +135,22 @@ impl Rule for MD029OrderedListPrefix {
|
|
|
136
135
|
let mut indent_stack: Vec<(usize, usize)> = Vec::new(); // (indent, index)
|
|
137
136
|
let lines: Vec<&str> = content.lines().collect();
|
|
138
137
|
let mut byte_pos = 0;
|
|
138
|
+
let mut in_code_fence = false;
|
|
139
139
|
|
|
140
140
|
for line in lines.iter() {
|
|
141
|
-
|
|
142
|
-
|
|
141
|
+
let trimmed = line.trim();
|
|
142
|
+
|
|
143
|
+
// Track code fences
|
|
144
|
+
if trimmed.starts_with("```") || trimmed.starts_with("~~~") {
|
|
145
|
+
in_code_fence = !in_code_fence;
|
|
146
|
+
result.push_str(line);
|
|
147
|
+
result.push('\n');
|
|
148
|
+
byte_pos += line.len() + 1;
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Skip if in code block or fence
|
|
153
|
+
if in_code_fence || ctx.is_in_code_block_or_span(byte_pos) {
|
|
143
154
|
result.push_str(line);
|
|
144
155
|
result.push('\n');
|
|
145
156
|
byte_pos += line.len() + 1;
|
|
@@ -177,30 +188,50 @@ impl Rule for MD029OrderedListPrefix {
|
|
|
177
188
|
*idx += 1;
|
|
178
189
|
}
|
|
179
190
|
} else if !line.trim().is_empty() {
|
|
180
|
-
// Check if
|
|
181
|
-
let
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
191
|
+
// Check if the line is indented enough to be part of a list item
|
|
192
|
+
let line_indent = line.chars().take_while(|c| c.is_whitespace()).count();
|
|
193
|
+
let is_continuation = indent_stack
|
|
194
|
+
.last()
|
|
195
|
+
.map(|&(list_indent, _)| {
|
|
196
|
+
// Allow lazy continuation (0-2 spaces) or proper continuation (3+ spaces)
|
|
197
|
+
line_indent <= 2 || line_indent >= list_indent + 3
|
|
198
|
+
})
|
|
199
|
+
.unwrap_or(false);
|
|
200
|
+
|
|
201
|
+
if is_continuation {
|
|
202
|
+
if line_indent <= 2 && !indent_stack.is_empty() {
|
|
203
|
+
// Check if this line is itself a list item
|
|
204
|
+
let trimmed = line.trim();
|
|
205
|
+
let is_list_item = trimmed.starts_with("* ")
|
|
206
|
+
|| trimmed.starts_with("- ")
|
|
207
|
+
|| trimmed.starts_with("+ ")
|
|
208
|
+
|| (trimmed.len() > 2
|
|
209
|
+
&& trimmed.chars().next().unwrap().is_ascii_digit()
|
|
210
|
+
&& trimmed.contains(". "));
|
|
211
|
+
|
|
212
|
+
if !is_list_item {
|
|
213
|
+
// This is a lazy continuation - fix it by adding proper indentation
|
|
214
|
+
let (list_indent, _) = indent_stack.last().unwrap();
|
|
215
|
+
let proper_indent = " ".repeat(list_indent + 3);
|
|
216
|
+
result.push_str(&proper_indent);
|
|
217
|
+
result.push_str(line.trim_start());
|
|
218
|
+
result.push('\n');
|
|
219
|
+
} else {
|
|
220
|
+
// This is a list item, not a continuation - it breaks the list
|
|
221
|
+
indent_stack.clear();
|
|
222
|
+
result.push_str(line);
|
|
223
|
+
result.push('\n');
|
|
224
|
+
}
|
|
198
225
|
} else {
|
|
199
|
-
//
|
|
200
|
-
indent_stack.clear();
|
|
226
|
+
// This line is properly indented
|
|
201
227
|
result.push_str(line);
|
|
202
228
|
result.push('\n');
|
|
203
229
|
}
|
|
230
|
+
} else {
|
|
231
|
+
// Non-list, non-blank line breaks the list
|
|
232
|
+
indent_stack.clear();
|
|
233
|
+
result.push_str(line);
|
|
234
|
+
result.push('\n');
|
|
204
235
|
}
|
|
205
236
|
} else {
|
|
206
237
|
// Blank line - don't clear the stack, as lists can have blank lines within them
|
|
@@ -221,74 +252,11 @@ impl Rule for MD029OrderedListPrefix {
|
|
|
221
252
|
fn check_with_structure(
|
|
222
253
|
&self,
|
|
223
254
|
ctx: &crate::lint_context::LintContext,
|
|
224
|
-
|
|
255
|
+
_structure: &crate::utils::document_structure::DocumentStructure,
|
|
225
256
|
) -> LintResult {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
if structure.list_lines.is_empty() {
|
|
230
|
-
return Ok(Vec::new());
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
// Quick check if there are no ordered lists
|
|
234
|
-
if !content.contains('1') || (!content.contains("1.") && !content.contains("2.") && !content.contains("0.")) {
|
|
235
|
-
return Ok(Vec::new());
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
let mut warnings = Vec::new();
|
|
239
|
-
let mut list_items = Vec::new();
|
|
240
|
-
let lines: Vec<&str> = content.lines().collect();
|
|
241
|
-
|
|
242
|
-
// Create a set of list line indices for faster lookup
|
|
243
|
-
let mut list_line_set = std::collections::HashSet::new();
|
|
244
|
-
for &line_num in &structure.list_lines {
|
|
245
|
-
list_line_set.insert(line_num); // Keep as 1-indexed for easier comparison
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
// Group ordered list items into sections
|
|
249
|
-
let mut in_list = false;
|
|
250
|
-
|
|
251
|
-
for (line_idx, line) in lines.iter().enumerate() {
|
|
252
|
-
let line_num = line_idx + 1; // Convert to 1-indexed
|
|
253
|
-
|
|
254
|
-
// Skip lines in code blocks
|
|
255
|
-
if structure.is_in_code_block(line_num) {
|
|
256
|
-
// Code blocks don't break the list - just skip them
|
|
257
|
-
continue;
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
if list_line_set.contains(&line_num) {
|
|
261
|
-
if Self::get_list_number(line).is_some() {
|
|
262
|
-
// If this is the first item of a new list, record the list start
|
|
263
|
-
if !in_list {
|
|
264
|
-
in_list = true;
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
list_items.push((line_idx, line.to_string()));
|
|
268
|
-
}
|
|
269
|
-
} else if !line.trim().is_empty() {
|
|
270
|
-
// Check if this is a code fence line - don't break the list for these
|
|
271
|
-
let trimmed = line.trim();
|
|
272
|
-
if trimmed.starts_with("```") || trimmed.starts_with("~~~") {
|
|
273
|
-
// Code fence lines don't break the list - just skip them
|
|
274
|
-
continue;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
// Non-empty, non-list line breaks the list
|
|
278
|
-
if in_list && !list_items.is_empty() {
|
|
279
|
-
self.check_list_section(&list_items, &mut warnings, content);
|
|
280
|
-
list_items.clear();
|
|
281
|
-
in_list = false;
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
// Check last section if it exists
|
|
287
|
-
if !list_items.is_empty() {
|
|
288
|
-
self.check_list_section(&list_items, &mut warnings, content);
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
Ok(warnings)
|
|
257
|
+
// For MD029, we need to use the regular check method to get lazy continuation detection
|
|
258
|
+
// The document structure optimization doesn't provide enough context for proper lazy continuation checking
|
|
259
|
+
self.check(ctx)
|
|
292
260
|
}
|
|
293
261
|
|
|
294
262
|
/// Get the category of this rule for selective processing
|
|
@@ -337,15 +305,74 @@ impl Rule for MD029OrderedListPrefix {
|
|
|
337
305
|
}
|
|
338
306
|
|
|
339
307
|
impl DocumentStructureExtensions for MD029OrderedListPrefix {
|
|
340
|
-
fn has_relevant_elements(
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
308
|
+
fn has_relevant_elements(
|
|
309
|
+
&self,
|
|
310
|
+
ctx: &crate::lint_context::LintContext,
|
|
311
|
+
_doc_structure: &DocumentStructure,
|
|
312
|
+
) -> bool {
|
|
313
|
+
// This rule is relevant if there are any ordered list items
|
|
314
|
+
// We need to check even lists with all "1." items for:
|
|
315
|
+
// 1. Incorrect numbering according to configured style
|
|
316
|
+
// 2. Lazy continuation issues
|
|
317
|
+
ctx.list_blocks.iter().any(|block| block.is_ordered)
|
|
345
318
|
}
|
|
346
319
|
}
|
|
347
320
|
|
|
348
321
|
impl MD029OrderedListPrefix {
|
|
322
|
+
/// Check for lazy continuation lines in a list block
|
|
323
|
+
fn check_for_lazy_continuation(
|
|
324
|
+
&self,
|
|
325
|
+
ctx: &crate::lint_context::LintContext,
|
|
326
|
+
list_block: &crate::lint_context::ListBlock,
|
|
327
|
+
warnings: &mut Vec<LintWarning>,
|
|
328
|
+
) {
|
|
329
|
+
// Check all lines in the block for lazy continuation
|
|
330
|
+
for line_num in list_block.start_line..=list_block.end_line {
|
|
331
|
+
if let Some(line_info) = ctx.line_info(line_num) {
|
|
332
|
+
// Skip list item lines themselves
|
|
333
|
+
if list_block.item_lines.contains(&line_num) {
|
|
334
|
+
continue;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// Skip blank lines
|
|
338
|
+
if line_info.is_blank {
|
|
339
|
+
continue;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// Skip lines that are in code blocks
|
|
343
|
+
if line_info.in_code_block {
|
|
344
|
+
continue;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// Skip code fence lines
|
|
348
|
+
let trimmed = line_info.content.trim();
|
|
349
|
+
if trimmed.starts_with("```") || trimmed.starts_with("~~~") {
|
|
350
|
+
continue;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
// Check if this is a lazy continuation (0-2 spaces)
|
|
354
|
+
if line_info.indent <= 2 && !line_info.content.trim().is_empty() {
|
|
355
|
+
// This is a lazy continuation - add a style warning
|
|
356
|
+
let col = line_info.indent + 1;
|
|
357
|
+
|
|
358
|
+
warnings.push(LintWarning {
|
|
359
|
+
rule_name: Some("MD029-style"),
|
|
360
|
+
message: "List continuation should be indented (lazy continuation detected)".to_string(),
|
|
361
|
+
line: line_num,
|
|
362
|
+
column: col,
|
|
363
|
+
end_line: line_num,
|
|
364
|
+
end_column: col,
|
|
365
|
+
severity: Severity::Warning,
|
|
366
|
+
fix: Some(Fix {
|
|
367
|
+
range: line_info.byte_offset..line_info.byte_offset,
|
|
368
|
+
replacement: " ".to_string(), // Add 3 spaces
|
|
369
|
+
}),
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
|
|
349
376
|
/// Check if there's only code blocks/fences between two list blocks
|
|
350
377
|
fn is_only_code_between_blocks(
|
|
351
378
|
&self,
|
|
@@ -395,6 +422,9 @@ impl MD029OrderedListPrefix {
|
|
|
395
422
|
let mut all_items = Vec::new();
|
|
396
423
|
|
|
397
424
|
for list_block in group {
|
|
425
|
+
// First, check for lazy continuation in this block
|
|
426
|
+
self.check_for_lazy_continuation(ctx, list_block, warnings);
|
|
427
|
+
|
|
398
428
|
for &item_line in &list_block.item_lines {
|
|
399
429
|
if let Some(line_info) = ctx.line_info(item_line) {
|
|
400
430
|
if let Some(list_item) = &line_info.list_item {
|
|
@@ -465,58 +495,6 @@ impl MD029OrderedListPrefix {
|
|
|
465
495
|
}
|
|
466
496
|
}
|
|
467
497
|
}
|
|
468
|
-
|
|
469
|
-
fn check_list_section(&self, items: &[(usize, String)], warnings: &mut Vec<LintWarning>, content: &str) {
|
|
470
|
-
// Group items by indentation level and process each level independently
|
|
471
|
-
let mut level_groups: std::collections::HashMap<usize, Vec<(usize, String)>> = std::collections::HashMap::new();
|
|
472
|
-
|
|
473
|
-
for (line_num, line) in items {
|
|
474
|
-
let indent = line.chars().take_while(|c| c.is_whitespace()).count();
|
|
475
|
-
level_groups.entry(indent).or_default().push((*line_num, line.clone()));
|
|
476
|
-
}
|
|
477
|
-
|
|
478
|
-
// Process each indentation level separately
|
|
479
|
-
for (_indent, mut group) in level_groups {
|
|
480
|
-
// Sort by line number to ensure correct order
|
|
481
|
-
group.sort_by_key(|(line_num, _)| *line_num);
|
|
482
|
-
|
|
483
|
-
// Check each item in the group for correct sequence
|
|
484
|
-
for (idx, (line_num, line)) in group.iter().enumerate() {
|
|
485
|
-
if let Some(actual_num) = Self::get_list_number(line) {
|
|
486
|
-
let expected_num = self.get_expected_number(idx);
|
|
487
|
-
|
|
488
|
-
if actual_num != expected_num {
|
|
489
|
-
// Create a LineIndex for the actual content
|
|
490
|
-
let line_index = LineIndex::new(content.to_string());
|
|
491
|
-
|
|
492
|
-
// Find the number position in the line for precise replacement
|
|
493
|
-
let number_start = line.find(char::is_numeric).unwrap_or(0);
|
|
494
|
-
let number_len = actual_num.to_string().len();
|
|
495
|
-
|
|
496
|
-
warnings.push(LintWarning {
|
|
497
|
-
rule_name: Some(self.name()),
|
|
498
|
-
message: format!(
|
|
499
|
-
"Ordered list item number {actual_num} does not match style (expected {expected_num})"
|
|
500
|
-
),
|
|
501
|
-
line: line_num + 1,
|
|
502
|
-
column: number_start + 1,
|
|
503
|
-
end_line: line_num + 1,
|
|
504
|
-
end_column: number_start + number_len + 1,
|
|
505
|
-
severity: Severity::Warning,
|
|
506
|
-
fix: Some(Fix {
|
|
507
|
-
range: line_index.line_col_to_byte_range_with_length(
|
|
508
|
-
line_num + 1,
|
|
509
|
-
number_start + 1,
|
|
510
|
-
number_len,
|
|
511
|
-
),
|
|
512
|
-
replacement: expected_num.to_string(),
|
|
513
|
-
}),
|
|
514
|
-
});
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
|
-
}
|
|
520
498
|
}
|
|
521
499
|
|
|
522
500
|
#[cfg(test)]
|