rumdl 0.0.107__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.109/.config/nextest.toml +82 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/.pre-commit-config.yaml +38 -11
- {rumdl-0.0.107 → rumdl-0.0.109}/CHANGELOG.md +12 -1
- {rumdl-0.0.107 → rumdl-0.0.109}/Cargo.lock +10 -10
- {rumdl-0.0.107 → rumdl-0.0.109}/Cargo.toml +1 -1
- {rumdl-0.0.107 → rumdl-0.0.109}/Makefile +18 -2
- {rumdl-0.0.107 → rumdl-0.0.109}/PKG-INFO +1 -1
- rumdl-0.0.109/src/bin/debug_frontmatter.rs +42 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/lint_context.rs +27 -35
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md004_unordered_list_style.rs +8 -15
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md006_start_bullets.rs +49 -21
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md011_no_reversed_links.rs +15 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md029_ordered_list_prefix.rs +63 -19
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md033_no_inline_html.rs +5 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md037_spaces_around_emphasis.rs +151 -8
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md042_no_empty_links.rs +36 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md044_proper_names.rs +107 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md046_code_block_style.rs +1 -81
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md049_emphasis_style.rs +74 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md050_strong_style.rs +83 -6
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md051_link_fragments.rs +5 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md052_reference_links_images.rs +81 -3
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md058_blanks_around_tables.rs +30 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/utils/code_block_utils.rs +17 -3
- {rumdl-0.0.107 → rumdl-0.0.109}/src/utils/document_structure.rs +23 -15
- {rumdl-0.0.107 → rumdl-0.0.109}/src/utils/table_utils.rs +136 -12
- {rumdl-0.0.107 → 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.107 → rumdl-0.0.109}/tests/lsp_memory_leak_tests.rs +14 -14
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/markdownlint_cli_integration.rs +4 -15
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/markdownlintignore_test.rs +3 -10
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/emphasis_edge_cases_test.rs +7 -2
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/inline_content_edge_cases_test.rs +4 -2
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/list_rules_integration_test.rs +4 -6
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md032_test.rs +34 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md044_test.rs +2 -1
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md046_test.rs +26 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/thread_safety_tests.rs +3 -3
- rumdl-0.0.107/.config/nextest.toml +0 -46
- {rumdl-0.0.107 → rumdl-0.0.109}/.mise.toml +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/.rumdl.toml +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/.rustfmt.toml +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/LICENSE +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/MANIFEST.in +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/README.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/assets/logo.png +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/benches/fix_performance.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/benches/range_performance.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/benches/range_utils_benchmark.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/benches/rule_performance.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/benches/simple_fix_bench.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/benchmark/bin/bench_lint_context.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/benchmark/bin/benchmark.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/benchmark/bin/benchmark_rule.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/benchmark/bin/file_parallel_benchmark.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/benchmark/bin/measure_code_span_performance.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/RULES.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/global-settings.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md001.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md002.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md003.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md004.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md005.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md006.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md007.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md009.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md010.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md011.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md012.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md013.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md014.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md018.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md019.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md020.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md021.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md022.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md023.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md024.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md025.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md026.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md027.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md028.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md029.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md030.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md031.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md032.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md033.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md034.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md035.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md036.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md037.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md038.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md039.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md040.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md041.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md042.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md043.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md044.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md045.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md046.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md047.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md048.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md049.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md050.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md051.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md052.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md053.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md054.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md055.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md056.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md057.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/md058.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/docs/vscode-extension.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/parity_check.py +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/pyproject.toml +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/python/MANIFEST.in +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/python/PYTHON-README.md +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/python/rumdl/__init__.py +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/python/rumdl/__main__.py +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/python/rumdl/py.typed +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/rumdl.toml.example +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/rust-toolchain.toml +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/scripts/extract-changelog.sh +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/scripts/prepare-release.sh +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/scripts/setup-pre-commit.sh +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/scripts/update-pre-commit-docs.sh +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/exit_codes.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/inline_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/lib.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/lsp/mod.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/lsp/server.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/lsp/types.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/main.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/markdownlint_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/output/formatters/azure.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/output/formatters/concise.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/output/formatters/github.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/output/formatters/gitlab.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/output/formatters/grouped.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/output/formatters/json.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/output/formatters/json_lines.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/output/formatters/junit.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/output/formatters/mod.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/output/formatters/pylint.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/output/formatters/sarif.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/output/formatters/text.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/output/mod.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/parallel.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/performance.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/profiling.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/python.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rule.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rule_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rule_config_serde.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/blockquote_utils.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/code_block_utils.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/code_fence_utils.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/emphasis_style.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/front_matter_utils.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/heading_utils.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/list_utils.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md001_heading_increment.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md002_first_heading_h1/md002_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md002_first_heading_h1.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md003_heading_style/md003_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md003_heading_style.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md004_unordered_list_style/md004_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md005_list_indent.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md007_ul_indent/md007_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md007_ul_indent.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md009_trailing_spaces/md009_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md009_trailing_spaces.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md010_no_hard_tabs/md010_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md010_no_hard_tabs.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md012_no_multiple_blanks/md012_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md012_no_multiple_blanks.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md013_line_length/md013_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md013_line_length.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md014_commands_show_output/md014_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md014_commands_show_output.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md018_no_missing_space_atx.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md019_no_multiple_space_atx.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md022_blanks_around_headings/md022_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md022_blanks_around_headings.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md023_heading_start_left.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md024_no_duplicate_heading/md024_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md024_no_duplicate_heading.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md025_single_title/md025_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md025_single_title.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md026_no_trailing_punctuation/md026_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md026_no_trailing_punctuation.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md028_no_blanks_blockquote.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md029_ordered_list_prefix/md029_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md030_list_marker_space/md030_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md030_list_marker_space.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md031_blanks_around_fences.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md032_blanks_around_lists.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md033_no_inline_html/md033_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md034_no_bare_urls.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md035_hr_style/md035_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md035_hr_style.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md036_no_emphasis_only_first/md036_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md036_no_emphasis_only_first.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md038_no_space_in_code.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md039_no_space_in_links.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md040_fenced_code_language.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md041_first_line_heading.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md043_required_headings.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md044_proper_names/md044_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md045_no_alt_text/md045_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md045_no_alt_text.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md046_code_block_style/md046_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md047_single_trailing_newline.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md048_code_fence_style/md048_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md048_code_fence_style.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md049_emphasis_style/md049_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md050_strong_style/md050_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md053_link_image_reference_definitions.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md054_link_image_style/md054_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md054_link_image_style.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md055_table_pipe_style/md055_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md055_table_pipe_style.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md056_table_column_count.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md057_existing_relative_links/md057_config.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/md057_existing_relative_links.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/mod.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/rules/strong_style.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/utils/ast_utils.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/utils/early_returns.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/utils/element_cache.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/utils/emphasis_utils.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/utils/fix_utils.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/utils/markdown_elements.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/utils/mod.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/utils/range_utils.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/utils/regex_cache.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/utils/string_interner.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/utils/text_reflow.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/src/vscode.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/advanced_integration_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/character_ranges/additional_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/character_ranges/basic_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/character_ranges/comprehensive_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/character_ranges/extended_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/character_ranges/mod.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/character_ranges/unicode_utils.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/cli_duplication_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/cli_explain_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/cli_flag_precedence_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/cli_lsp_fix_consistency.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/cli_statistics_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/commonmark_compliance_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/comprehensive_integration_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/comprehensive_output_format_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/config_application_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/config_file_command_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/config_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/configuration_inheritance_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/consistency_regression_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/cross_platform_compatibility_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/deeply_nested_lists_performance_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/escaped_brackets_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/final_confidence_assessment.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/init_command_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/init_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/inline_config_blocks_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/inline_config_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/integration_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/json_output_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/lib.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/lsp_editor_integration_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/lsp_integration_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/lsp_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/malformed_markdown_stress_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/markdownlint_config_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/md013_reflow_integration_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/nested_code_block_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/output_format_integration_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/output_format_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/perf_check.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/performance_validation_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/pyproject_config_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/python_bindings_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/real_world_repository_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/regression_prevention_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/heading_edge_cases_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/link_edge_cases_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md001_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md001_unicode_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md002_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md003_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md004_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md005_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md005_unicode_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md006_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md006_unicode_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md007_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md009_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md010_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md011_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md012_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md013_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md014_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md018_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md019_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md020_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md021_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md022_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md023_extended_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md023_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md024_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md025_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md026_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md027_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md028_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md029_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md029_unicode_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md030_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md031_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md033_extended_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md033_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md034_ipv6_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md034_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md035_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md036_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md037_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md038_nested_backticks_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md038_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md039_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md040_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md041_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md042_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md043_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md045_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md047_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md048_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md049_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md050_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md051_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md051_unicode_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md052_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md053_additional_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md053_proptest.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md053_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md054_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md054_unicode_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md055_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md056_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md057_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/md058_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules/mod.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/rules_mod_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/unicode_edge_case_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/utils/blockquote_utils_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/utils/code_block_utils_extended_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/utils/code_block_utils_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/utils/core_utils_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/utils/front_matter_utils_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/utils/line_index_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/utils/mod.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/utils_markdown_edge_cases.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/utils_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/vscode_extension_fixes.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/vscode_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/vscode_tests.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/vscode_windows_comprehensive_test.rs +0 -0
- {rumdl-0.0.107 → rumdl-0.0.109}/tests/vscode_windows_test.rs +0 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Nextest configuration
|
|
2
|
+
# https://nexte.st/book/configuration
|
|
3
|
+
|
|
4
|
+
[profile.default]
|
|
5
|
+
# Detect flaky tests and retry them
|
|
6
|
+
retries = { backoff = "exponential", count = 2, delay = "1s", max-delay = "10s" }
|
|
7
|
+
|
|
8
|
+
# Run tests with 2x the number of CPUs
|
|
9
|
+
test-threads = "num-cpus"
|
|
10
|
+
|
|
11
|
+
# Fail fast on first failure in CI
|
|
12
|
+
fail-fast = false
|
|
13
|
+
|
|
14
|
+
# Show failed tests immediately
|
|
15
|
+
failure-output = "immediate"
|
|
16
|
+
|
|
17
|
+
# Show successful tests at the end
|
|
18
|
+
success-output = "final"
|
|
19
|
+
|
|
20
|
+
# Status output level
|
|
21
|
+
status-level = "pass"
|
|
22
|
+
|
|
23
|
+
[profile.ci]
|
|
24
|
+
|
|
25
|
+
# More conservative in CI
|
|
26
|
+
test-threads = "num-cpus"
|
|
27
|
+
|
|
28
|
+
# Always show all output in CI
|
|
29
|
+
failure-output = "immediate"
|
|
30
|
+
success-output = "immediate"
|
|
31
|
+
status-level = "all"
|
|
32
|
+
|
|
33
|
+
# No retries in CI to catch flaky tests
|
|
34
|
+
retries = 0
|
|
35
|
+
|
|
36
|
+
# Quick profile for development
|
|
37
|
+
[profile.quick]
|
|
38
|
+
|
|
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
|
+
|
|
42
|
+
# Even more parallel execution locally
|
|
43
|
+
test-threads = "num-cpus"
|
|
44
|
+
|
|
45
|
+
# Less verbose output
|
|
46
|
+
status-level = "fail"
|
|
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
|
+
|
|
64
|
+
# Ultra-fast profile for pre-commit hooks
|
|
65
|
+
[profile.pre-commit]
|
|
66
|
+
|
|
67
|
+
# Only run unit tests in lib, skip all integration tests and binaries
|
|
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/)'
|
|
69
|
+
|
|
70
|
+
# Maximum parallelism for speed
|
|
71
|
+
test-threads = "num-cpus"
|
|
72
|
+
|
|
73
|
+
# Minimal output for speed
|
|
74
|
+
status-level = "fail"
|
|
75
|
+
failure-output = "immediate"
|
|
76
|
+
success-output = "never"
|
|
77
|
+
|
|
78
|
+
# No retries to save time
|
|
79
|
+
retries = 0
|
|
80
|
+
|
|
81
|
+
# Fail fast on first failure
|
|
82
|
+
fail-fast = true
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
# Pre-commit hooks for rumdl
|
|
2
|
-
# Install with:
|
|
3
|
-
#
|
|
2
|
+
# Install with:
|
|
3
|
+
# pre-commit install # Install commit hooks
|
|
4
|
+
# pre-commit install --hook-type pre-push # Install push hooks
|
|
5
|
+
# Run manually:
|
|
6
|
+
# pre-commit run --all-files # Run commit hooks
|
|
7
|
+
# pre-commit run --hook-stage push --all-files # Run push hooks
|
|
4
8
|
|
|
5
9
|
repos:
|
|
6
10
|
# Rust formatting and linting
|
|
@@ -15,26 +19,19 @@ repos:
|
|
|
15
19
|
|
|
16
20
|
- id: cargo-clippy
|
|
17
21
|
name: cargo clippy
|
|
18
|
-
entry: make lint
|
|
22
|
+
entry: make lint-fast
|
|
19
23
|
language: system
|
|
20
24
|
types: [rust]
|
|
21
25
|
pass_filenames: false
|
|
22
26
|
|
|
23
27
|
- id: cargo-test-quick
|
|
24
28
|
name: cargo test (quick)
|
|
25
|
-
entry: make test-
|
|
29
|
+
entry: make test-pre-commit
|
|
26
30
|
language: system
|
|
27
31
|
types: [rust]
|
|
28
32
|
pass_filenames: false
|
|
29
33
|
stages: [pre-commit]
|
|
30
34
|
|
|
31
|
-
- id: cargo-check
|
|
32
|
-
name: cargo check
|
|
33
|
-
entry: cargo check --all-targets --all-features
|
|
34
|
-
language: system
|
|
35
|
-
types: [rust]
|
|
36
|
-
pass_filenames: false
|
|
37
|
-
|
|
38
35
|
# General file quality checks
|
|
39
36
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
40
37
|
rev: v4.6.0
|
|
@@ -57,3 +54,33 @@ repos:
|
|
|
57
54
|
hooks:
|
|
58
55
|
- id: rumdl
|
|
59
56
|
exclude: ^(test_tmp|benchmark/test-data|docs/temp|CHANGELOG\.md)
|
|
57
|
+
|
|
58
|
+
# Pre-push hooks for comprehensive validation
|
|
59
|
+
- repo: local
|
|
60
|
+
hooks:
|
|
61
|
+
- id: cargo-test-full
|
|
62
|
+
name: cargo test (full suite)
|
|
63
|
+
entry: make test-push
|
|
64
|
+
language: system
|
|
65
|
+
types: [rust]
|
|
66
|
+
pass_filenames: false
|
|
67
|
+
stages: [pre-push]
|
|
68
|
+
verbose: true
|
|
69
|
+
|
|
70
|
+
- id: cargo-lint-full
|
|
71
|
+
name: cargo clippy (all targets)
|
|
72
|
+
entry: make lint
|
|
73
|
+
language: system
|
|
74
|
+
types: [rust]
|
|
75
|
+
pass_filenames: false
|
|
76
|
+
stages: [pre-push]
|
|
77
|
+
verbose: true
|
|
78
|
+
|
|
79
|
+
- id: cargo-doc-check
|
|
80
|
+
name: cargo doc (check)
|
|
81
|
+
entry: cargo doc --no-deps --all-features
|
|
82
|
+
language: system
|
|
83
|
+
types: [rust]
|
|
84
|
+
pass_filenames: false
|
|
85
|
+
stages: [pre-push]
|
|
86
|
+
verbose: true
|
|
@@ -7,8 +7,17 @@ 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
|
+
|
|
12
|
+
## [0.0.107] - 2025-08-06
|
|
13
|
+
|
|
10
14
|
## [0.0.107] - 2025-08-06
|
|
11
15
|
|
|
16
|
+
### Fixed
|
|
17
|
+
- MD036: Remove automatic fix to prevent document corruption when bold/italic text is used as image captions, labels, or warnings (#23)
|
|
18
|
+
- MD011: No longer flags patterns like `()[1]` inside inline code as reversed links (#19)
|
|
19
|
+
- MD052: No longer flags reference patterns inside HTML comments as undefined references (#20)
|
|
20
|
+
|
|
12
21
|
## [0.0.106] - 2025-08-05
|
|
13
22
|
|
|
14
23
|
### Changed
|
|
@@ -291,7 +300,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
291
300
|
|
|
292
301
|
- Initial implementation of remaining rules for markdownlint parity
|
|
293
302
|
|
|
294
|
-
[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
|
|
305
|
+
[0.0.107]: https://github.com/rvben/rumdl/compare/v0.0.106...v0.0.107
|
|
295
306
|
[0.0.107]: https://github.com/rvben/rumdl/compare/v0.0.106...v0.0.107
|
|
296
307
|
[0.0.105]: https://github.com/rvben/rumdl/compare/v0.0.104...v0.0.105
|
|
297
308
|
[0.0.105]: https://github.com/rvben/rumdl/compare/v0.0.104...v0.0.105
|
|
@@ -277,9 +277,9 @@ dependencies = [
|
|
|
277
277
|
|
|
278
278
|
[[package]]
|
|
279
279
|
name = "clap"
|
|
280
|
-
version = "4.5.
|
|
280
|
+
version = "4.5.43"
|
|
281
281
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
282
|
-
checksum = "
|
|
282
|
+
checksum = "50fd97c9dc2399518aa331917ac6f274280ec5eb34e555dd291899745c48ec6f"
|
|
283
283
|
dependencies = [
|
|
284
284
|
"clap_builder",
|
|
285
285
|
"clap_derive",
|
|
@@ -287,9 +287,9 @@ dependencies = [
|
|
|
287
287
|
|
|
288
288
|
[[package]]
|
|
289
289
|
name = "clap_builder"
|
|
290
|
-
version = "4.5.
|
|
290
|
+
version = "4.5.43"
|
|
291
291
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
292
|
-
checksum = "
|
|
292
|
+
checksum = "c35b5830294e1fa0462034af85cc95225a4cb07092c088c55bda3147cfcd8f65"
|
|
293
293
|
dependencies = [
|
|
294
294
|
"anstream",
|
|
295
295
|
"anstyle",
|
|
@@ -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,14 +61,27 @@ 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
|
|
|
78
|
+
test-pre-commit:
|
|
79
|
+
cargo nextest run --profile pre-commit
|
|
80
|
+
|
|
81
|
+
test-push:
|
|
82
|
+
@echo "Running full test suite (this may take a few minutes)..."
|
|
83
|
+
cargo nextest run
|
|
84
|
+
|
|
72
85
|
test-ci:
|
|
73
86
|
cargo nextest run --profile ci
|
|
74
87
|
|
|
@@ -81,7 +94,10 @@ fmt:
|
|
|
81
94
|
cargo fix --allow-dirty --allow-staged
|
|
82
95
|
|
|
83
96
|
lint:
|
|
84
|
-
cargo clippy --all-targets --all-features -- -D warnings
|
|
97
|
+
CARGO_INCREMENTAL=1 cargo clippy --all-targets --all-features -- -D warnings
|
|
98
|
+
|
|
99
|
+
lint-fast:
|
|
100
|
+
CARGO_INCREMENTAL=1 cargo clippy --workspace --lib --bins -- -D warnings
|
|
85
101
|
|
|
86
102
|
check:
|
|
87
103
|
cargo check --all-targets --all-features
|
|
@@ -90,7 +106,7 @@ doc:
|
|
|
90
106
|
cargo doc --no-deps
|
|
91
107
|
|
|
92
108
|
watch-test:
|
|
93
|
-
cargo watch -x
|
|
109
|
+
cargo watch -x "nextest run --profile quick"
|
|
94
110
|
|
|
95
111
|
all: fmt check test build
|
|
96
112
|
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
use rumdl::rules::front_matter_utils::FrontMatterUtils;
|
|
2
|
+
use std::env;
|
|
3
|
+
use std::fs;
|
|
4
|
+
|
|
5
|
+
fn main() {
|
|
6
|
+
let args: Vec<String> = env::args().collect();
|
|
7
|
+
let content = if args.len() > 1 {
|
|
8
|
+
fs::read_to_string(&args[1]).expect("Failed to read file")
|
|
9
|
+
} else {
|
|
10
|
+
r#"+++
|
|
11
|
+
title = "My Post"
|
|
12
|
+
tags = ["example", "test"]
|
|
13
|
+
+++
|
|
14
|
+
|
|
15
|
+
# Content
|
|
16
|
+
|
|
17
|
+
[missing] reference should be flagged."#
|
|
18
|
+
.to_string()
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
println!("Content:");
|
|
22
|
+
for (i, line) in content.lines().enumerate() {
|
|
23
|
+
println!("Line {}: {}", i + 1, line);
|
|
24
|
+
}
|
|
25
|
+
println!();
|
|
26
|
+
|
|
27
|
+
let line_count = content.lines().count();
|
|
28
|
+
|
|
29
|
+
// Test with 0-based indexing (what the function actually uses)
|
|
30
|
+
println!("Testing is_in_front_matter with 0-based indexing:");
|
|
31
|
+
for i in 0..line_count {
|
|
32
|
+
let in_frontmatter = FrontMatterUtils::is_in_front_matter(&content, i);
|
|
33
|
+
println!("Line {} (0-based={}): in_frontmatter={}", i + 1, i, in_frontmatter);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Test also with 1-based indexing (what we pass from MD052)
|
|
37
|
+
println!("\nTesting is_in_front_matter with 1-based indexing:");
|
|
38
|
+
for i in 1..=line_count {
|
|
39
|
+
let in_frontmatter = FrontMatterUtils::is_in_front_matter(&content, i);
|
|
40
|
+
println!("Line {i}: in_frontmatter={in_frontmatter}");
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -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
|
}
|