rumdl 0.0.108__tar.gz → 0.0.109__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.
- {rumdl-0.0.108 → rumdl-0.0.109}/.config/nextest.toml +20 -4
- {rumdl-0.0.108 → rumdl-0.0.109}/.pre-commit-config.yaml +5 -5
- {rumdl-0.0.108 → rumdl-0.0.109}/CHANGELOG.md +4 -1
- {rumdl-0.0.108 → rumdl-0.0.109}/Cargo.lock +6 -6
- {rumdl-0.0.108 → rumdl-0.0.109}/Cargo.toml +1 -1
- {rumdl-0.0.108 → rumdl-0.0.109}/Makefile +7 -1
- {rumdl-0.0.108 → rumdl-0.0.109}/PKG-INFO +1 -1
- {rumdl-0.0.108 → rumdl-0.0.109}/src/lint_context.rs +27 -35
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md004_unordered_list_style.rs +8 -15
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md006_start_bullets.rs +49 -21
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md011_no_reversed_links.rs +15 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md029_ordered_list_prefix.rs +63 -19
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md033_no_inline_html.rs +5 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md037_spaces_around_emphasis.rs +52 -8
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md042_no_empty_links.rs +36 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md046_code_block_style.rs +1 -81
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md051_link_fragments.rs +5 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/utils/code_block_utils.rs +17 -3
- {rumdl-0.0.108 → rumdl-0.0.109}/src/utils/document_structure.rs +23 -15
- {rumdl-0.0.108 → rumdl-0.0.109}/src/utils/table_utils.rs +104 -5
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/cli_integration_tests.rs +6 -45
- rumdl-0.0.109/tests/common/cli_test_utils.rs +257 -0
- rumdl-0.0.109/tests/common/fixtures.rs +92 -0
- rumdl-0.0.109/tests/common/mod.rs +3 -0
- rumdl-0.0.109/tests/common/test_utils.rs +160 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/lsp_memory_leak_tests.rs +14 -14
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/markdownlint_cli_integration.rs +4 -15
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/markdownlintignore_test.rs +3 -10
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/list_rules_integration_test.rs +4 -6
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md032_test.rs +34 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md046_test.rs +26 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/thread_safety_tests.rs +3 -3
- {rumdl-0.0.108 → rumdl-0.0.109}/.mise.toml +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/.rumdl.toml +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/.rustfmt.toml +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/LICENSE +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/MANIFEST.in +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/README.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/assets/logo.png +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/benches/fix_performance.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/benches/range_performance.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/benches/range_utils_benchmark.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/benches/rule_performance.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/benches/simple_fix_bench.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/benchmark/bin/bench_lint_context.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/benchmark/bin/benchmark.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/benchmark/bin/benchmark_rule.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/benchmark/bin/file_parallel_benchmark.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/benchmark/bin/measure_code_span_performance.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/RULES.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/global-settings.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md001.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md002.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md003.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md004.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md005.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md006.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md007.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md009.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md010.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md011.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md012.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md013.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md014.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md018.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md019.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md020.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md021.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md022.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md023.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md024.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md025.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md026.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md027.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md028.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md029.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md030.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md031.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md032.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md033.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md034.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md035.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md036.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md037.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md038.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md039.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md040.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md041.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md042.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md043.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md044.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md045.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md046.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md047.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md048.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md049.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md050.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md051.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md052.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md053.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md054.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md055.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md056.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md057.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/md058.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/docs/vscode-extension.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/parity_check.py +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/pyproject.toml +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/python/MANIFEST.in +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/python/PYTHON-README.md +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/python/rumdl/__init__.py +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/python/rumdl/__main__.py +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/python/rumdl/py.typed +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/rumdl.toml.example +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/rust-toolchain.toml +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/scripts/extract-changelog.sh +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/scripts/prepare-release.sh +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/scripts/setup-pre-commit.sh +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/scripts/update-pre-commit-docs.sh +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/bin/debug_frontmatter.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/exit_codes.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/inline_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/lib.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/lsp/mod.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/lsp/server.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/lsp/types.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/main.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/markdownlint_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/output/formatters/azure.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/output/formatters/concise.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/output/formatters/github.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/output/formatters/gitlab.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/output/formatters/grouped.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/output/formatters/json.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/output/formatters/json_lines.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/output/formatters/junit.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/output/formatters/mod.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/output/formatters/pylint.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/output/formatters/sarif.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/output/formatters/text.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/output/mod.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/parallel.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/performance.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/profiling.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/python.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rule.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rule_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rule_config_serde.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/blockquote_utils.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/code_block_utils.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/code_fence_utils.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/emphasis_style.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/front_matter_utils.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/heading_utils.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/list_utils.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md001_heading_increment.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md002_first_heading_h1/md002_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md002_first_heading_h1.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md003_heading_style/md003_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md003_heading_style.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md004_unordered_list_style/md004_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md005_list_indent.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md007_ul_indent/md007_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md007_ul_indent.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md009_trailing_spaces/md009_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md009_trailing_spaces.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md010_no_hard_tabs/md010_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md010_no_hard_tabs.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md012_no_multiple_blanks/md012_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md012_no_multiple_blanks.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md013_line_length/md013_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md013_line_length.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md014_commands_show_output/md014_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md014_commands_show_output.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md018_no_missing_space_atx.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md019_no_multiple_space_atx.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md022_blanks_around_headings/md022_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md022_blanks_around_headings.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md023_heading_start_left.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md024_no_duplicate_heading/md024_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md024_no_duplicate_heading.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md025_single_title/md025_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md025_single_title.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md026_no_trailing_punctuation/md026_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md026_no_trailing_punctuation.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md028_no_blanks_blockquote.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md029_ordered_list_prefix/md029_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md030_list_marker_space/md030_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md030_list_marker_space.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md031_blanks_around_fences.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md032_blanks_around_lists.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md033_no_inline_html/md033_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md034_no_bare_urls.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md035_hr_style/md035_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md035_hr_style.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md036_no_emphasis_only_first/md036_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md036_no_emphasis_only_first.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md038_no_space_in_code.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md039_no_space_in_links.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md040_fenced_code_language.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md041_first_line_heading.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md043_required_headings.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md044_proper_names/md044_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md044_proper_names.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md045_no_alt_text/md045_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md045_no_alt_text.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md046_code_block_style/md046_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md047_single_trailing_newline.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md048_code_fence_style/md048_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md048_code_fence_style.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md049_emphasis_style/md049_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md049_emphasis_style.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md050_strong_style/md050_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md050_strong_style.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md052_reference_links_images.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md053_link_image_reference_definitions.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md054_link_image_style/md054_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md054_link_image_style.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md055_table_pipe_style/md055_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md055_table_pipe_style.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md056_table_column_count.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md057_existing_relative_links/md057_config.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md057_existing_relative_links.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/md058_blanks_around_tables.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/mod.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/rules/strong_style.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/utils/ast_utils.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/utils/early_returns.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/utils/element_cache.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/utils/emphasis_utils.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/utils/fix_utils.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/utils/markdown_elements.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/utils/mod.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/utils/range_utils.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/utils/regex_cache.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/utils/string_interner.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/utils/text_reflow.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/src/vscode.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/advanced_integration_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/character_ranges/additional_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/character_ranges/basic_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/character_ranges/comprehensive_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/character_ranges/extended_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/character_ranges/mod.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/character_ranges/unicode_utils.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/cli_duplication_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/cli_explain_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/cli_flag_precedence_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/cli_lsp_fix_consistency.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/cli_statistics_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/commonmark_compliance_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/comprehensive_integration_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/comprehensive_output_format_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/config_application_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/config_file_command_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/config_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/configuration_inheritance_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/consistency_regression_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/cross_platform_compatibility_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/deeply_nested_lists_performance_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/escaped_brackets_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/final_confidence_assessment.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/init_command_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/init_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/inline_config_blocks_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/inline_config_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/integration_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/json_output_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/lib.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/lsp_editor_integration_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/lsp_integration_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/lsp_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/malformed_markdown_stress_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/markdownlint_config_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/md013_reflow_integration_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/nested_code_block_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/output_format_integration_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/output_format_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/perf_check.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/performance_validation_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/pyproject_config_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/python_bindings_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/real_world_repository_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/regression_prevention_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/emphasis_edge_cases_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/heading_edge_cases_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/inline_content_edge_cases_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/link_edge_cases_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md001_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md001_unicode_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md002_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md003_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md004_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md005_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md005_unicode_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md006_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md006_unicode_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md007_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md009_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md010_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md011_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md012_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md013_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md014_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md018_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md019_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md020_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md021_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md022_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md023_extended_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md023_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md024_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md025_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md026_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md027_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md028_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md029_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md029_unicode_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md030_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md031_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md033_extended_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md033_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md034_ipv6_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md034_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md035_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md036_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md037_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md038_nested_backticks_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md038_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md039_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md040_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md041_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md042_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md043_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md044_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md045_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md047_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md048_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md049_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md050_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md051_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md051_unicode_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md052_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md053_additional_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md053_proptest.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md053_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md054_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md054_unicode_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md055_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md056_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md057_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/md058_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules/mod.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/rules_mod_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/unicode_edge_case_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/utils/blockquote_utils_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/utils/code_block_utils_extended_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/utils/code_block_utils_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/utils/core_utils_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/utils/front_matter_utils_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/utils/line_index_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/utils/mod.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/utils_markdown_edge_cases.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/utils_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/vscode_extension_fixes.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/vscode_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/vscode_tests.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/vscode_windows_comprehensive_test.rs +0 -0
- {rumdl-0.0.108 → rumdl-0.0.109}/tests/vscode_windows_test.rs +0 -0
|
@@ -36,8 +36,8 @@ retries = 0
|
|
|
36
36
|
# Quick profile for development
|
|
37
37
|
[profile.quick]
|
|
38
38
|
|
|
39
|
-
# Skip slow tests
|
|
40
|
-
default-filter = 'not test(/memory/) and not test(/stress/) and not test(/large/)'
|
|
39
|
+
# Skip slow tests and performance tests
|
|
40
|
+
default-filter = 'not test(/memory/) and not test(/stress/) and not test(/large/) and not test(/error_propagation/) and not test(/performance/) and not test(/comprehensive/) and not test(/deeply_nested/)'
|
|
41
41
|
|
|
42
42
|
# Even more parallel execution locally
|
|
43
43
|
test-threads = "num-cpus"
|
|
@@ -45,11 +45,27 @@ test-threads = "num-cpus"
|
|
|
45
45
|
# Less verbose output
|
|
46
46
|
status-level = "fail"
|
|
47
47
|
|
|
48
|
+
# Development profile - balance between speed and coverage
|
|
49
|
+
[profile.dev]
|
|
50
|
+
|
|
51
|
+
# Skip the slowest tests but include integration tests
|
|
52
|
+
default-filter = 'not test(/error_propagation/) and not test(/deeply_nested/) and not test(/memory/) and not test(/stress/) and not test(/large/) and not test(/performance/) and not test(/perf_check/)'
|
|
53
|
+
|
|
54
|
+
# Good parallelization for dev machines
|
|
55
|
+
test-threads = "num-cpus"
|
|
56
|
+
|
|
57
|
+
# Show failures immediately
|
|
58
|
+
failure-output = "immediate"
|
|
59
|
+
status-level = "fail"
|
|
60
|
+
|
|
61
|
+
# No retries for faster feedback
|
|
62
|
+
retries = 0
|
|
63
|
+
|
|
48
64
|
# Ultra-fast profile for pre-commit hooks
|
|
49
65
|
[profile.pre-commit]
|
|
50
66
|
|
|
51
67
|
# Only run unit tests in lib, skip all integration tests and binaries
|
|
52
|
-
default-filter = 'package(rumdl) and kind(lib) and not test(/slow|stress|large|integration|comprehensive|cli|config|advanced|commonmark|consistency|performance|benchmark|parity/)'
|
|
68
|
+
default-filter = 'package(rumdl) and kind(lib) and not test(/slow|stress|large|integration|comprehensive|cli|config|advanced|commonmark|consistency|performance|benchmark|parity|error_propagation|deeply_nested|memory/)'
|
|
53
69
|
|
|
54
70
|
# Maximum parallelism for speed
|
|
55
71
|
test-threads = "num-cpus"
|
|
@@ -63,4 +79,4 @@ success-output = "never"
|
|
|
63
79
|
retries = 0
|
|
64
80
|
|
|
65
81
|
# Fail fast on first failure
|
|
66
|
-
fail-fast = true
|
|
82
|
+
fail-fast = true
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Pre-commit hooks for rumdl
|
|
2
|
-
# Install with:
|
|
2
|
+
# Install with:
|
|
3
3
|
# pre-commit install # Install commit hooks
|
|
4
4
|
# pre-commit install --hook-type pre-push # Install push hooks
|
|
5
|
-
# Run manually:
|
|
5
|
+
# Run manually:
|
|
6
6
|
# pre-commit run --all-files # Run commit hooks
|
|
7
7
|
# pre-commit run --hook-stage push --all-files # Run push hooks
|
|
8
8
|
|
|
@@ -64,7 +64,7 @@ repos:
|
|
|
64
64
|
language: system
|
|
65
65
|
types: [rust]
|
|
66
66
|
pass_filenames: false
|
|
67
|
-
stages: [push]
|
|
67
|
+
stages: [pre-push]
|
|
68
68
|
verbose: true
|
|
69
69
|
|
|
70
70
|
- id: cargo-lint-full
|
|
@@ -73,7 +73,7 @@ repos:
|
|
|
73
73
|
language: system
|
|
74
74
|
types: [rust]
|
|
75
75
|
pass_filenames: false
|
|
76
|
-
stages: [push]
|
|
76
|
+
stages: [pre-push]
|
|
77
77
|
verbose: true
|
|
78
78
|
|
|
79
79
|
- id: cargo-doc-check
|
|
@@ -82,5 +82,5 @@ repos:
|
|
|
82
82
|
language: system
|
|
83
83
|
types: [rust]
|
|
84
84
|
pass_filenames: false
|
|
85
|
-
stages: [push]
|
|
85
|
+
stages: [pre-push]
|
|
86
86
|
verbose: true
|
|
@@ -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.110] - 2025-08-08
|
|
11
|
+
|
|
10
12
|
## [0.0.107] - 2025-08-06
|
|
11
13
|
|
|
12
14
|
## [0.0.107] - 2025-08-06
|
|
@@ -298,7 +300,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
298
300
|
|
|
299
301
|
- Initial implementation of remaining rules for markdownlint parity
|
|
300
302
|
|
|
301
|
-
[Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.
|
|
303
|
+
[Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.110...HEAD
|
|
304
|
+
[0.0.110]: https://github.com/rvben/rumdl/compare/v0.0.109...v0.0.110
|
|
302
305
|
[0.0.107]: https://github.com/rvben/rumdl/compare/v0.0.106...v0.0.107
|
|
303
306
|
[0.0.107]: https://github.com/rvben/rumdl/compare/v0.0.106...v0.0.107
|
|
304
307
|
[0.0.105]: https://github.com/rvben/rumdl/compare/v0.0.104...v0.0.105
|
|
@@ -672,9 +672,9 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
|
|
|
672
672
|
|
|
673
673
|
[[package]]
|
|
674
674
|
name = "hashbrown"
|
|
675
|
-
version = "0.15.
|
|
675
|
+
version = "0.15.5"
|
|
676
676
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
677
|
-
checksum = "
|
|
677
|
+
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
|
|
678
678
|
|
|
679
679
|
[[package]]
|
|
680
680
|
name = "heck"
|
|
@@ -848,7 +848,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
848
848
|
checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661"
|
|
849
849
|
dependencies = [
|
|
850
850
|
"equivalent",
|
|
851
|
-
"hashbrown 0.15.
|
|
851
|
+
"hashbrown 0.15.5",
|
|
852
852
|
]
|
|
853
853
|
|
|
854
854
|
[[package]]
|
|
@@ -1493,7 +1493,7 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
|
|
|
1493
1493
|
|
|
1494
1494
|
[[package]]
|
|
1495
1495
|
name = "rumdl"
|
|
1496
|
-
version = "0.0.
|
|
1496
|
+
version = "0.0.109"
|
|
1497
1497
|
dependencies = [
|
|
1498
1498
|
"anyhow",
|
|
1499
1499
|
"assert_cmd",
|
|
@@ -1689,9 +1689,9 @@ dependencies = [
|
|
|
1689
1689
|
|
|
1690
1690
|
[[package]]
|
|
1691
1691
|
name = "slab"
|
|
1692
|
-
version = "0.4.
|
|
1692
|
+
version = "0.4.11"
|
|
1693
1693
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1694
|
-
checksum = "
|
|
1694
|
+
checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
|
|
1695
1695
|
|
|
1696
1696
|
[[package]]
|
|
1697
1697
|
name = "smallvec"
|
|
@@ -61,11 +61,17 @@ build:
|
|
|
61
61
|
cargo build --release
|
|
62
62
|
|
|
63
63
|
test:
|
|
64
|
+
cargo nextest run --profile dev
|
|
65
|
+
|
|
66
|
+
test-legacy:
|
|
64
67
|
cargo test
|
|
65
68
|
|
|
66
69
|
test-nextest:
|
|
67
70
|
cargo nextest run
|
|
68
71
|
|
|
72
|
+
test-dev:
|
|
73
|
+
cargo nextest run --profile dev
|
|
74
|
+
|
|
69
75
|
test-quick:
|
|
70
76
|
cargo nextest run --profile quick
|
|
71
77
|
|
|
@@ -100,7 +106,7 @@ doc:
|
|
|
100
106
|
cargo doc --no-deps
|
|
101
107
|
|
|
102
108
|
watch-test:
|
|
103
|
-
cargo watch -x
|
|
109
|
+
cargo watch -x "nextest run --profile quick"
|
|
104
110
|
|
|
105
111
|
all: fmt check test build
|
|
106
112
|
|
|
@@ -948,39 +948,18 @@ impl<'a> LintContext<'a> {
|
|
|
948
948
|
let leading_spaces = caps.get(1).map_or("", |m| m.as_str());
|
|
949
949
|
let marker = caps.get(2).map_or("", |m| m.as_str());
|
|
950
950
|
let spacing = caps.get(3).map_or("", |m| m.as_str());
|
|
951
|
-
let
|
|
951
|
+
let _content = caps.get(4).map_or("", |m| m.as_str());
|
|
952
952
|
let marker_column = blockquote_prefix_len + leading_spaces.len();
|
|
953
953
|
let content_column = marker_column + marker.len() + spacing.len();
|
|
954
954
|
|
|
955
|
-
//
|
|
955
|
+
// According to CommonMark spec, unordered list items MUST have at least one space
|
|
956
|
+
// after the marker (-, *, or +). Without a space, it's not a list item.
|
|
957
|
+
// This also naturally handles cases like:
|
|
958
|
+
// - *emphasis* (not a list)
|
|
959
|
+
// - **bold** (not a list)
|
|
960
|
+
// - --- (horizontal rule, not a list)
|
|
956
961
|
if spacing.is_empty() {
|
|
957
|
-
|
|
958
|
-
if marker == "*" && content.ends_with('*') && !content[..content.len() - 1].contains('*') {
|
|
959
|
-
// Likely emphasis like *text*
|
|
960
|
-
None
|
|
961
|
-
} else if marker == "*" && content.starts_with('*') {
|
|
962
|
-
// Likely bold emphasis like **text** or horizontal rule like ***
|
|
963
|
-
None
|
|
964
|
-
} else if (marker == "*" || marker == "-")
|
|
965
|
-
&& content.chars().all(|c| c == marker.chars().next().unwrap())
|
|
966
|
-
&& content.len() >= 2
|
|
967
|
-
{
|
|
968
|
-
// Likely horizontal rule like *** or ---
|
|
969
|
-
None
|
|
970
|
-
} else if !content.is_empty() && content.chars().next().unwrap().is_alphabetic() {
|
|
971
|
-
// Single word starting with marker, likely not intended as list
|
|
972
|
-
// This matches markdownlint behavior
|
|
973
|
-
None
|
|
974
|
-
} else {
|
|
975
|
-
// Other cases with no space - treat as malformed list item
|
|
976
|
-
Some(ListItemInfo {
|
|
977
|
-
marker: marker.to_string(),
|
|
978
|
-
is_ordered: false,
|
|
979
|
-
number: None,
|
|
980
|
-
marker_column,
|
|
981
|
-
content_column,
|
|
982
|
-
})
|
|
983
|
-
}
|
|
962
|
+
None
|
|
984
963
|
} else {
|
|
985
964
|
Some(ListItemInfo {
|
|
986
965
|
marker: marker.to_string(),
|
|
@@ -995,15 +974,14 @@ impl<'a> LintContext<'a> {
|
|
|
995
974
|
let number_str = caps.get(2).map_or("", |m| m.as_str());
|
|
996
975
|
let delimiter = caps.get(3).map_or("", |m| m.as_str());
|
|
997
976
|
let spacing = caps.get(4).map_or("", |m| m.as_str());
|
|
998
|
-
let
|
|
977
|
+
let _content = caps.get(5).map_or("", |m| m.as_str());
|
|
999
978
|
let marker = format!("{number_str}{delimiter}");
|
|
1000
979
|
let marker_column = blockquote_prefix_len + leading_spaces.len();
|
|
1001
980
|
let content_column = marker_column + marker.len() + spacing.len();
|
|
1002
981
|
|
|
1003
|
-
//
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
// This matches markdownlint behavior
|
|
982
|
+
// According to CommonMark spec, ordered list items MUST have at least one space
|
|
983
|
+
// after the marker (period or parenthesis). Without a space, it's not a list item.
|
|
984
|
+
if spacing.is_empty() {
|
|
1007
985
|
None
|
|
1008
986
|
} else {
|
|
1009
987
|
Some(ListItemInfo {
|
|
@@ -1343,6 +1321,9 @@ impl<'a> LintContext<'a> {
|
|
|
1343
1321
|
|
|
1344
1322
|
if let Some(ref mut block) = current_block {
|
|
1345
1323
|
// Check if this continues the current block
|
|
1324
|
+
// For nested lists, we need to check if this is a nested item (higher nesting level)
|
|
1325
|
+
// or a continuation at the same or lower level
|
|
1326
|
+
let is_nested = nesting > block.nesting_level;
|
|
1346
1327
|
let same_type =
|
|
1347
1328
|
(block.is_ordered && list_item.is_ordered) || (!block.is_ordered && !list_item.is_ordered);
|
|
1348
1329
|
let same_context = block.blockquote_prefix == blockquote_prefix;
|
|
@@ -1392,7 +1373,18 @@ impl<'a> LintContext<'a> {
|
|
|
1392
1373
|
found_non_list
|
|
1393
1374
|
};
|
|
1394
1375
|
|
|
1395
|
-
|
|
1376
|
+
// A list continues if:
|
|
1377
|
+
// 1. It's a nested item (indented more than the parent), OR
|
|
1378
|
+
// 2. It's the same type at the same level with reasonable distance
|
|
1379
|
+
let continues_list = if is_nested {
|
|
1380
|
+
// Nested items always continue the list if they're in the same context
|
|
1381
|
+
same_context && reasonable_distance && !has_non_list_content
|
|
1382
|
+
} else {
|
|
1383
|
+
// Same-level items need to match type and markers
|
|
1384
|
+
same_type && same_context && reasonable_distance && marker_compatible && !has_non_list_content
|
|
1385
|
+
};
|
|
1386
|
+
|
|
1387
|
+
if continues_list {
|
|
1396
1388
|
// Extend current block
|
|
1397
1389
|
block.end_line = line_num;
|
|
1398
1390
|
block.item_lines.push(line_num);
|
|
@@ -118,16 +118,12 @@ impl Rule for MD004UnorderedListStyle {
|
|
|
118
118
|
|
|
119
119
|
// Use centralized list blocks for better performance and accuracy
|
|
120
120
|
for list_block in &ctx.list_blocks {
|
|
121
|
-
// Skip ordered lists
|
|
122
|
-
if list_block.is_ordered {
|
|
123
|
-
continue;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
121
|
// Check each list item in this block
|
|
122
|
+
// We need to check individual items even in mixed lists (ordered with nested unordered)
|
|
127
123
|
for &item_line in &list_block.item_lines {
|
|
128
124
|
if let Some(line_info) = ctx.line_info(item_line) {
|
|
129
125
|
if let Some(list_item) = &line_info.list_item {
|
|
130
|
-
// Skip ordered
|
|
126
|
+
// Skip ordered list items - we only care about unordered ones
|
|
131
127
|
if list_item.is_ordered {
|
|
132
128
|
continue;
|
|
133
129
|
}
|
|
@@ -245,16 +241,12 @@ impl Rule for MD004UnorderedListStyle {
|
|
|
245
241
|
|
|
246
242
|
// Use centralized list blocks
|
|
247
243
|
for list_block in &ctx.list_blocks {
|
|
248
|
-
// Skip ordered lists
|
|
249
|
-
if list_block.is_ordered {
|
|
250
|
-
continue;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
244
|
// Process each list item in this block
|
|
245
|
+
// We need to check individual items even in mixed lists
|
|
254
246
|
for &item_line in &list_block.item_lines {
|
|
255
247
|
if let Some(line_info) = ctx.line_info(item_line) {
|
|
256
248
|
if let Some(list_item) = &line_info.list_item {
|
|
257
|
-
// Skip ordered
|
|
249
|
+
// Skip ordered list items - we only care about unordered ones
|
|
258
250
|
if list_item.is_ordered {
|
|
259
251
|
continue;
|
|
260
252
|
}
|
|
@@ -615,12 +607,13 @@ mod tests {
|
|
|
615
607
|
#[test]
|
|
616
608
|
fn test_edge_case_marker_at_end() {
|
|
617
609
|
let rule = MD004UnorderedListStyle::new(UnorderedListStyle::Asterisk);
|
|
618
|
-
|
|
610
|
+
// These are valid list items with minimal content (just a space)
|
|
611
|
+
let content = "* \n- \n+ ";
|
|
619
612
|
let ctx = LintContext::new(content);
|
|
620
613
|
let result = rule.check(&ctx).unwrap();
|
|
621
|
-
assert_eq!(result.len(), 2);
|
|
614
|
+
assert_eq!(result.len(), 2); // Should flag - and + as wrong markers
|
|
622
615
|
let fixed = rule.fix(&ctx).unwrap();
|
|
623
|
-
assert_eq!(fixed, "
|
|
616
|
+
assert_eq!(fixed, "* \n* \n* ");
|
|
624
617
|
}
|
|
625
618
|
|
|
626
619
|
#[test]
|
|
@@ -16,21 +16,28 @@ use crate::utils::regex_cache::UNORDERED_LIST_MARKER_REGEX;
|
|
|
16
16
|
pub struct MD006StartBullets;
|
|
17
17
|
|
|
18
18
|
impl MD006StartBullets {
|
|
19
|
-
/// Check if a bullet is nested under an ordered list item
|
|
19
|
+
/// Check if a bullet is nested under an ordered list item (anywhere in the hierarchy)
|
|
20
20
|
fn is_nested_under_ordered_item(
|
|
21
21
|
&self,
|
|
22
22
|
ctx: &crate::lint_context::LintContext,
|
|
23
23
|
current_line: usize,
|
|
24
24
|
current_indent: usize,
|
|
25
25
|
) -> bool {
|
|
26
|
-
// Look backward from current line to find
|
|
26
|
+
// Look backward from current line to find any ordered ancestor
|
|
27
|
+
let mut check_indent = current_indent;
|
|
28
|
+
|
|
27
29
|
for line_idx in (1..current_line).rev() {
|
|
28
30
|
if let Some(line_info) = ctx.line_info(line_idx) {
|
|
29
31
|
if let Some(list_item) = &line_info.list_item {
|
|
30
|
-
// Found a list item - check if it's at a lower indentation (
|
|
31
|
-
if list_item.marker_column <
|
|
32
|
-
// This is
|
|
33
|
-
|
|
32
|
+
// Found a list item - check if it's at a lower indentation (ancestor level)
|
|
33
|
+
if list_item.marker_column < check_indent {
|
|
34
|
+
// This is an ancestor item
|
|
35
|
+
if list_item.is_ordered {
|
|
36
|
+
// Found an ordered ancestor
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
// Continue looking for higher-level ancestors
|
|
40
|
+
check_indent = list_item.marker_column;
|
|
34
41
|
}
|
|
35
42
|
}
|
|
36
43
|
// If we encounter non-blank, non-list content at column 0, stop looking
|
|
@@ -52,17 +59,17 @@ impl MD006StartBullets {
|
|
|
52
59
|
// Track which lines contain valid bullet items
|
|
53
60
|
let mut valid_bullet_lines = vec![false; lines.len()];
|
|
54
61
|
|
|
55
|
-
// Process each
|
|
62
|
+
// Process each list block
|
|
56
63
|
for list_block in &ctx.list_blocks {
|
|
57
|
-
// Skip ordered lists
|
|
58
|
-
if list_block.is_ordered {
|
|
59
|
-
continue;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
64
|
// Check each list item in this block
|
|
65
|
+
// We need to check unordered items even in mixed lists
|
|
63
66
|
for &item_line in &list_block.item_lines {
|
|
64
67
|
if let Some(line_info) = ctx.line_info(item_line) {
|
|
65
68
|
if let Some(list_item) = &line_info.list_item {
|
|
69
|
+
// Skip ordered list items - we only care about unordered ones
|
|
70
|
+
if list_item.is_ordered {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
66
73
|
let line_idx = item_line - 1;
|
|
67
74
|
let indent = list_item.marker_column;
|
|
68
75
|
let line = &lines[line_idx];
|
|
@@ -73,9 +80,16 @@ impl MD006StartBullets {
|
|
|
73
80
|
// Top-level items are always valid
|
|
74
81
|
is_valid = true;
|
|
75
82
|
} else {
|
|
76
|
-
// Check if this is nested under an ordered item with correct indentation
|
|
77
|
-
|
|
78
|
-
|
|
83
|
+
// Check if this is nested under an ordered item with correct indentation
|
|
84
|
+
// For single-digit ordered lists (1.), need at least 3 spaces for proper nesting
|
|
85
|
+
// For double-digit (10.), need at least 4 spaces, etc.
|
|
86
|
+
// But MD006's purpose is to flag top-level indented lists, not validate nesting depth
|
|
87
|
+
if self.is_nested_under_ordered_item(ctx, item_line, indent) {
|
|
88
|
+
// It's nested under an ordered item
|
|
89
|
+
// Only flag if indentation is less than 3 (won't nest properly in CommonMark)
|
|
90
|
+
if indent >= 3 {
|
|
91
|
+
is_valid = true;
|
|
92
|
+
}
|
|
79
93
|
} else {
|
|
80
94
|
// Check if this is a valid nested item under another bullet
|
|
81
95
|
match Self::find_relevant_previous_bullet(&lines, line_idx) {
|
|
@@ -120,14 +134,28 @@ impl MD006StartBullets {
|
|
|
120
134
|
end_col - start_col,
|
|
121
135
|
);
|
|
122
136
|
|
|
137
|
+
// Generate appropriate message based on context
|
|
138
|
+
let message = if self.is_nested_under_ordered_item(ctx, item_line, indent) {
|
|
139
|
+
// It's trying to nest under an ordered item but has insufficient indentation
|
|
140
|
+
format!(
|
|
141
|
+
"Nested list needs at least 3 spaces of indentation under ordered item (found {indent})"
|
|
142
|
+
)
|
|
143
|
+
} else if indent > 0 {
|
|
144
|
+
// It's indented but not nested under anything - should start at column 0
|
|
145
|
+
format!(
|
|
146
|
+
"Consider starting bulleted lists at the beginning of the line (found {indent} leading spaces)"
|
|
147
|
+
)
|
|
148
|
+
} else {
|
|
149
|
+
// Shouldn't happen, but just in case
|
|
150
|
+
format!("List indentation issue (found {indent} leading spaces)")
|
|
151
|
+
};
|
|
152
|
+
|
|
123
153
|
result.push(LintWarning {
|
|
124
154
|
line: item_line,
|
|
125
155
|
column: start_col,
|
|
126
156
|
end_line: item_line,
|
|
127
157
|
end_column: end_col,
|
|
128
|
-
message
|
|
129
|
-
"Consider starting bulleted lists at the beginning of the line (found {indent} leading spaces)"
|
|
130
|
-
),
|
|
158
|
+
message,
|
|
131
159
|
severity: Severity::Warning,
|
|
132
160
|
rule_name: Some(self.name()),
|
|
133
161
|
fix: Some(Fix {
|
|
@@ -501,14 +529,14 @@ mod tests {
|
|
|
501
529
|
let content = "\
|
|
502
530
|
1. **Active Directory/LDAP**
|
|
503
531
|
- Wrong: only 2 spaces
|
|
504
|
-
|
|
532
|
+
- Wrong: only 1 space";
|
|
505
533
|
let ctx = crate::lint_context::LintContext::new(content);
|
|
506
534
|
let result = rule.check(&ctx).unwrap();
|
|
507
|
-
// Should flag the incorrect indentations
|
|
535
|
+
// Should flag the incorrect indentations (less than 3 spaces)
|
|
508
536
|
assert_eq!(
|
|
509
537
|
result.len(),
|
|
510
538
|
2,
|
|
511
|
-
"Expected warnings for bullets with
|
|
539
|
+
"Expected warnings for bullets with insufficient spacing under numbered items"
|
|
512
540
|
);
|
|
513
541
|
assert!(result.iter().any(|w| w.line == 2));
|
|
514
542
|
assert!(result.iter().any(|w| w.line == 3));
|
|
@@ -640,4 +640,19 @@ result = inspect.stack()[1]
|
|
|
640
640
|
assert_eq!(result.len(), 1, "Should only flag the actual reversed link");
|
|
641
641
|
assert_eq!(result[0].line, 4, "Should flag the reversed link on line 4");
|
|
642
642
|
}
|
|
643
|
+
|
|
644
|
+
#[test]
|
|
645
|
+
fn test_issue_26_specific_case() {
|
|
646
|
+
// Test for issue #26 - specific case reported
|
|
647
|
+
let rule = MD011NoReversedLinks;
|
|
648
|
+
|
|
649
|
+
let content = r#"The first thing I need to find is the name of the redacted key name, `doc.<key_name_omitted>`. I'll use `SUBSTRING(ATTRIBUTES(doc)[0], 0, 1) == '<c>'` as that test, where `<c>` is different characters. This gets the first attribute from `doc` and uses `SUBSTRING` to get the first character."#;
|
|
650
|
+
let ctx = LintContext::new(content);
|
|
651
|
+
let result = rule.check(&ctx).unwrap();
|
|
652
|
+
assert_eq!(
|
|
653
|
+
result.len(),
|
|
654
|
+
0,
|
|
655
|
+
"Should not flag ATTRIBUTES(doc)[0] inside inline code (issue #26)"
|
|
656
|
+
);
|
|
657
|
+
}
|
|
643
658
|
}
|
|
@@ -90,21 +90,33 @@ impl Rule for MD029OrderedListPrefix {
|
|
|
90
90
|
|
|
91
91
|
let mut warnings = Vec::new();
|
|
92
92
|
|
|
93
|
-
//
|
|
94
|
-
// This handles
|
|
95
|
-
let
|
|
96
|
-
|
|
97
|
-
|
|
93
|
+
// Collect all list blocks that contain ordered items (not just purely ordered blocks)
|
|
94
|
+
// This handles mixed lists where ordered items are nested within unordered lists
|
|
95
|
+
let blocks_with_ordered: Vec<_> = ctx
|
|
96
|
+
.list_blocks
|
|
97
|
+
.iter()
|
|
98
|
+
.filter(|block| {
|
|
99
|
+
// Check if this block contains any ordered items
|
|
100
|
+
block.item_lines.iter().any(|&line| {
|
|
101
|
+
ctx.line_info(line)
|
|
102
|
+
.and_then(|info| info.list_item.as_ref())
|
|
103
|
+
.map(|item| item.is_ordered)
|
|
104
|
+
.unwrap_or(false)
|
|
105
|
+
})
|
|
106
|
+
})
|
|
107
|
+
.collect();
|
|
108
|
+
|
|
109
|
+
if blocks_with_ordered.is_empty() {
|
|
98
110
|
return Ok(Vec::new());
|
|
99
111
|
}
|
|
100
112
|
|
|
101
113
|
// Group consecutive list blocks that should be treated as continuous
|
|
102
114
|
let mut block_groups = Vec::new();
|
|
103
|
-
let mut current_group = vec![
|
|
115
|
+
let mut current_group = vec![blocks_with_ordered[0]];
|
|
104
116
|
|
|
105
|
-
for i in 1..
|
|
106
|
-
let prev_block =
|
|
107
|
-
let current_block =
|
|
117
|
+
for i in 1..blocks_with_ordered.len() {
|
|
118
|
+
let prev_block = blocks_with_ordered[i - 1];
|
|
119
|
+
let current_block = blocks_with_ordered[i];
|
|
108
120
|
|
|
109
121
|
// Check if there are only code blocks/fences between these list blocks
|
|
110
122
|
let between_content_is_code_only =
|
|
@@ -411,6 +423,33 @@ impl MD029OrderedListPrefix {
|
|
|
411
423
|
true
|
|
412
424
|
}
|
|
413
425
|
|
|
426
|
+
/// Find the parent unordered item for an ordered item
|
|
427
|
+
/// Returns the line number of the parent, or 0 if no parent found
|
|
428
|
+
fn find_parent_unordered_item(
|
|
429
|
+
&self,
|
|
430
|
+
ctx: &crate::lint_context::LintContext,
|
|
431
|
+
ordered_line: usize,
|
|
432
|
+
ordered_indent: usize,
|
|
433
|
+
) -> usize {
|
|
434
|
+
// Look backward from the ordered item to find its unordered parent
|
|
435
|
+
for line_num in (1..ordered_line).rev() {
|
|
436
|
+
if let Some(line_info) = ctx.line_info(line_num) {
|
|
437
|
+
if let Some(list_item) = &line_info.list_item {
|
|
438
|
+
// Found a list item - check if it could be the parent
|
|
439
|
+
if list_item.marker_column < ordered_indent && !list_item.is_ordered {
|
|
440
|
+
// This unordered item is at a lower indentation, so it's the parent
|
|
441
|
+
return line_num;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
// If we encounter non-blank, non-list content at column 0, stop looking
|
|
445
|
+
else if !line_info.is_blank && line_info.indent == 0 {
|
|
446
|
+
break;
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
0 // No parent found
|
|
451
|
+
}
|
|
452
|
+
|
|
414
453
|
/// Check a group of ordered list blocks that should be treated as continuous
|
|
415
454
|
fn check_ordered_list_group(
|
|
416
455
|
&self,
|
|
@@ -441,26 +480,31 @@ impl MD029OrderedListPrefix {
|
|
|
441
480
|
// Sort by line number to ensure correct order
|
|
442
481
|
all_items.sort_by_key(|(line_num, _, _)| *line_num);
|
|
443
482
|
|
|
444
|
-
// Group items by indentation level
|
|
445
|
-
|
|
446
|
-
|
|
483
|
+
// Group items by indentation level AND parent context
|
|
484
|
+
// Use (indent_level, parent_line) as the key to separate sequences under different parents
|
|
485
|
+
type LevelGroups<'a> = std::collections::HashMap<
|
|
486
|
+
(usize, usize),
|
|
447
487
|
Vec<(
|
|
448
488
|
usize,
|
|
449
|
-
&crate::lint_context::LineInfo,
|
|
450
|
-
&crate::lint_context::ListItemInfo,
|
|
489
|
+
&'a crate::lint_context::LineInfo,
|
|
490
|
+
&'a crate::lint_context::ListItemInfo,
|
|
451
491
|
)>,
|
|
452
|
-
|
|
492
|
+
>;
|
|
493
|
+
let mut level_groups: LevelGroups = std::collections::HashMap::new();
|
|
453
494
|
|
|
454
495
|
for (line_num, line_info, list_item) in all_items {
|
|
455
|
-
//
|
|
496
|
+
// Find the parent unordered item for this ordered item
|
|
497
|
+
let parent_line = self.find_parent_unordered_item(ctx, line_num, list_item.marker_column);
|
|
498
|
+
|
|
499
|
+
// Group by both marker column (indentation level) and parent context
|
|
456
500
|
level_groups
|
|
457
|
-
.entry(list_item.marker_column)
|
|
501
|
+
.entry((list_item.marker_column, parent_line))
|
|
458
502
|
.or_default()
|
|
459
503
|
.push((line_num, line_info, list_item));
|
|
460
504
|
}
|
|
461
505
|
|
|
462
|
-
// Process each indentation level separately
|
|
463
|
-
for (_indent, mut group) in level_groups {
|
|
506
|
+
// Process each indentation level and parent context separately
|
|
507
|
+
for ((_indent, _parent), mut group) in level_groups {
|
|
464
508
|
// Sort by line number to ensure correct order
|
|
465
509
|
group.sort_by_key(|(line_num, _, _)| *line_num);
|
|
466
510
|
|
|
@@ -299,6 +299,11 @@ impl Rule for MD033NoInlineHtml {
|
|
|
299
299
|
if structure.is_in_code_block(line_num) {
|
|
300
300
|
continue;
|
|
301
301
|
}
|
|
302
|
+
// Skip lines that are indented code blocks (4+ spaces or tab) per CommonMark spec
|
|
303
|
+
// Even if they're not in the structure's code blocks (e.g., HTML blocks)
|
|
304
|
+
if line.starts_with(" ") || line.starts_with('\t') {
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
302
307
|
|
|
303
308
|
// Find all HTML tags in the line using regex
|
|
304
309
|
for tag_match in HTML_TAG_FINDER.find_iter(line) {
|