rumdl 0.0.117__tar.gz → 0.0.118__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.117 → rumdl-0.0.118}/CHANGELOG.md +4 -1
- {rumdl-0.0.117 → rumdl-0.0.118}/Cargo.lock +3 -3
- {rumdl-0.0.117 → rumdl-0.0.118}/Cargo.toml +1 -1
- {rumdl-0.0.117 → rumdl-0.0.118}/PKG-INFO +1 -1
- {rumdl-0.0.117 → rumdl-0.0.118}/src/utils/kramdown_utils.rs +105 -9
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md051_test.rs +54 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/.config/nextest.toml +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/.mise.toml +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/.pre-commit-config.yaml +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/.rumdl.toml +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/.rustfmt.toml +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/LICENSE +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/MANIFEST.in +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/Makefile +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/README.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/assets/logo.png +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/benches/fix_performance.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/benches/range_performance.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/benches/range_utils_benchmark.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/benches/rule_performance.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/benches/simple_fix_bench.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/benchmark/bin/bench_lint_context.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/benchmark/bin/benchmark.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/benchmark/bin/benchmark_rule.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/benchmark/bin/file_parallel_benchmark.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/benchmark/bin/measure_code_span_performance.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/RULES.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/global-settings.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md001.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md002.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md003.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md004.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md005.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md006.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md007.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md009.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md010.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md011.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md012.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md013.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md014.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md018.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md019.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md020.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md021.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md022.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md023.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md024.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md025.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md026.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md027.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md028.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md029.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md030.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md031.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md032.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md033.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md034.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md035.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md036.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md037.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md038.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md039.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md040.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md041.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md042.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md043.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md044.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md045.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md046.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md047.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md048.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md049.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md050.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md051.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md052.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md053.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md054.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md055.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md056.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md057.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/md058.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/docs/vscode-extension.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/parity_check.py +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/pyproject.toml +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/python/MANIFEST.in +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/python/PYTHON-README.md +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/python/rumdl/__init__.py +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/python/rumdl/__main__.py +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/python/rumdl/py.typed +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/rumdl.toml.example +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/rust-toolchain.toml +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/scripts/extract-changelog.sh +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/scripts/generate-downloads-table.sh +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/scripts/pre-release.sh +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/scripts/prepare-release.sh +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/scripts/setup-pre-commit.sh +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/scripts/update-pre-commit-docs.sh +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/exit_codes.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/inline_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/lib.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/lint_context.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/lsp/mod.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/lsp/server.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/lsp/types.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/main.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/markdownlint_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/output/formatters/azure.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/output/formatters/concise.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/output/formatters/github.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/output/formatters/gitlab.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/output/formatters/grouped.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/output/formatters/json.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/output/formatters/json_lines.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/output/formatters/junit.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/output/formatters/mod.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/output/formatters/pylint.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/output/formatters/sarif.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/output/formatters/text.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/output/mod.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/parallel.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/performance.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/profiling.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/python.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rule.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rule_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rule_config_serde.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/blockquote_utils.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/code_block_utils.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/code_fence_utils.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/emphasis_style.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/front_matter_utils.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/heading_utils.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/list_utils.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md001_heading_increment.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md002_first_heading_h1/md002_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md002_first_heading_h1.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md003_heading_style/md003_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md003_heading_style.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md004_unordered_list_style/md004_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md004_unordered_list_style.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md005_list_indent.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md006_start_bullets.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md007_ul_indent/md007_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md007_ul_indent.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md009_trailing_spaces/md009_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md009_trailing_spaces.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md010_no_hard_tabs/md010_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md010_no_hard_tabs.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md011_no_reversed_links.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md012_no_multiple_blanks/md012_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md012_no_multiple_blanks.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md013_line_length/md013_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md013_line_length.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md014_commands_show_output/md014_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md014_commands_show_output.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md018_no_missing_space_atx.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md019_no_multiple_space_atx.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md022_blanks_around_headings/md022_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md022_blanks_around_headings.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md023_heading_start_left.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md024_no_duplicate_heading/md024_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md024_no_duplicate_heading.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md025_single_title/md025_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md025_single_title.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md026_no_trailing_punctuation/md026_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md026_no_trailing_punctuation.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md028_no_blanks_blockquote.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md029_ordered_list_prefix/md029_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md029_ordered_list_prefix.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md030_list_marker_space/md030_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md030_list_marker_space.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md031_blanks_around_fences.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md032_blanks_around_lists.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md033_no_inline_html/md033_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md033_no_inline_html.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md034_no_bare_urls.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md035_hr_style/md035_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md035_hr_style.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md036_no_emphasis_only_first/md036_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md036_no_emphasis_only_first.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md037_spaces_around_emphasis.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md038_no_space_in_code.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md039_no_space_in_links.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md040_fenced_code_language.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md041_first_line_heading.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md042_no_empty_links.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md043_required_headings.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md044_proper_names/md044_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md044_proper_names.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md045_no_alt_text/md045_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md045_no_alt_text.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md046_code_block_style/md046_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md046_code_block_style.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md047_single_trailing_newline.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md048_code_fence_style/md048_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md048_code_fence_style.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md049_emphasis_style/md049_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md049_emphasis_style.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md050_strong_style/md050_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md050_strong_style.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md051_link_fragments.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md052_reference_links_images.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md053_link_image_reference_definitions.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md054_link_image_style/md054_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md054_link_image_style.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md055_table_pipe_style/md055_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md055_table_pipe_style.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md056_table_column_count.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md057_existing_relative_links/md057_config.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md057_existing_relative_links.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/md058_blanks_around_tables.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/mod.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/rules/strong_style.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/utils/ast_utils.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/utils/code_block_utils.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/utils/document_structure.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/utils/early_returns.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/utils/element_cache.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/utils/emphasis_utils.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/utils/fix_utils.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/utils/markdown_elements.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/utils/mod.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/utils/range_utils.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/utils/regex_cache.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/utils/skip_context.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/utils/string_interner.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/utils/table_utils.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/utils/text_reflow.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/src/vscode.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/advanced_integration_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/character_ranges/additional_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/character_ranges/basic_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/character_ranges/comprehensive_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/character_ranges/extended_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/character_ranges/mod.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/character_ranges/unicode_utils.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/cli_duplication_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/cli_explain_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/cli_flag_precedence_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/cli_integration_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/cli_lsp_fix_consistency.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/cli_statistics_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/common/cli_test_utils.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/common/fixtures.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/common/mod.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/common/test_utils.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/commonmark_compliance_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/comprehensive_integration_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/comprehensive_output_format_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/config_application_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/config_file_command_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/config_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/configuration_inheritance_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/consistency_regression_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/cross_platform_compatibility_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/deeply_nested_lists_performance_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/escaped_brackets_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/final_confidence_assessment.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/fixable_unfixable_config_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/init_command_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/init_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/inline_config_blocks_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/inline_config_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/integration_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/json_output_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/kramdown_integration_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/lib.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/lsp_editor_integration_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/lsp_integration_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/lsp_memory_leak_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/lsp_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/malformed_markdown_stress_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/markdownlint_cli_integration.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/markdownlint_config_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/markdownlintignore_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/md013_reflow_integration_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/nested_code_block_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/output_format_integration_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/output_format_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/perf_check.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/performance_validation_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/pyproject_config_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/python_bindings_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/real_world_repository_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/regression_prevention_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/emphasis_edge_cases_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/heading_edge_cases_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/inline_content_edge_cases_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/link_edge_cases_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/list_rules_integration_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md001_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md001_unicode_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md002_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md003_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md004_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md005_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md005_unicode_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md006_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md006_unicode_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md007_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md009_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md010_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md011_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md012_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md013_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md014_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md018_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md019_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md020_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md021_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md022_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md023_extended_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md023_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md024_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md025_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md026_kramdown_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md026_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md027_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md028_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md029_issue42_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md029_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md029_unicode_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md030_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md031_kramdown_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md031_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md032_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md033_extended_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md033_kramdown_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md033_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md034_ipv6_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md034_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md035_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md036_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md037_kramdown_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md037_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md038_nested_backticks_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md038_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md039_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md040_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md041_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md042_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md043_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md044_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md045_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md046_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md047_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md048_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md049_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md050_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md051_unicode_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md052_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md053_additional_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md053_proptest.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md053_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md054_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md054_unicode_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md055_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md056_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md057_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md058_kramdown_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/md058_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules/mod.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/rules_mod_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/skip_context_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/thread_safety_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/unicode_edge_case_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/utils/blockquote_utils_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/utils/code_block_utils_extended_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/utils/code_block_utils_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/utils/core_utils_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/utils/front_matter_utils_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/utils/line_index_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/utils/mod.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/utils_markdown_edge_cases.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/utils_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/vscode_extension_fixes.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/vscode_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/vscode_tests.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/vscode_windows_comprehensive_test.rs +0 -0
- {rumdl-0.0.117 → rumdl-0.0.118}/tests/vscode_windows_test.rs +0 -0
|
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.0.118] - 2025-08-14
|
|
11
|
+
|
|
10
12
|
## [0.0.117] - 2025-08-14
|
|
11
13
|
|
|
12
14
|
### Fixed
|
|
@@ -335,7 +337,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
335
337
|
|
|
336
338
|
- Initial implementation of remaining rules for markdownlint parity
|
|
337
339
|
|
|
338
|
-
[Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.
|
|
340
|
+
[Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.118...HEAD
|
|
341
|
+
[0.0.118]: https://github.com/rvben/rumdl/compare/v0.0.117...v0.0.118
|
|
339
342
|
[0.0.117]: https://github.com/rvben/rumdl/compare/v0.0.116...v0.0.117
|
|
340
343
|
[0.0.116]: https://github.com/rvben/rumdl/compare/v0.0.115...v0.0.116
|
|
341
344
|
[0.0.115]: https://github.com/rvben/rumdl/compare/v0.0.114...v0.0.115
|
|
@@ -121,9 +121,9 @@ dependencies = [
|
|
|
121
121
|
|
|
122
122
|
[[package]]
|
|
123
123
|
name = "async-trait"
|
|
124
|
-
version = "0.1.
|
|
124
|
+
version = "0.1.89"
|
|
125
125
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
126
|
-
checksum = "
|
|
126
|
+
checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
|
|
127
127
|
dependencies = [
|
|
128
128
|
"proc-macro2",
|
|
129
129
|
"quote",
|
|
@@ -1493,7 +1493,7 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
|
|
|
1493
1493
|
|
|
1494
1494
|
[[package]]
|
|
1495
1495
|
name = "rumdl"
|
|
1496
|
-
version = "0.0.
|
|
1496
|
+
version = "0.0.118"
|
|
1497
1497
|
dependencies = [
|
|
1498
1498
|
"anyhow",
|
|
1499
1499
|
"assert_cmd",
|
|
@@ -10,10 +10,11 @@ lazy_static! {
|
|
|
10
10
|
/// Pattern for Kramdown span IAL: text{:.class #id key="value"}
|
|
11
11
|
static ref SPAN_IAL_PATTERN: Regex = Regex::new(r"\{[:\.#][^}]*\}$").unwrap();
|
|
12
12
|
|
|
13
|
-
/// Pattern for
|
|
13
|
+
/// Pattern for custom header IDs supporting both kramdown and python-markdown attr-list formats
|
|
14
|
+
/// Supports: {#id}, { #id }, {:#id}, {: #id } (all variations with optional colon and spaces)
|
|
14
15
|
/// Permissive but safe: Unicode letters/numbers, hyphens, underscores, colons (Kramdown allows)
|
|
15
|
-
/// Rejects: spaces, quotes, brackets, HTML/CSS special chars
|
|
16
|
-
static ref HEADER_ID_PATTERN: Regex = Regex::new(r"\s*\{
|
|
16
|
+
/// Rejects: spaces in ID, quotes, brackets, HTML/CSS special chars
|
|
17
|
+
static ref HEADER_ID_PATTERN: Regex = Regex::new(r"\s*\{\s*:?\s*#\s*[\w\-:]+\s*\}\s*$").unwrap();
|
|
17
18
|
|
|
18
19
|
/// Pattern for Kramdown extensions opening: {::comment}, {::nomarkdown}, etc.
|
|
19
20
|
static ref EXTENSION_OPEN_PATTERN: Regex = Regex::new(r"^\s*\{::([a-z]+)(?:\s+[^}]*)?\}\s*$").unwrap();
|
|
@@ -119,6 +120,12 @@ pub fn remove_header_id(line: &str) -> String {
|
|
|
119
120
|
/// Extract custom header ID from a heading line
|
|
120
121
|
/// Returns a tuple of (clean_text, Option<custom_id>)
|
|
121
122
|
///
|
|
123
|
+
/// Supports both kramdown and python-markdown attr-list formats:
|
|
124
|
+
/// - `{#custom-id}` (kramdown style)
|
|
125
|
+
/// - `{ #custom-id }` (attr-list with spaces)
|
|
126
|
+
/// - `{:#custom-id}` (attr-list with colon)
|
|
127
|
+
/// - `{: #custom-id }` (attr-list with colon and spaces)
|
|
128
|
+
///
|
|
122
129
|
/// # Examples
|
|
123
130
|
/// ```
|
|
124
131
|
/// use rumdl::utils::kramdown_utils::extract_header_id;
|
|
@@ -127,6 +134,14 @@ pub fn remove_header_id(line: &str) -> String {
|
|
|
127
134
|
/// assert_eq!(text, "## Header");
|
|
128
135
|
/// assert_eq!(id, Some("custom-id".to_string()));
|
|
129
136
|
///
|
|
137
|
+
/// let (text, id) = extract_header_id("## Header { #spaced-id }");
|
|
138
|
+
/// assert_eq!(text, "## Header");
|
|
139
|
+
/// assert_eq!(id, Some("spaced-id".to_string()));
|
|
140
|
+
///
|
|
141
|
+
/// let (text, id) = extract_header_id("## Header {: #colon-id }");
|
|
142
|
+
/// assert_eq!(text, "## Header");
|
|
143
|
+
/// assert_eq!(id, Some("colon-id".to_string()));
|
|
144
|
+
///
|
|
130
145
|
/// let (text, id) = extract_header_id("## Normal Header");
|
|
131
146
|
/// assert_eq!(text, "## Normal Header");
|
|
132
147
|
/// assert_eq!(id, None);
|
|
@@ -138,13 +153,21 @@ pub fn extract_header_id(line: &str) -> (String, Option<String>) {
|
|
|
138
153
|
// Extract the clean text without the ID
|
|
139
154
|
let clean_text = line[..id_match.start()].trim_end().to_string();
|
|
140
155
|
|
|
141
|
-
// Extract the ID from {#
|
|
156
|
+
// Extract the ID from various formats: {#id}, { #id }, {:#id}, {: #id }
|
|
142
157
|
let id_str = id_match.as_str().trim();
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
158
|
+
|
|
159
|
+
// Remove braces and extract content
|
|
160
|
+
let inner = id_str.trim_start_matches('{').trim_end_matches('}').trim();
|
|
161
|
+
|
|
162
|
+
// Handle optional colon and find the hash
|
|
163
|
+
let after_colon = if inner.starts_with(':') {
|
|
164
|
+
inner.trim_start_matches(':').trim()
|
|
165
|
+
} else {
|
|
166
|
+
inner
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
// Extract ID after hash
|
|
170
|
+
let id = after_colon.trim_start_matches('#').trim().to_string();
|
|
148
171
|
|
|
149
172
|
return (clean_text, Some(id));
|
|
150
173
|
}
|
|
@@ -286,4 +309,77 @@ mod tests {
|
|
|
286
309
|
assert!(is_kramdown_block_attribute("\t{:#id}\t"));
|
|
287
310
|
assert!(is_kramdown_block_attribute(" {:.class #id} "));
|
|
288
311
|
}
|
|
312
|
+
|
|
313
|
+
#[test]
|
|
314
|
+
fn test_header_id_detection() {
|
|
315
|
+
// Kramdown style (original format)
|
|
316
|
+
assert!(has_header_id("# Header {#custom-id}"));
|
|
317
|
+
assert!(has_header_id("## Section {#section-1}"));
|
|
318
|
+
|
|
319
|
+
// Python-markdown attr-list with spaces
|
|
320
|
+
assert!(has_header_id("# Header { #spaced-id }"));
|
|
321
|
+
assert!(has_header_id("## Section { #section-with-spaces }"));
|
|
322
|
+
|
|
323
|
+
// Python-markdown attr-list with colon
|
|
324
|
+
assert!(has_header_id("# Header {:#colon-id}"));
|
|
325
|
+
assert!(has_header_id("## Section {: #colon-with-spaces }"));
|
|
326
|
+
|
|
327
|
+
// Combined colon and spaces
|
|
328
|
+
assert!(has_header_id("# Header {: #full-format }"));
|
|
329
|
+
|
|
330
|
+
// Should not match
|
|
331
|
+
assert!(!has_header_id("# Regular Header"));
|
|
332
|
+
assert!(!has_header_id("# Header { no hash }"));
|
|
333
|
+
assert!(!has_header_id("# Header {#}")); // Empty ID
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
#[test]
|
|
337
|
+
fn test_header_id_extraction() {
|
|
338
|
+
// Kramdown style (original format)
|
|
339
|
+
let (text, id) = extract_header_id("## Header {#test-id}");
|
|
340
|
+
assert_eq!(text, "## Header");
|
|
341
|
+
assert_eq!(id, Some("test-id".to_string()));
|
|
342
|
+
|
|
343
|
+
// Python-markdown attr-list with spaces
|
|
344
|
+
let (text, id) = extract_header_id("# Title { #spaced-id }");
|
|
345
|
+
assert_eq!(text, "# Title");
|
|
346
|
+
assert_eq!(id, Some("spaced-id".to_string()));
|
|
347
|
+
|
|
348
|
+
// Python-markdown attr-list with colon (no spaces)
|
|
349
|
+
let (text, id) = extract_header_id("### Subsection {:#compact-colon}");
|
|
350
|
+
assert_eq!(text, "### Subsection");
|
|
351
|
+
assert_eq!(id, Some("compact-colon".to_string()));
|
|
352
|
+
|
|
353
|
+
// Python-markdown attr-list with colon and spaces
|
|
354
|
+
let (text, id) = extract_header_id("#### Deep Section {: #colon-spaces }");
|
|
355
|
+
assert_eq!(text, "#### Deep Section");
|
|
356
|
+
assert_eq!(id, Some("colon-spaces".to_string()));
|
|
357
|
+
|
|
358
|
+
// No header ID
|
|
359
|
+
let (text, id) = extract_header_id("## Normal Header");
|
|
360
|
+
assert_eq!(text, "## Normal Header");
|
|
361
|
+
assert_eq!(id, None);
|
|
362
|
+
|
|
363
|
+
// Complex ID with allowed characters
|
|
364
|
+
let (text, id) = extract_header_id("# Header {#complex-id_with:colons}");
|
|
365
|
+
assert_eq!(text, "# Header");
|
|
366
|
+
assert_eq!(id, Some("complex-id_with:colons".to_string()));
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
#[test]
|
|
370
|
+
fn test_header_id_edge_cases() {
|
|
371
|
+
// Test that extra spaces are handled correctly
|
|
372
|
+
let (text, id) = extract_header_id("# Header { : # extra-spaces }");
|
|
373
|
+
assert_eq!(text, "# Header");
|
|
374
|
+
assert_eq!(id, Some("extra-spaces".to_string()));
|
|
375
|
+
|
|
376
|
+
// Test minimal format variations
|
|
377
|
+
let (text, id) = extract_header_id("# Header {#a}");
|
|
378
|
+
assert_eq!(text, "# Header");
|
|
379
|
+
assert_eq!(id, Some("a".to_string()));
|
|
380
|
+
|
|
381
|
+
let (text, id) = extract_header_id("# Header {:# b}");
|
|
382
|
+
assert_eq!(text, "# Header");
|
|
383
|
+
assert_eq!(id, Some("b".to_string()));
|
|
384
|
+
}
|
|
289
385
|
}
|
|
@@ -1146,3 +1146,57 @@ fn test_performance_with_many_links() {
|
|
|
1146
1146
|
ctx.links.len()
|
|
1147
1147
|
);
|
|
1148
1148
|
}
|
|
1149
|
+
|
|
1150
|
+
#[test]
|
|
1151
|
+
fn test_custom_header_id_formats() {
|
|
1152
|
+
// Test all supported custom header ID formats
|
|
1153
|
+
let content = r#"# Kramdown Style {#kramdown-id}
|
|
1154
|
+
|
|
1155
|
+
Some content here.
|
|
1156
|
+
|
|
1157
|
+
## Python-markdown with spaces { #spaced-id }
|
|
1158
|
+
|
|
1159
|
+
More content.
|
|
1160
|
+
|
|
1161
|
+
### Python-markdown with colon {:#colon-id}
|
|
1162
|
+
|
|
1163
|
+
Even more content.
|
|
1164
|
+
|
|
1165
|
+
#### Python-markdown full format {: #full-format }
|
|
1166
|
+
|
|
1167
|
+
Final content.
|
|
1168
|
+
|
|
1169
|
+
Links to test all formats:
|
|
1170
|
+
- [Link to kramdown](#kramdown-id)
|
|
1171
|
+
- [Link to spaced](#spaced-id)
|
|
1172
|
+
- [Link to colon](#colon-id)
|
|
1173
|
+
- [Link to full format](#full-format)
|
|
1174
|
+
|
|
1175
|
+
Links that should fail:
|
|
1176
|
+
- [Link to nonexistent](#nonexistent-id)
|
|
1177
|
+
"#;
|
|
1178
|
+
|
|
1179
|
+
let ctx = LintContext::new(content);
|
|
1180
|
+
let rule = MD051LinkFragments::new();
|
|
1181
|
+
let result = rule.check(&ctx).unwrap();
|
|
1182
|
+
|
|
1183
|
+
// Should only flag the nonexistent fragment
|
|
1184
|
+
assert_eq!(result.len(), 1, "Expected 1 warning for nonexistent fragment");
|
|
1185
|
+
assert!(
|
|
1186
|
+
result[0].message.contains("nonexistent-id"),
|
|
1187
|
+
"Warning should be about nonexistent fragment, got: {}",
|
|
1188
|
+
result[0].message
|
|
1189
|
+
);
|
|
1190
|
+
|
|
1191
|
+
// All valid custom ID formats should be recognized
|
|
1192
|
+
for warning in &result {
|
|
1193
|
+
assert!(
|
|
1194
|
+
!warning.message.contains("kramdown-id")
|
|
1195
|
+
&& !warning.message.contains("spaced-id")
|
|
1196
|
+
&& !warning.message.contains("colon-id")
|
|
1197
|
+
&& !warning.message.contains("full-format"),
|
|
1198
|
+
"Valid custom ID format should not be flagged as missing: {}",
|
|
1199
|
+
warning.message
|
|
1200
|
+
);
|
|
1201
|
+
}
|
|
1202
|
+
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|