rumdl 0.0.70__tar.gz → 0.0.71__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rumdl might be problematic. Click here for more details.
- {rumdl-0.0.70 → rumdl-0.0.71}/Cargo.lock +1 -1
- {rumdl-0.0.70 → rumdl-0.0.71}/Cargo.toml +1 -1
- {rumdl-0.0.70 → rumdl-0.0.71}/PKG-INFO +1 -1
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md006_start_bullets.rs +55 -35
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md030_list_marker_space.rs +10 -2
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md030_test.rs +35 -7
- {rumdl-0.0.70 → rumdl-0.0.71}/.rumdl.toml +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/MANIFEST.in +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/Makefile +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/README.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/assets/logo.png +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/benches/fix_performance.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/benches/range_performance.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/benches/range_utils_benchmark.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/benches/rule_performance.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/benches/simple_fix_bench.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/RULES.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md001.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md002.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md003.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md004.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md005.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md006.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md007.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md009.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md010.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md011.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md012.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md013.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md014.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md018.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md019.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md020.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md021.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md022.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md023.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md024.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md025.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md026.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md027.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md028.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md029.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md030.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md031.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md032.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md033.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md034.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md035.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md036.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md037.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md038.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md039.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md040.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md041.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md042.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md043.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md044.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md045.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md046.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md047.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md048.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md049.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md050.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md051.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md052.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md053.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md054.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md055.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md056.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md057.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/docs/md058.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/issues/plan-rule-parity-with-markdownlint.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/parity_check.py +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/pyproject.toml +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/python/MANIFEST.in +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/python/PYTHON-README.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/python/rumdl/__init__.py +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/python/rumdl/__main__.py +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/python/rumdl/py.typed +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/rumdl.toml.example +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/config.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/init.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/lib.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/lint_context.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/lsp/mod.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/lsp/server.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/lsp/types.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/main.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/markdownlint_config.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/parallel.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/performance.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/profiling.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/python.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rule.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/blockquote_utils.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/code_block_utils.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/code_fence_utils.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/emphasis_style.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/front_matter_utils.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/heading_utils.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/list_utils.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md001_heading_increment.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md002_first_heading_h1.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md003_heading_style.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md004_unordered_list_style.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md005_list_indent.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md007_ul_indent.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md009_trailing_spaces.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md010_no_hard_tabs.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md011_no_reversed_links.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md012_no_multiple_blanks.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md013_line_length.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md014_commands_show_output.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md018_no_missing_space_atx.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md019_no_multiple_space_atx.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md022_blanks_around_headings.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md023_heading_start_left.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md024_no_duplicate_heading.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md025_single_title.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md026_no_trailing_punctuation.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md028_no_blanks_blockquote.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md029_ordered_list_prefix.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md031_blanks_around_fences.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md032_blanks_around_lists.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md033_no_inline_html.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md034_no_bare_urls.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md035_hr_style.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md036_no_emphasis_only_first.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md037_spaces_around_emphasis.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md038_no_space_in_code.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md039_no_space_in_links.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md040_fenced_code_language.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md041_first_line_heading.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md042_no_empty_links.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md043_required_headings.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md044_proper_names.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md045_no_alt_text.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md046_code_block_style.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md047_single_trailing_newline.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md048_code_fence_style.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md049_emphasis_style.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md050_strong_style.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md051_link_fragments.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md052_reference_links_images.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md053_link_image_reference_definitions.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md054_link_image_style.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md055_table_pipe_style.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md056_table_column_count.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md057_existing_relative_links.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/md058_blanks_around_tables.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/mod.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/rules/strong_style.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/utils/ast_utils.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/utils/code_block_utils.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/utils/document_structure.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/utils/early_returns.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/utils/element_cache.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/utils/markdown_elements.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/utils/mod.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/utils/range_utils.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/utils/regex_cache.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/utils/string_interner.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/src/utils/table_utils.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/advanced_integration_tests.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/character_ranges/additional_tests.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/character_ranges/basic_tests.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/character_ranges/comprehensive_tests.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/character_ranges/extended_tests.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/character_ranges/mod.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/character_ranges/unicode_utils.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/cli_duplication_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/cli_integration_tests.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/commonmark_compliance_tests.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/comprehensive_integration_tests.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/config_application_tests.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/config_tests.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/init_command_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/init_tests.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/integration_tests.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/json_output_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/lib.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/lsp_integration_tests.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/lsp_tests.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/markdownlint_cli_integration.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/markdownlint_config_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/md030_edge_cases.md +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/output_format_tests.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/perf_check.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/pyproject_config_tests.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md001_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md001_unicode_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md002_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md003_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md004_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md005_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md006_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md006_unicode_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md007_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md009_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md010_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md011_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md012_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md013_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md014_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md018_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md019_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md020_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md021_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md022_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md023_extended_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md023_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md024_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md025_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md026_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md027_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md028_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md029_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md031_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md032_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md033_extended_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md033_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md034_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md035_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md036_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md037_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md038_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md039_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md040_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md041_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md042_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md043_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md044_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md045_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md046_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md047_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md048_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md049_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md050_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md051_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md052_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md053_additional_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md053_proptest.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md053_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md054_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md054_unicode_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md055_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md056_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md057_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/md058_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/rules/mod.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/utils/blockquote_utils_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/utils/code_block_utils_extended_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/utils/code_block_utils_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/utils/core_utils_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/utils/front_matter_utils_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/utils/line_index_test.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/utils/mod.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/utils_markdown_edge_cases.rs +0 -0
- {rumdl-0.0.70 → rumdl-0.0.71}/tests/utils_tests.rs +0 -0
|
@@ -25,14 +25,14 @@ lazy_static! {
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
impl MD006StartBullets {
|
|
28
|
-
///
|
|
28
|
+
/// Checks if a line is a bullet list item and returns its indentation level
|
|
29
29
|
fn is_bullet_list_item(line: &str) -> Option<usize> {
|
|
30
|
-
if let Some(
|
|
31
|
-
let indent =
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
None
|
|
30
|
+
if let Some(captures) = BULLET_PATTERN.captures(line) {
|
|
31
|
+
if let Some(indent) = captures.get(1) {
|
|
32
|
+
return Some(indent.as_str().len());
|
|
33
|
+
}
|
|
35
34
|
}
|
|
35
|
+
None
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
/// Checks if a line is blank (empty or whitespace only)
|
|
@@ -46,7 +46,9 @@ impl MD006StartBullets {
|
|
|
46
46
|
Some(indent) => indent,
|
|
47
47
|
None => return None, // Should not happen if called on a bullet item
|
|
48
48
|
};
|
|
49
|
+
|
|
49
50
|
let mut i = line_idx;
|
|
51
|
+
|
|
50
52
|
while i > 0 {
|
|
51
53
|
i -= 1;
|
|
52
54
|
if Self::is_blank_line(lines[i]) {
|
|
@@ -54,13 +56,36 @@ impl MD006StartBullets {
|
|
|
54
56
|
}
|
|
55
57
|
if let Some(prev_indent) = Self::is_bullet_list_item(lines[i]) {
|
|
56
58
|
if prev_indent <= current_indent {
|
|
57
|
-
|
|
59
|
+
// Found a potential parent or sibling
|
|
60
|
+
// Check if there's any non-list content between this potential parent and current item
|
|
61
|
+
let mut has_breaking_content = false;
|
|
62
|
+
for check_idx in (i + 1)..line_idx {
|
|
63
|
+
if Self::is_blank_line(lines[check_idx]) {
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if Self::is_bullet_list_item(lines[check_idx]).is_none() {
|
|
67
|
+
// Found non-list content - check if it breaks the list structure
|
|
68
|
+
let content_indent = lines[check_idx].len() - lines[check_idx].trim_start().len();
|
|
69
|
+
// Content is only acceptable if it's indented at least as much as current item
|
|
70
|
+
// AND we have a true parent relationship (prev_indent < current_indent)
|
|
71
|
+
if content_indent < current_indent || prev_indent >= current_indent {
|
|
72
|
+
has_breaking_content = true;
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if !has_breaking_content {
|
|
79
|
+
return Some((i, prev_indent));
|
|
80
|
+
} else {
|
|
81
|
+
// Content breaks the list structure
|
|
82
|
+
return None;
|
|
83
|
+
}
|
|
58
84
|
}
|
|
59
85
|
// If prev_indent > current_indent, it's a child of a sibling, ignore it and keep searching.
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
break;
|
|
86
|
+
} else {
|
|
87
|
+
// Found non-list content - this breaks the search
|
|
88
|
+
return None;
|
|
64
89
|
}
|
|
65
90
|
}
|
|
66
91
|
None
|
|
@@ -156,36 +181,25 @@ impl Rule for MD006StartBullets {
|
|
|
156
181
|
doc_structure: &DocumentStructure,
|
|
157
182
|
) -> LintResult {
|
|
158
183
|
let content = _ctx.content;
|
|
159
|
-
|
|
160
|
-
// Early returns for performance
|
|
161
|
-
if content.is_empty() || doc_structure.list_lines.is_empty() {
|
|
184
|
+
if doc_structure.list_lines.is_empty() {
|
|
162
185
|
return Ok(Vec::new());
|
|
163
186
|
}
|
|
164
|
-
|
|
165
|
-
// Quick check for any list markers before processing
|
|
166
187
|
if !content.contains('*') && !content.contains('-') && !content.contains('+') {
|
|
167
188
|
return Ok(Vec::new());
|
|
168
189
|
}
|
|
169
|
-
|
|
170
|
-
// Pre-compute LineIndex once for all operations
|
|
171
190
|
let line_index = LineIndex::new(content.to_string());
|
|
172
191
|
let mut result = Vec::new();
|
|
173
192
|
let lines: Vec<&str> = content.lines().collect();
|
|
174
193
|
let mut valid_bullet_lines = vec![false; lines.len()];
|
|
175
|
-
|
|
176
|
-
// Process list lines in order for better cache locality
|
|
177
194
|
for &line_num in &doc_structure.list_lines {
|
|
178
195
|
let line_idx = line_num - 1;
|
|
179
196
|
if line_idx >= lines.len() {
|
|
180
197
|
continue;
|
|
181
198
|
}
|
|
182
199
|
let line = lines[line_idx];
|
|
183
|
-
|
|
184
|
-
// Skip lines in code blocks
|
|
185
200
|
if doc_structure.is_in_code_block(line_num) {
|
|
186
201
|
continue;
|
|
187
202
|
}
|
|
188
|
-
|
|
189
203
|
if let Some(indent) = Self::is_bullet_list_item(line) {
|
|
190
204
|
let mut is_valid = false; // Assume invalid initially
|
|
191
205
|
if indent == 0 {
|
|
@@ -220,19 +234,25 @@ impl Rule for MD006StartBullets {
|
|
|
220
234
|
} else {
|
|
221
235
|
fixed_line.to_string()
|
|
222
236
|
};
|
|
237
|
+
|
|
238
|
+
// Calculate the range to highlight: from first indentation character to end of list marker
|
|
239
|
+
let start_col = if indent > 0 { 2 } else { 1 }; // Start from first indentation space if indented
|
|
240
|
+
let marker_pos = line.find(|c: char| c == '*' || c == '-' || c == '+').unwrap_or(0);
|
|
241
|
+
let end_col = marker_pos + 3; // +1 for the marker itself, +1 for 1-based indexing, +1 for space after marker
|
|
242
|
+
|
|
223
243
|
result.push(LintWarning {
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
244
|
+
rule_name: Some(self.name()),
|
|
245
|
+
severity: Severity::Warning,
|
|
246
|
+
line: line_num,
|
|
247
|
+
column: start_col,
|
|
248
|
+
end_line: line_num,
|
|
249
|
+
end_column: end_col,
|
|
250
|
+
message: "List item should start at the beginning of the line (remove indentation)"
|
|
251
|
+
.to_string(),
|
|
252
|
+
fix: Some(Fix {
|
|
253
|
+
range: line_index.line_col_to_byte_range(line_num, 1),
|
|
254
|
+
replacement,
|
|
255
|
+
}),
|
|
236
256
|
});
|
|
237
257
|
}
|
|
238
258
|
}
|
|
@@ -149,7 +149,11 @@ impl Rule for MD030ListMarkerSpace {
|
|
|
149
149
|
column: start_col,
|
|
150
150
|
end_line,
|
|
151
151
|
end_column: end_col,
|
|
152
|
-
message:
|
|
152
|
+
message: format!(
|
|
153
|
+
"Spaces after list markers (Expected: {}; Actual: {})",
|
|
154
|
+
expected_spaces,
|
|
155
|
+
whitespace.len()
|
|
156
|
+
),
|
|
153
157
|
fix,
|
|
154
158
|
});
|
|
155
159
|
}
|
|
@@ -420,7 +424,11 @@ mod tests {
|
|
|
420
424
|
"Should flag lines with too many spaces after list marker"
|
|
421
425
|
);
|
|
422
426
|
for warning in result {
|
|
423
|
-
|
|
427
|
+
assert!(
|
|
428
|
+
warning.message.starts_with("Spaces after list markers (Expected:") && warning.message.contains("Actual:"),
|
|
429
|
+
"Warning message should include expected and actual values, got: '{}'",
|
|
430
|
+
warning.message
|
|
431
|
+
);
|
|
424
432
|
}
|
|
425
433
|
}
|
|
426
434
|
}
|
|
@@ -29,7 +29,11 @@ mod tests {
|
|
|
29
29
|
let result = rule.check(&ctx).unwrap();
|
|
30
30
|
assert_eq!(result.len(), 2);
|
|
31
31
|
for warning in result {
|
|
32
|
-
|
|
32
|
+
assert!(
|
|
33
|
+
warning.message.starts_with("Spaces after list markers (Expected:") && warning.message.contains("Actual:"),
|
|
34
|
+
"Warning message should include expected and actual values, got: '{}'",
|
|
35
|
+
warning.message
|
|
36
|
+
);
|
|
33
37
|
}
|
|
34
38
|
}
|
|
35
39
|
|
|
@@ -41,7 +45,11 @@ mod tests {
|
|
|
41
45
|
let result = rule.check(&ctx).unwrap();
|
|
42
46
|
assert_eq!(result.len(), 2);
|
|
43
47
|
for warning in result {
|
|
44
|
-
|
|
48
|
+
assert!(
|
|
49
|
+
warning.message.starts_with("Spaces after list markers (Expected:") && warning.message.contains("Actual:"),
|
|
50
|
+
"Warning message should include expected and actual values, got: '{}'",
|
|
51
|
+
warning.message
|
|
52
|
+
);
|
|
45
53
|
}
|
|
46
54
|
}
|
|
47
55
|
|
|
@@ -139,7 +147,11 @@ mod tests {
|
|
|
139
147
|
let ctx = LintContext::new(content);
|
|
140
148
|
let result = rule.check(&ctx).unwrap();
|
|
141
149
|
assert_eq!(result.len(), 1);
|
|
142
|
-
|
|
150
|
+
assert!(
|
|
151
|
+
result[0].message.starts_with("Spaces after list markers (Expected:") && result[0].message.contains("Actual:"),
|
|
152
|
+
"Warning message should include expected and actual values, got: '{}'",
|
|
153
|
+
result[0].message
|
|
154
|
+
);
|
|
143
155
|
}
|
|
144
156
|
|
|
145
157
|
#[test]
|
|
@@ -149,7 +161,11 @@ mod tests {
|
|
|
149
161
|
let ctx = LintContext::new(content);
|
|
150
162
|
let result = rule.check(&ctx).unwrap();
|
|
151
163
|
assert_eq!(result.len(), 1);
|
|
152
|
-
|
|
164
|
+
assert!(
|
|
165
|
+
result[0].message.starts_with("Spaces after list markers (Expected:") && result[0].message.contains("Actual:"),
|
|
166
|
+
"Warning message should include expected and actual values, got: '{}'",
|
|
167
|
+
result[0].message
|
|
168
|
+
);
|
|
153
169
|
}
|
|
154
170
|
|
|
155
171
|
#[test]
|
|
@@ -159,7 +175,11 @@ mod tests {
|
|
|
159
175
|
let ctx = LintContext::new(content);
|
|
160
176
|
let result = rule.check(&ctx).unwrap();
|
|
161
177
|
assert_eq!(result.len(), 1);
|
|
162
|
-
|
|
178
|
+
assert!(
|
|
179
|
+
result[0].message.starts_with("Spaces after list markers (Expected:") && result[0].message.contains("Actual:"),
|
|
180
|
+
"Warning message should include expected and actual values, got: '{}'",
|
|
181
|
+
result[0].message
|
|
182
|
+
);
|
|
163
183
|
}
|
|
164
184
|
|
|
165
185
|
#[test]
|
|
@@ -169,7 +189,11 @@ mod tests {
|
|
|
169
189
|
let ctx = LintContext::new(content);
|
|
170
190
|
let result = rule.check(&ctx).unwrap();
|
|
171
191
|
assert_eq!(result.len(), 1);
|
|
172
|
-
|
|
192
|
+
assert!(
|
|
193
|
+
result[0].message.starts_with("Spaces after list markers (Expected:") && result[0].message.contains("Actual:"),
|
|
194
|
+
"Warning message should include expected and actual values, got: '{}'",
|
|
195
|
+
result[0].message
|
|
196
|
+
);
|
|
173
197
|
}
|
|
174
198
|
|
|
175
199
|
#[test]
|
|
@@ -179,7 +203,11 @@ mod tests {
|
|
|
179
203
|
let ctx = LintContext::new(content);
|
|
180
204
|
let result = rule.check(&ctx).unwrap();
|
|
181
205
|
assert_eq!(result.len(), 1);
|
|
182
|
-
|
|
206
|
+
assert!(
|
|
207
|
+
result[0].message.starts_with("Spaces after list markers (Expected:") && result[0].message.contains("Actual:"),
|
|
208
|
+
"Warning message should include expected and actual values, got: '{}'",
|
|
209
|
+
result[0].message
|
|
210
|
+
);
|
|
183
211
|
}
|
|
184
212
|
|
|
185
213
|
#[test]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|