rumdl 0.0.142__tar.gz → 0.0.143__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.142 → rumdl-0.0.143}/Cargo.lock +42 -1
- {rumdl-0.0.142 → rumdl-0.0.143}/Cargo.toml +7 -1
- {rumdl-0.0.142 → rumdl-0.0.143}/PKG-INFO +1 -1
- {rumdl-0.0.142 → rumdl-0.0.143}/src/main.rs +70 -4
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md013_line_length.rs +44 -54
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md028_no_blanks_blockquote.rs +70 -32
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md030_list_marker_space.rs +48 -20
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md034_no_bare_urls.rs +36 -32
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md051_link_fragments.rs +52 -19
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md052_reference_links_images.rs +27 -0
- rumdl-0.0.143/tests/fix_performance_baseline_test.rs +282 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/.config/nextest.toml +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/.mise.toml +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/.pre-commit-config.yaml +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/.rumdl.toml +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/.rustfmt.toml +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/CHANGELOG.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/LICENSE +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/MANIFEST.in +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/Makefile +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/README.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/assets/logo.png +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/benches/fix_performance.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/benches/range_performance.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/benches/range_utils_benchmark.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/benches/rule_performance.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/benches/simple_fix_bench.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/benchmark/bin/bench_lint_context.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/benchmark/bin/benchmark.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/benchmark/bin/benchmark_rule.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/benchmark/bin/file_parallel_benchmark.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/benchmark/bin/measure_code_span_performance.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/RULES.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/global-settings.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/inline-configuration.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md001.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md002.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md003.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md004.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md005.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md006.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md007.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md009.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md010.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md011.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md012.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md013.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md014.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md018.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md019.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md020.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md021.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md022.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md023.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md024.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md025.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md026.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md027.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md028.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md029.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md030.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md031.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md032.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md033.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md034.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md035.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md036.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md037.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md038.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md039.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md040.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md041.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md042.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md043.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md044.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md045.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md046.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md047.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md048.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md049.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md050.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md051.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md052.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md053.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md054.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md055.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md056.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md057.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/md058.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/docs/vscode-extension.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/parity_check.py +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/pyproject.toml +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/python/MANIFEST.in +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/python/PYTHON-README.md +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/python/rumdl/__init__.py +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/python/rumdl/__main__.py +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/python/rumdl/py.typed +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/rumdl.toml.example +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/rust-toolchain.toml +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/scripts/extract-changelog.sh +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/scripts/generate-downloads-table.sh +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/scripts/pre-release.sh +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/scripts/prepare-release.sh +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/scripts/setup-pre-commit.sh +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/scripts/update-pre-commit-docs.sh +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/exit_codes.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/inline_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/lib.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/lint_context.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/lsp/mod.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/lsp/server.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/lsp/types.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/markdownlint_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/output/formatters/azure.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/output/formatters/concise.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/output/formatters/github.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/output/formatters/gitlab.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/output/formatters/grouped.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/output/formatters/json.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/output/formatters/json_lines.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/output/formatters/junit.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/output/formatters/mod.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/output/formatters/pylint.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/output/formatters/sarif.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/output/formatters/text.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/output/mod.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/parallel.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/performance.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/profiling.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/python.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rule.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rule_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rule_config_serde.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/blockquote_utils.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/code_block_utils.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/code_fence_utils.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/emphasis_style.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/front_matter_utils.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/heading_utils.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/list_utils.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md001_heading_increment.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md002_first_heading_h1/md002_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md002_first_heading_h1.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md003_heading_style/md003_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md003_heading_style.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md004_unordered_list_style/md004_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md004_unordered_list_style.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md005_list_indent.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md006_start_bullets.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md007_ul_indent/md007_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md007_ul_indent.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md009_trailing_spaces/md009_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md009_trailing_spaces.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md010_no_hard_tabs/md010_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md010_no_hard_tabs.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md011_no_reversed_links.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md012_no_multiple_blanks/md012_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md012_no_multiple_blanks.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md013_line_length/md013_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md014_commands_show_output/md014_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md014_commands_show_output.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md018_no_missing_space_atx.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md019_no_multiple_space_atx.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md022_blanks_around_headings/md022_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md022_blanks_around_headings.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md023_heading_start_left.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md024_no_duplicate_heading/md024_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md024_no_duplicate_heading.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md025_single_title/md025_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md025_single_title.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md026_no_trailing_punctuation/md026_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md026_no_trailing_punctuation.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md029_ordered_list_prefix/md029_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md029_ordered_list_prefix.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md030_list_marker_space/md030_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md031_blanks_around_fences.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md032_blanks_around_lists.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md033_no_inline_html/md033_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md033_no_inline_html.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md035_hr_style/md035_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md035_hr_style.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md036_no_emphasis_only_first/md036_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md036_no_emphasis_only_first.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md037_spaces_around_emphasis.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md038_no_space_in_code.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md039_no_space_in_links.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md040_fenced_code_language.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md041_first_line_heading.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md042_no_empty_links.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md043_required_headings.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md044_proper_names/md044_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md044_proper_names.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md045_no_alt_text/md045_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md045_no_alt_text.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md046_code_block_style/md046_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md046_code_block_style.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md047_single_trailing_newline.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md048_code_fence_style/md048_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md048_code_fence_style.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md049_emphasis_style/md049_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md049_emphasis_style.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md050_strong_style/md050_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md050_strong_style.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md053_link_image_reference_definitions.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md054_link_image_style/md054_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md054_link_image_style.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md055_table_pipe_style/md055_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md055_table_pipe_style.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md056_table_column_count.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md057_existing_relative_links/md057_config.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md057_existing_relative_links.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/md058_blanks_around_tables.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/mod.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/rules/strong_style.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/anchor_styles/github.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/anchor_styles/jekyll.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/anchor_styles/kramdown.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/anchor_styles/kramdown_gfm.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/anchor_styles/mod.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/ast_utils.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/code_block_utils.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/document_structure.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/early_returns.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/element_cache.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/emphasis_utils.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/fix_utils.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/header_id_utils.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/kramdown_utils.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/line_ending.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/markdown_elements.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/mkdocs_admonitions.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/mkdocs_common.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/mkdocs_critic.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/mkdocs_footnotes.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/mkdocs_patterns.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/mkdocs_snippets.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/mkdocs_tabs.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/mkdocs_test_utils.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/mkdocstrings_refs.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/mod.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/range_utils.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/regex_cache.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/skip_context.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/string_interner.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/table_utils.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/utils/text_reflow.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/src/vscode.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/advanced_integration_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/character_ranges/additional_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/character_ranges/basic_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/character_ranges/comprehensive_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/character_ranges/extended_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/character_ranges/mod.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/character_ranges/unicode_utils.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/cli_duplication_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/cli_explain_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/cli_flag_precedence_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/cli_integration_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/cli_lsp_fix_consistency.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/cli_statistics_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/common/cli_test_utils.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/common/fixtures.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/common/mod.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/common/test_utils.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/commonmark_compliance_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/comprehensive_integration_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/comprehensive_output_format_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/config_application_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/config_file_command_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/config_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/config_upward_traversal_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/configuration_inheritance_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/consistency_regression_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/cross_platform_compatibility_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/deeply_nested_lists_performance_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/escaped_brackets_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/final_confidence_assessment.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/fix_counting_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/fixable_unfixable_config_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/init_command_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/init_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/inline_config_blocks_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/inline_config_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/integration_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/json_output_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/kramdown_integration_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/lib.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/lsp_editor_integration_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/lsp_formatting_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/lsp_initialization_options_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/lsp_integration_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/lsp_memory_leak_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/lsp_mkdocs_flavor_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/lsp_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/lsp_unopened_document_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/malformed_markdown_stress_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/markdownlint_cli_integration.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/markdownlint_config_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/markdownlintignore_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/md013_reflow_integration_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/md032_ordered_list_bug_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/md037_xxxx_regression_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/md038_false_positive_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/md051_issue_39_regression_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/md051_readme_bug_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/md051_toc_bug_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/md052_literal_brackets_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/nested_code_block_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/output_format_integration_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/output_format_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/perf_check.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/performance_validation_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/pyproject_config_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/python_bindings_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/real_world_repository_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/regression_prevention_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/emphasis_edge_cases_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/heading_edge_cases_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/inline_content_edge_cases_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/link_edge_cases_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/list_rules_integration_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md001_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md001_unicode_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md002_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md003_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md004_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md005_dynamic_indent_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md005_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md005_unicode_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md006_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md006_unicode_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md007_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md009_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md010_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md011_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md012_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md013_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md014_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md018_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md019_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md020_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md021_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md022_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md023_extended_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md023_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md024_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md025_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md026_kramdown_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md026_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md027_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md028_md009_interaction_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md028_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md029_code_block_separation_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md029_fix_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md029_issue42_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md029_markdownlint_parity_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md029_pathological_edge_cases_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md029_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md029_unicode_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md030_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md031_kramdown_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md031_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md032_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md033_extended_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md033_kramdown_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md033_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md034_ipv6_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md034_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md035_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md036_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md037_kramdown_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md037_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md038_nested_backticks_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md038_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md039_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md040_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md041_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md042_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md043_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md044_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md045_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md046_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md047_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md048_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md049_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md050_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md051_comprehensive_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md051_critical_edge_cases_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md051_edge_cases_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md051_issue_39_regression_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md051_performance_edge_cases_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md051_property_based_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md051_regression_prevention_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md051_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md051_unicode_security_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md052_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md053_additional_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md053_proptest.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md053_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md054_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md054_unicode_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md055_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md056_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md057_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md058_kramdown_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/md058_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/mkdocs_admonitions_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/mkdocs_edge_cases_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/mkdocs_extensions_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/mkdocs_snippets_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/mod.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules/rule_interaction_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/rules_mod_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/skip_context_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/test_underscore_edge_cases.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/thread_safety_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/unfixable_rules_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/unicode_edge_case_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/utf8_boundary_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/utils/blockquote_utils_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/utils/code_block_utils_extended_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/utils/code_block_utils_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/utils/core_utils_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/utils/front_matter_utils_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/utils/line_index_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/utils/mod.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/utils_markdown_edge_cases.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/utils_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/vscode_extension_fixes.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/vscode_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/vscode_tests.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/vscode_windows_comprehensive_test.rs +0 -0
- {rumdl-0.0.142 → rumdl-0.0.143}/tests/vscode_windows_test.rs +0 -0
|
@@ -1045,6 +1045,16 @@ version = "0.2.175"
|
|
|
1045
1045
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1046
1046
|
checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543"
|
|
1047
1047
|
|
|
1048
|
+
[[package]]
|
|
1049
|
+
name = "libmimalloc-sys"
|
|
1050
|
+
version = "0.1.44"
|
|
1051
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1052
|
+
checksum = "667f4fec20f29dfc6bc7357c582d91796c169ad7e2fce709468aefeb2c099870"
|
|
1053
|
+
dependencies = [
|
|
1054
|
+
"cc",
|
|
1055
|
+
"libc",
|
|
1056
|
+
]
|
|
1057
|
+
|
|
1048
1058
|
[[package]]
|
|
1049
1059
|
name = "libredox"
|
|
1050
1060
|
version = "0.1.10"
|
|
@@ -1130,6 +1140,15 @@ dependencies = [
|
|
|
1130
1140
|
"autocfg",
|
|
1131
1141
|
]
|
|
1132
1142
|
|
|
1143
|
+
[[package]]
|
|
1144
|
+
name = "mimalloc"
|
|
1145
|
+
version = "0.1.48"
|
|
1146
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1147
|
+
checksum = "e1ee66a4b64c74f4ef288bcbb9192ad9c3feaad75193129ac8509af543894fd8"
|
|
1148
|
+
dependencies = [
|
|
1149
|
+
"libmimalloc-sys",
|
|
1150
|
+
]
|
|
1151
|
+
|
|
1133
1152
|
[[package]]
|
|
1134
1153
|
name = "miniz_oxide"
|
|
1135
1154
|
version = "0.8.9"
|
|
@@ -1625,7 +1644,7 @@ checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001"
|
|
|
1625
1644
|
|
|
1626
1645
|
[[package]]
|
|
1627
1646
|
name = "rumdl"
|
|
1628
|
-
version = "0.0.
|
|
1647
|
+
version = "0.0.143"
|
|
1629
1648
|
dependencies = [
|
|
1630
1649
|
"anyhow",
|
|
1631
1650
|
"assert_cmd",
|
|
@@ -1644,6 +1663,7 @@ dependencies = [
|
|
|
1644
1663
|
"log",
|
|
1645
1664
|
"markdown",
|
|
1646
1665
|
"memmap2",
|
|
1666
|
+
"mimalloc",
|
|
1647
1667
|
"notify",
|
|
1648
1668
|
"num_cpus",
|
|
1649
1669
|
"once_cell",
|
|
@@ -1662,6 +1682,7 @@ dependencies = [
|
|
|
1662
1682
|
"strsim",
|
|
1663
1683
|
"tempfile",
|
|
1664
1684
|
"thiserror",
|
|
1685
|
+
"tikv-jemallocator",
|
|
1665
1686
|
"tokio",
|
|
1666
1687
|
"tokio-util",
|
|
1667
1688
|
"toml",
|
|
@@ -1933,6 +1954,26 @@ dependencies = [
|
|
|
1933
1954
|
"syn",
|
|
1934
1955
|
]
|
|
1935
1956
|
|
|
1957
|
+
[[package]]
|
|
1958
|
+
name = "tikv-jemalloc-sys"
|
|
1959
|
+
version = "0.6.0+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7"
|
|
1960
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1961
|
+
checksum = "cd3c60906412afa9c2b5b5a48ca6a5abe5736aec9eb48ad05037a677e52e4e2d"
|
|
1962
|
+
dependencies = [
|
|
1963
|
+
"cc",
|
|
1964
|
+
"libc",
|
|
1965
|
+
]
|
|
1966
|
+
|
|
1967
|
+
[[package]]
|
|
1968
|
+
name = "tikv-jemallocator"
|
|
1969
|
+
version = "0.6.0"
|
|
1970
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1971
|
+
checksum = "4cec5ff18518d81584f477e9bfdf957f5bb0979b0bac3af4ca30b5b3ae2d2865"
|
|
1972
|
+
dependencies = [
|
|
1973
|
+
"libc",
|
|
1974
|
+
"tikv-jemalloc-sys",
|
|
1975
|
+
]
|
|
1976
|
+
|
|
1936
1977
|
[[package]]
|
|
1937
1978
|
name = "tinystr"
|
|
1938
1979
|
version = "0.8.1"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "rumdl"
|
|
3
|
-
version = "0.0.
|
|
3
|
+
version = "0.0.143"
|
|
4
4
|
edition = "2024"
|
|
5
5
|
rust-version = "1.89.0"
|
|
6
6
|
description = "A fast Markdown linter written in Rust (Ru(st) MarkDown Linter)"
|
|
@@ -139,3 +139,9 @@ unicode-segmentation = "1.12"
|
|
|
139
139
|
unicode-width = "0.2"
|
|
140
140
|
unicode-blocks = "0.1"
|
|
141
141
|
unicode-bidi = "0.3"
|
|
142
|
+
|
|
143
|
+
[target.'cfg(not(target_env = "msvc"))'.dependencies]
|
|
144
|
+
tikv-jemallocator = "0.6"
|
|
145
|
+
|
|
146
|
+
[target.'cfg(target_env = "msvc")'.dependencies]
|
|
147
|
+
mimalloc = { version = "0.1", default-features = false }
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
// Use jemalloc for better memory allocation performance on Unix-like systems
|
|
2
|
+
#[cfg(not(target_env = "msvc"))]
|
|
3
|
+
#[global_allocator]
|
|
4
|
+
static GLOBAL: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc;
|
|
5
|
+
|
|
6
|
+
// Use mimalloc on Windows for better performance
|
|
7
|
+
#[cfg(target_env = "msvc")]
|
|
8
|
+
#[global_allocator]
|
|
9
|
+
static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc;
|
|
10
|
+
|
|
1
11
|
use chrono::Local;
|
|
2
12
|
use clap::{Args, Parser, Subcommand};
|
|
3
13
|
use colored::*;
|
|
@@ -3083,6 +3093,7 @@ fn apply_fixes(
|
|
|
3083
3093
|
quiet: bool,
|
|
3084
3094
|
config: &rumdl_config::Config,
|
|
3085
3095
|
) -> usize {
|
|
3096
|
+
use std::time::Instant;
|
|
3086
3097
|
// Store the original warning count by rule
|
|
3087
3098
|
let mut original_counts: std::collections::HashMap<&str, usize> = std::collections::HashMap::new();
|
|
3088
3099
|
for warning in all_warnings {
|
|
@@ -3091,6 +3102,13 @@ fn apply_fixes(
|
|
|
3091
3102
|
}
|
|
3092
3103
|
}
|
|
3093
3104
|
|
|
3105
|
+
// Track which rules actually fixed content
|
|
3106
|
+
let mut rules_that_fixed = Vec::new();
|
|
3107
|
+
|
|
3108
|
+
let mut total_ctx_time = std::time::Duration::ZERO;
|
|
3109
|
+
let mut total_fix_time = std::time::Duration::ZERO;
|
|
3110
|
+
let mut ctx_creations = 0;
|
|
3111
|
+
|
|
3094
3112
|
// Apply fixes for rules that have warnings, regardless of whether individual warnings have fixes
|
|
3095
3113
|
for rule in rules {
|
|
3096
3114
|
let rule_warnings: Vec<_> = all_warnings
|
|
@@ -3129,14 +3147,23 @@ fn apply_fixes(
|
|
|
3129
3147
|
continue;
|
|
3130
3148
|
}
|
|
3131
3149
|
|
|
3150
|
+
let ctx_start = Instant::now();
|
|
3132
3151
|
let ctx = LintContext::new(content, config.markdown_flavor());
|
|
3152
|
+
total_ctx_time += ctx_start.elapsed();
|
|
3153
|
+
ctx_creations += 1;
|
|
3154
|
+
|
|
3155
|
+
let fix_start = Instant::now();
|
|
3133
3156
|
match rule.fix(&ctx) {
|
|
3134
3157
|
Ok(fixed_content) => {
|
|
3158
|
+
total_fix_time += fix_start.elapsed();
|
|
3135
3159
|
if fixed_content != *content {
|
|
3136
3160
|
*content = fixed_content;
|
|
3161
|
+
// Track that this rule made changes
|
|
3162
|
+
rules_that_fixed.push(rule_name);
|
|
3137
3163
|
}
|
|
3138
3164
|
}
|
|
3139
3165
|
Err(err) => {
|
|
3166
|
+
total_fix_time += fix_start.elapsed();
|
|
3140
3167
|
if !quiet {
|
|
3141
3168
|
eprintln!(
|
|
3142
3169
|
"{} Failed to apply fix for rule {}: {}",
|
|
@@ -3151,12 +3178,16 @@ fn apply_fixes(
|
|
|
3151
3178
|
}
|
|
3152
3179
|
}
|
|
3153
3180
|
|
|
3154
|
-
//
|
|
3181
|
+
// OPTIMIZATION: Only re-check rules that actually applied fixes or had warnings
|
|
3155
3182
|
let ctx_after_fixes = LintContext::new(content, config.markdown_flavor());
|
|
3156
3183
|
let mut remaining_counts: std::collections::HashMap<&str, usize> = std::collections::HashMap::new();
|
|
3157
3184
|
|
|
3158
3185
|
for rule in rules {
|
|
3159
|
-
|
|
3186
|
+
let rule_name = rule.name();
|
|
3187
|
+
// Only re-check if this rule made changes OR if we have original warnings for it
|
|
3188
|
+
if (rules_that_fixed.contains(&rule_name) || original_counts.contains_key(rule_name))
|
|
3189
|
+
&& let Ok(remaining_warnings) = rule.check(&ctx_after_fixes)
|
|
3190
|
+
{
|
|
3160
3191
|
for warning in remaining_warnings {
|
|
3161
3192
|
if let Some(rule_name) = warning.rule_name {
|
|
3162
3193
|
*remaining_counts.entry(rule_name).or_insert(0) += 1;
|
|
@@ -3172,6 +3203,13 @@ fn apply_fixes(
|
|
|
3172
3203
|
warnings_fixed += original_count.saturating_sub(remaining);
|
|
3173
3204
|
}
|
|
3174
3205
|
|
|
3206
|
+
if std::env::var("RUMDL_DEBUG_FIX_PERF").is_ok() {
|
|
3207
|
+
eprintln!("DEBUG: LintContext creations: {ctx_creations}");
|
|
3208
|
+
eprintln!("DEBUG: Total LintContext time: {total_ctx_time:?}");
|
|
3209
|
+
eprintln!("DEBUG: Total fix() time: {total_fix_time:?}");
|
|
3210
|
+
eprintln!("DEBUG: Total time: {:?}", total_ctx_time + total_fix_time);
|
|
3211
|
+
}
|
|
3212
|
+
|
|
3175
3213
|
warnings_fixed
|
|
3176
3214
|
}
|
|
3177
3215
|
|
|
@@ -3183,6 +3221,7 @@ fn apply_fixes_stdin(
|
|
|
3183
3221
|
quiet: bool,
|
|
3184
3222
|
config: &rumdl_config::Config,
|
|
3185
3223
|
) -> usize {
|
|
3224
|
+
use std::time::Instant;
|
|
3186
3225
|
// Store the original warning count by rule
|
|
3187
3226
|
let mut original_counts: std::collections::HashMap<&str, usize> = std::collections::HashMap::new();
|
|
3188
3227
|
for warning in all_warnings {
|
|
@@ -3191,6 +3230,13 @@ fn apply_fixes_stdin(
|
|
|
3191
3230
|
}
|
|
3192
3231
|
}
|
|
3193
3232
|
|
|
3233
|
+
// Track which rules actually fixed content
|
|
3234
|
+
let mut rules_that_fixed = Vec::new();
|
|
3235
|
+
|
|
3236
|
+
let mut total_ctx_time = std::time::Duration::ZERO;
|
|
3237
|
+
let mut total_fix_time = std::time::Duration::ZERO;
|
|
3238
|
+
let mut ctx_creations = 0;
|
|
3239
|
+
|
|
3194
3240
|
// Apply fixes for rules that have warnings, regardless of whether individual warnings have fixes
|
|
3195
3241
|
for rule in rules {
|
|
3196
3242
|
let rule_warnings: Vec<_> = all_warnings
|
|
@@ -3229,14 +3275,23 @@ fn apply_fixes_stdin(
|
|
|
3229
3275
|
continue;
|
|
3230
3276
|
}
|
|
3231
3277
|
|
|
3278
|
+
let ctx_start = Instant::now();
|
|
3232
3279
|
let ctx = LintContext::new(content, config.markdown_flavor());
|
|
3280
|
+
total_ctx_time += ctx_start.elapsed();
|
|
3281
|
+
ctx_creations += 1;
|
|
3282
|
+
|
|
3283
|
+
let fix_start = Instant::now();
|
|
3233
3284
|
match rule.fix(&ctx) {
|
|
3234
3285
|
Ok(fixed_content) => {
|
|
3286
|
+
total_fix_time += fix_start.elapsed();
|
|
3235
3287
|
if fixed_content != *content {
|
|
3236
3288
|
*content = fixed_content;
|
|
3289
|
+
// Track that this rule made changes
|
|
3290
|
+
rules_that_fixed.push(rule_name);
|
|
3237
3291
|
}
|
|
3238
3292
|
}
|
|
3239
3293
|
Err(err) => {
|
|
3294
|
+
total_fix_time += fix_start.elapsed();
|
|
3240
3295
|
if !quiet {
|
|
3241
3296
|
eprintln!(
|
|
3242
3297
|
"{} Failed to apply fix for rule {}: {}",
|
|
@@ -3251,12 +3306,16 @@ fn apply_fixes_stdin(
|
|
|
3251
3306
|
}
|
|
3252
3307
|
}
|
|
3253
3308
|
|
|
3254
|
-
//
|
|
3309
|
+
// OPTIMIZATION: Only re-check rules that actually applied fixes or had warnings
|
|
3255
3310
|
let ctx_after_fixes = LintContext::new(content, config.markdown_flavor());
|
|
3256
3311
|
let mut remaining_counts: std::collections::HashMap<&str, usize> = std::collections::HashMap::new();
|
|
3257
3312
|
|
|
3258
3313
|
for rule in rules {
|
|
3259
|
-
|
|
3314
|
+
let rule_name = rule.name();
|
|
3315
|
+
// Only re-check if this rule made changes OR if we have original warnings for it
|
|
3316
|
+
if (rules_that_fixed.contains(&rule_name) || original_counts.contains_key(rule_name))
|
|
3317
|
+
&& let Ok(remaining_warnings) = rule.check(&ctx_after_fixes)
|
|
3318
|
+
{
|
|
3260
3319
|
for warning in remaining_warnings {
|
|
3261
3320
|
if let Some(rule_name) = warning.rule_name {
|
|
3262
3321
|
*remaining_counts.entry(rule_name).or_insert(0) += 1;
|
|
@@ -3272,6 +3331,13 @@ fn apply_fixes_stdin(
|
|
|
3272
3331
|
warnings_fixed += original_count.saturating_sub(remaining);
|
|
3273
3332
|
}
|
|
3274
3333
|
|
|
3334
|
+
if std::env::var("RUMDL_DEBUG_FIX_PERF").is_ok() {
|
|
3335
|
+
eprintln!("DEBUG: LintContext creations: {ctx_creations}");
|
|
3336
|
+
eprintln!("DEBUG: Total LintContext time: {total_ctx_time:?}");
|
|
3337
|
+
eprintln!("DEBUG: Total fix() time: {total_fix_time:?}");
|
|
3338
|
+
eprintln!("DEBUG: Total time: {:?}", total_ctx_time + total_fix_time);
|
|
3339
|
+
}
|
|
3340
|
+
|
|
3275
3341
|
warnings_fixed
|
|
3276
3342
|
}
|
|
3277
3343
|
|
|
@@ -93,42 +93,8 @@ impl Rule for MD013LineLength {
|
|
|
93
93
|
fn check(&self, ctx: &crate::lint_context::LintContext) -> LintResult {
|
|
94
94
|
let content = ctx.content;
|
|
95
95
|
|
|
96
|
-
//
|
|
97
|
-
if
|
|
98
|
-
return Ok(Vec::new());
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
// Quick check: if total content is shorter than line limit, definitely no violations
|
|
102
|
-
// BUT: in normalize mode with reflow, we still want to check for multi-line paragraphs
|
|
103
|
-
if content.len() <= self.config.line_length
|
|
104
|
-
&& !(self.config.reflow && self.config.reflow_mode == ReflowMode::Normalize)
|
|
105
|
-
{
|
|
106
|
-
return Ok(Vec::new());
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// More aggressive early return - check if any line could possibly be long
|
|
110
|
-
let has_long_lines = if !ctx.lines.is_empty() {
|
|
111
|
-
ctx.lines
|
|
112
|
-
.iter()
|
|
113
|
-
.any(|line| line.content.len() > self.config.line_length)
|
|
114
|
-
} else {
|
|
115
|
-
// Fallback: do a quick scan for newlines to estimate max line length
|
|
116
|
-
let mut max_line_len = 0;
|
|
117
|
-
let mut current_line_len = 0;
|
|
118
|
-
for ch in content.chars() {
|
|
119
|
-
if ch == '\n' {
|
|
120
|
-
max_line_len = max_line_len.max(current_line_len);
|
|
121
|
-
current_line_len = 0;
|
|
122
|
-
} else {
|
|
123
|
-
current_line_len += 1;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
max_line_len = max_line_len.max(current_line_len);
|
|
127
|
-
max_line_len > self.config.line_length
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
// In normalize mode, we want to continue even if no long lines
|
|
131
|
-
if !(has_long_lines || self.config.reflow && self.config.reflow_mode == ReflowMode::Normalize) {
|
|
96
|
+
// Fast early return using should_skip
|
|
97
|
+
if self.should_skip(ctx) && !(self.config.reflow && self.config.reflow_mode == ReflowMode::Normalize) {
|
|
132
98
|
return Ok(Vec::new());
|
|
133
99
|
}
|
|
134
100
|
|
|
@@ -189,6 +155,22 @@ impl Rule for MD013LineLength {
|
|
|
189
155
|
self.config.clone()
|
|
190
156
|
};
|
|
191
157
|
|
|
158
|
+
// Pre-filter lines that could be problematic to avoid processing all lines
|
|
159
|
+
let mut candidate_lines = Vec::new();
|
|
160
|
+
for (line_idx, line_info) in ctx.lines.iter().enumerate() {
|
|
161
|
+
// Quick length check first
|
|
162
|
+
if line_info.content.len() > effective_config.line_length {
|
|
163
|
+
candidate_lines.push(line_idx);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// If no candidate lines and not in normalize mode, early return
|
|
168
|
+
if candidate_lines.is_empty()
|
|
169
|
+
&& !(effective_config.reflow && effective_config.reflow_mode == ReflowMode::Normalize)
|
|
170
|
+
{
|
|
171
|
+
return Ok(warnings);
|
|
172
|
+
}
|
|
173
|
+
|
|
192
174
|
// Use ctx.lines if available for better performance
|
|
193
175
|
let lines: Vec<&str> = if !ctx.lines.is_empty() {
|
|
194
176
|
ctx.lines.iter().map(|l| l.content.as_str()).collect()
|
|
@@ -196,31 +178,33 @@ impl Rule for MD013LineLength {
|
|
|
196
178
|
content.lines().collect()
|
|
197
179
|
};
|
|
198
180
|
|
|
199
|
-
// Create a quick lookup set for heading lines
|
|
200
|
-
let heading_lines_set: std::collections::HashSet<usize> =
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
181
|
+
// Create a quick lookup set for heading lines (only if needed)
|
|
182
|
+
let heading_lines_set: std::collections::HashSet<usize> = if !effective_config.headings {
|
|
183
|
+
structure.heading_lines.iter().cloned().collect()
|
|
184
|
+
} else {
|
|
185
|
+
std::collections::HashSet::new()
|
|
186
|
+
};
|
|
204
187
|
|
|
205
|
-
//
|
|
206
|
-
let table_lines_set: std::collections::HashSet<usize> = {
|
|
188
|
+
// Use TableUtils to find all table blocks (only if needed)
|
|
189
|
+
let table_lines_set: std::collections::HashSet<usize> = if !effective_config.tables {
|
|
190
|
+
let table_blocks = TableUtils::find_table_blocks(content, ctx);
|
|
207
191
|
let mut table_lines = std::collections::HashSet::new();
|
|
208
|
-
|
|
209
192
|
for table in &table_blocks {
|
|
210
|
-
|
|
211
|
-
table_lines.insert(table.header_line + 1); // Convert 0-indexed to 1-indexed
|
|
212
|
-
// Add delimiter line
|
|
193
|
+
table_lines.insert(table.header_line + 1);
|
|
213
194
|
table_lines.insert(table.delimiter_line + 1);
|
|
214
|
-
// Add all content lines
|
|
215
195
|
for &line in &table.content_lines {
|
|
216
|
-
table_lines.insert(line + 1);
|
|
196
|
+
table_lines.insert(line + 1);
|
|
217
197
|
}
|
|
218
198
|
}
|
|
219
199
|
table_lines
|
|
200
|
+
} else {
|
|
201
|
+
std::collections::HashSet::new()
|
|
220
202
|
};
|
|
221
203
|
|
|
222
|
-
|
|
223
|
-
|
|
204
|
+
// Only process candidate lines that were pre-filtered
|
|
205
|
+
for &line_idx in &candidate_lines {
|
|
206
|
+
let line_number = line_idx + 1;
|
|
207
|
+
let line = lines[line_idx];
|
|
224
208
|
|
|
225
209
|
// Calculate effective length excluding unbreakable URLs
|
|
226
210
|
let effective_length = self.calculate_effective_length(line);
|
|
@@ -228,7 +212,7 @@ impl Rule for MD013LineLength {
|
|
|
228
212
|
// Use single line length limit for all content
|
|
229
213
|
let line_limit = effective_config.line_length;
|
|
230
214
|
|
|
231
|
-
// Skip short lines immediately
|
|
215
|
+
// Skip short lines immediately (double-check after effective length calculation)
|
|
232
216
|
if effective_length <= line_limit {
|
|
233
217
|
continue;
|
|
234
218
|
}
|
|
@@ -253,7 +237,7 @@ impl Rule for MD013LineLength {
|
|
|
253
237
|
}
|
|
254
238
|
|
|
255
239
|
// Skip lines that are only a URL, image ref, or link ref
|
|
256
|
-
if self.should_ignore_line(line, &lines,
|
|
240
|
+
if self.should_ignore_line(line, &lines, line_idx, structure) {
|
|
257
241
|
continue;
|
|
258
242
|
}
|
|
259
243
|
}
|
|
@@ -647,7 +631,13 @@ impl MD013LineLength {
|
|
|
647
631
|
return line.chars().count();
|
|
648
632
|
}
|
|
649
633
|
|
|
650
|
-
// Quick check: if line doesn't contain "http" or "[", it can't have URLs or markdown links
|
|
634
|
+
// Quick byte-level check: if line doesn't contain "http" or "[", it can't have URLs or markdown links
|
|
635
|
+
let bytes = line.as_bytes();
|
|
636
|
+
if !bytes.contains(&b'h') && !bytes.contains(&b'[') {
|
|
637
|
+
return line.chars().count();
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
// More precise check for URLs and links
|
|
651
641
|
if !line.contains("http") && !line.contains('[') {
|
|
652
642
|
return line.chars().count();
|
|
653
643
|
}
|
|
@@ -13,32 +13,42 @@ pub struct MD028NoBlanksBlockquote;
|
|
|
13
13
|
|
|
14
14
|
impl MD028NoBlanksBlockquote {
|
|
15
15
|
/// Check if a line is a blockquote line (has > markers)
|
|
16
|
+
#[inline]
|
|
16
17
|
fn is_blockquote_line(line: &str) -> bool {
|
|
18
|
+
// Fast path: check for '>' character before doing any string operations
|
|
19
|
+
if !line.as_bytes().contains(&b'>') {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
17
22
|
line.trim_start().starts_with('>')
|
|
18
23
|
}
|
|
19
24
|
|
|
20
|
-
/// Get the blockquote level (number of > markers)
|
|
21
|
-
|
|
22
|
-
|
|
25
|
+
/// Get the blockquote level (number of > markers) and leading whitespace
|
|
26
|
+
/// Returns (level, whitespace_end_idx)
|
|
27
|
+
fn get_blockquote_info(line: &str) -> (usize, usize) {
|
|
28
|
+
let bytes = line.as_bytes();
|
|
29
|
+
let mut i = 0;
|
|
30
|
+
|
|
31
|
+
// Skip leading whitespace
|
|
32
|
+
while i < bytes.len() && (bytes[i] == b' ' || bytes[i] == b'\t') {
|
|
33
|
+
i += 1;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
let whitespace_end = i;
|
|
23
37
|
let mut level = 0;
|
|
24
|
-
let chars = trimmed.chars();
|
|
25
38
|
|
|
26
|
-
|
|
27
|
-
|
|
39
|
+
// Count '>' markers
|
|
40
|
+
while i < bytes.len() {
|
|
41
|
+
if bytes[i] == b'>' {
|
|
28
42
|
level += 1;
|
|
29
|
-
|
|
43
|
+
i += 1;
|
|
44
|
+
} else if bytes[i] == b' ' || bytes[i] == b'\t' {
|
|
45
|
+
i += 1;
|
|
46
|
+
} else {
|
|
30
47
|
break;
|
|
31
48
|
}
|
|
32
49
|
}
|
|
33
50
|
|
|
34
|
-
level
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/// Get the leading whitespace before the first >
|
|
38
|
-
fn get_leading_whitespace(line: &str) -> &str {
|
|
39
|
-
let trimmed_len = line.trim_start().len();
|
|
40
|
-
let total_len = line.len();
|
|
41
|
-
&line[..total_len - trimmed_len]
|
|
51
|
+
(level, whitespace_end)
|
|
42
52
|
}
|
|
43
53
|
|
|
44
54
|
/// Check if there's substantive content between two blockquote sections
|
|
@@ -66,19 +76,24 @@ impl MD028NoBlanksBlockquote {
|
|
|
66
76
|
// Even multiple consecutive blank lines are flagged as they can be ambiguous
|
|
67
77
|
// (some parsers treat them as one blockquote, others as separate blockquotes).
|
|
68
78
|
|
|
69
|
-
// Find previous and next blockquote lines
|
|
79
|
+
// Find previous and next blockquote lines using fast byte scanning
|
|
70
80
|
let mut prev_quote_idx = None;
|
|
71
81
|
let mut next_quote_idx = None;
|
|
72
82
|
|
|
83
|
+
// Scan backwards for previous blockquote
|
|
73
84
|
for i in (0..blank_idx).rev() {
|
|
74
|
-
|
|
85
|
+
let line = lines[i];
|
|
86
|
+
// Fast check: if no '>' character, skip
|
|
87
|
+
if line.as_bytes().contains(&b'>') && Self::is_blockquote_line(line) {
|
|
75
88
|
prev_quote_idx = Some(i);
|
|
76
89
|
break;
|
|
77
90
|
}
|
|
78
91
|
}
|
|
79
92
|
|
|
93
|
+
// Scan forwards for next blockquote
|
|
80
94
|
for (i, line) in lines.iter().enumerate().skip(blank_idx + 1) {
|
|
81
|
-
if
|
|
95
|
+
// Fast check: if no '>' character, skip
|
|
96
|
+
if line.as_bytes().contains(&b'>') && Self::is_blockquote_line(line) {
|
|
82
97
|
next_quote_idx = Some(i);
|
|
83
98
|
break;
|
|
84
99
|
}
|
|
@@ -94,9 +109,9 @@ impl MD028NoBlanksBlockquote {
|
|
|
94
109
|
return false;
|
|
95
110
|
}
|
|
96
111
|
|
|
97
|
-
//
|
|
98
|
-
let prev_level = Self::
|
|
99
|
-
let next_level = Self::
|
|
112
|
+
// Get blockquote info once per line to avoid repeated parsing
|
|
113
|
+
let (prev_level, prev_whitespace_end) = Self::get_blockquote_info(lines[prev_idx]);
|
|
114
|
+
let (next_level, next_whitespace_end) = Self::get_blockquote_info(lines[next_idx]);
|
|
100
115
|
|
|
101
116
|
// Different levels suggest different contexts
|
|
102
117
|
// But next_level > prev_level could be nested continuation
|
|
@@ -104,9 +119,11 @@ impl MD028NoBlanksBlockquote {
|
|
|
104
119
|
return false;
|
|
105
120
|
}
|
|
106
121
|
|
|
107
|
-
// Check indentation consistency
|
|
108
|
-
let
|
|
109
|
-
let
|
|
122
|
+
// Check indentation consistency using byte indices
|
|
123
|
+
let prev_line = lines[prev_idx];
|
|
124
|
+
let next_line = lines[next_idx];
|
|
125
|
+
let prev_indent = &prev_line[..prev_whitespace_end];
|
|
126
|
+
let next_indent = &next_line[..next_whitespace_end];
|
|
110
127
|
|
|
111
128
|
// Different indentation indicates separate blockquote contexts
|
|
112
129
|
// Same indentation with no content between = same blockquote (blank line inside)
|
|
@@ -129,12 +146,15 @@ impl MD028NoBlanksBlockquote {
|
|
|
129
146
|
}
|
|
130
147
|
|
|
131
148
|
// This blank line appears to be inside a blockquote
|
|
132
|
-
// Find the appropriate fix
|
|
149
|
+
// Find the appropriate fix using optimized parsing
|
|
133
150
|
for i in (0..index).rev() {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
let
|
|
151
|
+
let line = lines[i];
|
|
152
|
+
// Fast check: if no '>' character, skip
|
|
153
|
+
if line.as_bytes().contains(&b'>') && Self::is_blockquote_line(line) {
|
|
154
|
+
let (level, whitespace_end) = Self::get_blockquote_info(line);
|
|
155
|
+
let indent = &line[..whitespace_end];
|
|
156
|
+
let mut fix = String::with_capacity(indent.len() + level);
|
|
157
|
+
fix.push_str(indent);
|
|
138
158
|
for _ in 0..level {
|
|
139
159
|
fix.push('>');
|
|
140
160
|
}
|
|
@@ -177,17 +197,35 @@ impl Rule for MD028NoBlanksBlockquote {
|
|
|
177
197
|
// Get all lines
|
|
178
198
|
let lines: Vec<&str> = ctx.content.lines().collect();
|
|
179
199
|
|
|
180
|
-
//
|
|
181
|
-
|
|
182
|
-
|
|
200
|
+
// Pre-scan to find blank lines and blockquote lines for faster processing
|
|
201
|
+
let mut blank_line_indices = Vec::new();
|
|
202
|
+
let mut has_blockquotes = false;
|
|
183
203
|
|
|
204
|
+
for (line_idx, line) in lines.iter().enumerate() {
|
|
184
205
|
// Skip lines in code blocks
|
|
185
206
|
if line_idx < ctx.lines.len() && ctx.lines[line_idx].in_code_block {
|
|
186
207
|
continue;
|
|
187
208
|
}
|
|
188
209
|
|
|
210
|
+
if line.trim().is_empty() {
|
|
211
|
+
blank_line_indices.push(line_idx);
|
|
212
|
+
} else if Self::is_blockquote_line(line) {
|
|
213
|
+
has_blockquotes = true;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// If no blockquotes found, no need to check blank lines
|
|
218
|
+
if !has_blockquotes {
|
|
219
|
+
return Ok(Vec::new());
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// Only check blank lines that could be problematic
|
|
223
|
+
for &line_idx in &blank_line_indices {
|
|
224
|
+
let line_num = line_idx + 1;
|
|
225
|
+
|
|
189
226
|
// Check if this is a problematic blank line inside a blockquote
|
|
190
227
|
if let Some((level, fix_content)) = Self::is_problematic_blank_line(&lines, line_idx) {
|
|
228
|
+
let line = lines[line_idx];
|
|
191
229
|
let (start_line, start_col, end_line, end_col) = calculate_line_range(line_num, line);
|
|
192
230
|
|
|
193
231
|
warnings.push(LintWarning {
|