rumdl 0.0.75__tar.gz → 0.0.76__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.75 → rumdl-0.0.76}/Cargo.lock +1 -1
- {rumdl-0.0.75 → rumdl-0.0.76}/Cargo.toml +1 -1
- {rumdl-0.0.75 → rumdl-0.0.76}/PKG-INFO +1 -1
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md005_list_indent.rs +6 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md006_start_bullets.rs +14 -13
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md011_no_reversed_links.rs +6 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md019_no_multiple_space_atx.rs +8 -5
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md021_no_multiple_space_closed_atx.rs +12 -34
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md023_heading_start_left.rs +16 -20
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md027_multiple_spaces_blockquote.rs +2 -2
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md028_no_blanks_blockquote.rs +6 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md030_list_marker_space.rs +13 -25
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md031_blanks_around_fences.rs +6 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md037_spaces_around_emphasis.rs +6 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/character_ranges/basic_tests.rs +1 -1
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/character_ranges/extended_tests.rs +2 -2
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md019_test.rs +1 -1
- rumdl-0.0.76/tests/vscode_extension_fixes.rs +375 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/.rumdl.toml +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/MANIFEST.in +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/Makefile +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/README.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/assets/logo.png +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/benches/fix_performance.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/benches/range_performance.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/benches/range_utils_benchmark.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/benches/rule_performance.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/benches/simple_fix_bench.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/RULES.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md001.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md002.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md003.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md004.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md005.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md006.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md007.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md009.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md010.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md011.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md012.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md013.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md014.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md018.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md019.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md020.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md021.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md022.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md023.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md024.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md025.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md026.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md027.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md028.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md029.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md030.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md031.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md032.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md033.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md034.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md035.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md036.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md037.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md038.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md039.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md040.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md041.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md042.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md043.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md044.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md045.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md046.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md047.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md048.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md049.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md050.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md051.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md052.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md053.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md054.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md055.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md056.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md057.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/docs/md058.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/issues/plan-rule-parity-with-markdownlint.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/parity_check.py +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/pyproject.toml +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/python/MANIFEST.in +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/python/PYTHON-README.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/python/rumdl/__init__.py +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/python/rumdl/__main__.py +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/python/rumdl/py.typed +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/rumdl.toml.example +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/config.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/init.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/lib.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/lint_context.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/lsp/mod.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/lsp/server.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/lsp/types.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/main.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/markdownlint_config.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/parallel.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/performance.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/profiling.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/python.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rule.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/blockquote_utils.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/code_block_utils.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/code_fence_utils.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/emphasis_style.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/front_matter_utils.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/heading_utils.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/list_utils.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md001_heading_increment.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md002_first_heading_h1.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md003_heading_style.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md004_unordered_list_style.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md007_ul_indent.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md009_trailing_spaces.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md010_no_hard_tabs.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md012_no_multiple_blanks.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md013_line_length.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md014_commands_show_output.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md018_no_missing_space_atx.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md022_blanks_around_headings.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md024_no_duplicate_heading.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md025_single_title.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md026_no_trailing_punctuation.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md029_ordered_list_prefix.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md032_blanks_around_lists.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md033_no_inline_html.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md034_no_bare_urls.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md035_hr_style.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md036_no_emphasis_only_first.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md038_no_space_in_code.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md039_no_space_in_links.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md040_fenced_code_language.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md041_first_line_heading.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md042_no_empty_links.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md043_required_headings.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md044_proper_names.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md045_no_alt_text.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md046_code_block_style.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md047_single_trailing_newline.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md048_code_fence_style.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md049_emphasis_style.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md050_strong_style.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md051_link_fragments.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md052_reference_links_images.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md053_link_image_reference_definitions.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md054_link_image_style.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md055_table_pipe_style.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md056_table_column_count.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md057_existing_relative_links.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md058_blanks_around_tables.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/mod.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/strong_style.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/utils/ast_utils.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/utils/code_block_utils.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/utils/document_structure.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/utils/early_returns.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/utils/element_cache.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/utils/markdown_elements.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/utils/mod.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/utils/range_utils.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/utils/regex_cache.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/utils/string_interner.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/src/utils/table_utils.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/advanced_integration_tests.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/character_ranges/additional_tests.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/character_ranges/comprehensive_tests.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/character_ranges/mod.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/character_ranges/unicode_utils.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/cli_duplication_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/cli_integration_tests.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/commonmark_compliance_tests.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/comprehensive_integration_tests.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/config_application_tests.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/config_tests.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/init_command_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/init_tests.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/integration_tests.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/json_output_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/lib.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/lsp_integration_tests.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/lsp_tests.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/markdownlint_cli_integration.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/markdownlint_config_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/md030_edge_cases.md +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/output_format_tests.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/perf_check.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/pyproject_config_tests.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md001_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md001_unicode_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md002_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md003_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md004_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md005_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md006_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md006_unicode_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md007_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md009_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md010_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md011_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md012_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md013_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md014_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md018_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md020_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md021_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md022_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md023_extended_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md023_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md024_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md025_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md026_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md027_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md028_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md029_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md030_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md031_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md032_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md033_extended_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md033_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md034_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md035_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md036_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md037_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md038_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md039_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md040_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md041_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md042_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md043_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md044_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md045_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md046_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md047_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md048_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md049_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md050_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md051_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md052_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md053_additional_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md053_proptest.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md053_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md054_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md054_unicode_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md055_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md056_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md057_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md058_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/mod.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/utils/blockquote_utils_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/utils/code_block_utils_extended_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/utils/code_block_utils_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/utils/core_utils_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/utils/front_matter_utils_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/utils/line_index_test.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/utils/mod.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/utils_markdown_edge_cases.rs +0 -0
- {rumdl-0.0.75 → rumdl-0.0.76}/tests/utils_tests.rs +0 -0
|
@@ -237,20 +237,21 @@ impl Rule for MD006StartBullets {
|
|
|
237
237
|
valid_bullet_lines[line_idx] = is_valid;
|
|
238
238
|
|
|
239
239
|
if !is_valid {
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
240
|
+
// Calculate the precise range for the indentation that needs to be removed
|
|
241
|
+
// For " * Indented bullet", we want to highlight just the indentation and marker " *" (columns 1-3)
|
|
242
|
+
let start_col = 1; // Start from beginning of line
|
|
243
|
+
let end_col = indent + 2; // Include the marker (indent + 1 for marker position + 1 for inclusive range)
|
|
244
|
+
|
|
245
|
+
// For the fix, we need to replace the highlighted part (" *") with just the bullet marker ("* ")
|
|
246
|
+
let line = lines[line_idx];
|
|
247
|
+
let trimmed = line.trim_start();
|
|
248
|
+
// Extract just the bullet marker and normalize to single space
|
|
249
|
+
let bullet_part = if let Some(captures) = BULLET_PATTERN.captures(trimmed) {
|
|
250
|
+
format!("{} ", captures.get(2).unwrap().as_str()) // Always use single space
|
|
246
251
|
} else {
|
|
247
|
-
|
|
252
|
+
"* ".to_string() // fallback
|
|
248
253
|
};
|
|
249
|
-
|
|
250
|
-
// Calculate the range to highlight: from first indentation character to end of list marker
|
|
251
|
-
let start_col = if indent > 0 { 2 } else { 1 }; // Start from first indentation space if indented
|
|
252
|
-
let marker_pos = line.find(|c: char| c == '*' || c == '-' || c == '+').unwrap_or(0);
|
|
253
|
-
let end_col = marker_pos + 3; // +1 for the marker itself, +1 for 1-based indexing, +1 for space after marker
|
|
254
|
+
let replacement = bullet_part;
|
|
254
255
|
|
|
255
256
|
result.push(LintWarning {
|
|
256
257
|
rule_name: Some(self.name()),
|
|
@@ -261,7 +262,7 @@ impl Rule for MD006StartBullets {
|
|
|
261
262
|
end_column: end_col,
|
|
262
263
|
message: "List item indentation".to_string(),
|
|
263
264
|
fix: Some(Fix {
|
|
264
|
-
range: line_index.line_col_to_byte_range(line_num,
|
|
265
|
+
range: line_index.line_col_to_byte_range(line_num, start_col),
|
|
265
266
|
replacement,
|
|
266
267
|
}),
|
|
267
268
|
});
|
|
@@ -132,11 +132,14 @@ impl Rule for MD019NoMultipleSpaceAtx {
|
|
|
132
132
|
|
|
133
133
|
// Calculate precise range: highlight the extra spaces (all spaces after the first one)
|
|
134
134
|
let hash_end_col = hashes.end() + 1; // 1-indexed, position after hashes
|
|
135
|
-
let
|
|
136
|
-
let
|
|
135
|
+
let spaces_start_col = hash_end_col; // Start of all spaces after hashes
|
|
136
|
+
let spaces_len = spaces; // Length of all spaces
|
|
137
137
|
|
|
138
138
|
let (start_line, start_col, end_line, end_col) =
|
|
139
|
-
calculate_single_line_range(line_num,
|
|
139
|
+
calculate_single_line_range(line_num, spaces_start_col, spaces_len);
|
|
140
|
+
|
|
141
|
+
// Generate the correct replacement text (just one space)
|
|
142
|
+
let correct_spacing = " ";
|
|
140
143
|
|
|
141
144
|
warnings.push(LintWarning {
|
|
142
145
|
rule_name: Some(self.name()),
|
|
@@ -151,8 +154,8 @@ impl Rule for MD019NoMultipleSpaceAtx {
|
|
|
151
154
|
end_column: end_col,
|
|
152
155
|
severity: Severity::Warning,
|
|
153
156
|
fix: Some(Fix {
|
|
154
|
-
range: line_index.line_col_to_byte_range(line_num,
|
|
155
|
-
replacement:
|
|
157
|
+
range: line_index.line_col_to_byte_range(line_num, start_col),
|
|
158
|
+
replacement: correct_spacing.to_string(),
|
|
156
159
|
}),
|
|
157
160
|
});
|
|
158
161
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/// See [docs/md021.md](../../docs/md021.md) for full documentation, configuration, and examples.
|
|
4
4
|
use crate::rule::{Fix, LintError, LintResult, LintWarning, Rule, RuleCategory, Severity};
|
|
5
5
|
use crate::utils::document_structure::{DocumentStructure, DocumentStructureExtensions};
|
|
6
|
-
use crate::utils::range_utils::calculate_single_line_range;
|
|
6
|
+
use crate::utils::range_utils::{calculate_single_line_range, LineIndex};
|
|
7
7
|
use lazy_static::lazy_static;
|
|
8
8
|
use regex::Regex;
|
|
9
9
|
|
|
@@ -69,31 +69,6 @@ impl MD021NoMultipleSpaceClosedAtx {
|
|
|
69
69
|
(0, 0)
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
|
-
|
|
73
|
-
// Calculate the byte range for a specific line in the content
|
|
74
|
-
fn get_line_byte_range(&self, content: &str, line_num: usize) -> std::ops::Range<usize> {
|
|
75
|
-
let mut current_line = 1;
|
|
76
|
-
let mut start_byte = 0;
|
|
77
|
-
|
|
78
|
-
for (i, c) in content.char_indices() {
|
|
79
|
-
if current_line == line_num && c == '\n' {
|
|
80
|
-
return start_byte..i;
|
|
81
|
-
} else if c == '\n' {
|
|
82
|
-
current_line += 1;
|
|
83
|
-
if current_line == line_num {
|
|
84
|
-
start_byte = i + 1;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// If we're looking for the last line and it doesn't end with a newline
|
|
90
|
-
if current_line == line_num {
|
|
91
|
-
return start_byte..content.len();
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
// Fallback if line not found (shouldn't happen)
|
|
95
|
-
0..0
|
|
96
|
-
}
|
|
97
72
|
}
|
|
98
73
|
|
|
99
74
|
impl Rule for MD021NoMultipleSpaceClosedAtx {
|
|
@@ -149,6 +124,7 @@ impl Rule for MD021NoMultipleSpaceClosedAtx {
|
|
|
149
124
|
return Ok(Vec::new());
|
|
150
125
|
}
|
|
151
126
|
|
|
127
|
+
let line_index = LineIndex::new(ctx.content.to_string());
|
|
152
128
|
let mut warnings = Vec::new();
|
|
153
129
|
let lines: Vec<&str> = ctx.content.lines().collect();
|
|
154
130
|
|
|
@@ -191,28 +167,30 @@ impl Rule for MD021NoMultipleSpaceClosedAtx {
|
|
|
191
167
|
)
|
|
192
168
|
};
|
|
193
169
|
|
|
194
|
-
let line_range = self.get_line_byte_range(ctx.content, line_num);
|
|
195
|
-
|
|
196
170
|
// Calculate precise character range for the extra spaces
|
|
197
171
|
let start_col;
|
|
198
172
|
let length;
|
|
173
|
+
let replacement;
|
|
199
174
|
|
|
200
175
|
if start_spaces > 1 && end_spaces > 1 {
|
|
201
|
-
//
|
|
176
|
+
// Fix the extra spaces at the start (after opening hashes)
|
|
202
177
|
let opening_hashes = captures.get(2).unwrap();
|
|
203
178
|
start_col = opening_hashes.end() + 2; // After hash + first space
|
|
204
179
|
length = start_spaces - 1; // Extra spaces only
|
|
180
|
+
replacement = String::new(); // Remove extra spaces
|
|
205
181
|
} else if start_spaces > 1 {
|
|
206
|
-
//
|
|
182
|
+
// Fix the extra spaces after opening hashes
|
|
207
183
|
let opening_hashes = captures.get(2).unwrap();
|
|
208
184
|
start_col = opening_hashes.end() + 2; // After hash + first space
|
|
209
185
|
length = start_spaces - 1; // Extra spaces only
|
|
186
|
+
replacement = String::new(); // Remove extra spaces
|
|
210
187
|
} else {
|
|
211
|
-
//
|
|
188
|
+
// Fix the extra spaces before closing hashes
|
|
212
189
|
let content = captures.get(4).unwrap();
|
|
213
190
|
start_col = content.end() + 2; // After content + first space
|
|
214
191
|
length = end_spaces - 1; // Extra spaces only
|
|
215
|
-
|
|
192
|
+
replacement = String::new(); // Remove extra spaces
|
|
193
|
+
};
|
|
216
194
|
|
|
217
195
|
let (start_line, start_col_calc, end_line, end_col) =
|
|
218
196
|
calculate_single_line_range(line_num, start_col, length);
|
|
@@ -226,8 +204,8 @@ impl Rule for MD021NoMultipleSpaceClosedAtx {
|
|
|
226
204
|
end_column: end_col,
|
|
227
205
|
severity: Severity::Warning,
|
|
228
206
|
fix: Some(Fix {
|
|
229
|
-
range:
|
|
230
|
-
replacement
|
|
207
|
+
range: line_index.line_col_to_byte_range(start_line, start_col_calc),
|
|
208
|
+
replacement,
|
|
231
209
|
}),
|
|
232
210
|
});
|
|
233
211
|
}
|
|
@@ -81,13 +81,12 @@ impl Rule for MD023HeadingStartLeft {
|
|
|
81
81
|
end_column: end_col,
|
|
82
82
|
severity: Severity::Warning,
|
|
83
83
|
message: format!(
|
|
84
|
-
"Setext heading should not be indented by {
|
|
85
|
-
} spaces",
|
|
84
|
+
"Setext heading should not be indented by {} spaces",
|
|
86
85
|
indentation
|
|
87
86
|
),
|
|
88
87
|
fix: Some(Fix {
|
|
89
|
-
range: line_index.line_col_to_byte_range(start_line + 1,
|
|
90
|
-
replacement:
|
|
88
|
+
range: line_index.line_col_to_byte_range(start_line + 1, start_col),
|
|
89
|
+
replacement: String::new(), // Remove the indentation
|
|
91
90
|
}),
|
|
92
91
|
});
|
|
93
92
|
|
|
@@ -117,8 +116,8 @@ impl Rule for MD023HeadingStartLeft {
|
|
|
117
116
|
message: "Setext heading underline should not be indented"
|
|
118
117
|
.to_string(),
|
|
119
118
|
fix: Some(Fix {
|
|
120
|
-
range: line_index.line_col_to_byte_range(underline_line + 1,
|
|
121
|
-
replacement:
|
|
119
|
+
range: line_index.line_col_to_byte_range(underline_line + 1, underline_start_col),
|
|
120
|
+
replacement: String::new(), // Remove the indentation
|
|
122
121
|
}),
|
|
123
122
|
});
|
|
124
123
|
}
|
|
@@ -168,13 +167,12 @@ impl Rule for MD023HeadingStartLeft {
|
|
|
168
167
|
end_column: atx_end_col,
|
|
169
168
|
severity: Severity::Warning,
|
|
170
169
|
message: format!(
|
|
171
|
-
"Heading should not be indented by {
|
|
172
|
-
} spaces",
|
|
170
|
+
"Heading should not be indented by {} spaces",
|
|
173
171
|
indentation
|
|
174
172
|
),
|
|
175
173
|
fix: Some(Fix {
|
|
176
|
-
range: line_index.line_col_to_byte_range(start_line + 1,
|
|
177
|
-
replacement:
|
|
174
|
+
range: line_index.line_col_to_byte_range(start_line + 1, atx_start_col),
|
|
175
|
+
replacement: String::new(), // Remove the indentation
|
|
178
176
|
}),
|
|
179
177
|
});
|
|
180
178
|
}
|
|
@@ -350,13 +348,12 @@ impl Rule for MD023HeadingStartLeft {
|
|
|
350
348
|
end_column: setext_end_col,
|
|
351
349
|
severity: Severity::Warning,
|
|
352
350
|
message: format!(
|
|
353
|
-
"Setext heading should not be indented by {
|
|
354
|
-
} spaces",
|
|
351
|
+
"Setext heading should not be indented by {} spaces",
|
|
355
352
|
indentation
|
|
356
353
|
),
|
|
357
354
|
fix: Some(Fix {
|
|
358
|
-
range: line_index.line_col_to_byte_range(line_num,
|
|
359
|
-
replacement:
|
|
355
|
+
range: line_index.line_col_to_byte_range(line_num, setext_start_col),
|
|
356
|
+
replacement: String::new(), // Remove the indentation
|
|
360
357
|
}),
|
|
361
358
|
});
|
|
362
359
|
|
|
@@ -387,8 +384,8 @@ impl Rule for MD023HeadingStartLeft {
|
|
|
387
384
|
.to_string(),
|
|
388
385
|
fix: Some(Fix {
|
|
389
386
|
range: line_index
|
|
390
|
-
.line_col_to_byte_range(underline_line_idx + 1,
|
|
391
|
-
replacement:
|
|
387
|
+
.line_col_to_byte_range(underline_line_idx + 1, underline_start_col_struct),
|
|
388
|
+
replacement: String::new(), // Remove the indentation
|
|
392
389
|
}),
|
|
393
390
|
});
|
|
394
391
|
}
|
|
@@ -450,13 +447,12 @@ impl Rule for MD023HeadingStartLeft {
|
|
|
450
447
|
end_column: atx_end_col_struct,
|
|
451
448
|
severity: Severity::Warning,
|
|
452
449
|
message: format!(
|
|
453
|
-
"Heading should not be indented by {
|
|
454
|
-
} spaces",
|
|
450
|
+
"Heading should not be indented by {} spaces",
|
|
455
451
|
indentation
|
|
456
452
|
),
|
|
457
453
|
fix: Some(Fix {
|
|
458
|
-
range: line_index.line_col_to_byte_range(line_num,
|
|
459
|
-
replacement:
|
|
454
|
+
range: line_index.line_col_to_byte_range(line_num, atx_start_col_struct),
|
|
455
|
+
replacement: String::new(), // Remove the indentation
|
|
460
456
|
}),
|
|
461
457
|
});
|
|
462
458
|
}
|
|
@@ -83,8 +83,8 @@ impl Rule for MD027MultipleSpacesBlockquote {
|
|
|
83
83
|
message: "Multiple spaces after blockquote symbol".to_string(),
|
|
84
84
|
severity: Severity::Warning,
|
|
85
85
|
fix: Some(Fix {
|
|
86
|
-
range: _line_index.line_col_to_byte_range(i + 1,
|
|
87
|
-
replacement:
|
|
86
|
+
range: _line_index.line_col_to_byte_range(i + 1, start_col),
|
|
87
|
+
replacement: " ".to_string(), // Just one space
|
|
88
88
|
}),
|
|
89
89
|
});
|
|
90
90
|
line_processed = true;
|
|
@@ -114,33 +114,21 @@ impl Rule for MD030ListMarkerSpace {
|
|
|
114
114
|
// Calculate precise character range for the problematic spacing
|
|
115
115
|
let marker_end_pos = cap.get(2).map_or(0, |m| m.end());
|
|
116
116
|
let whitespace_start_pos = marker_end_pos;
|
|
117
|
-
let
|
|
118
|
-
|
|
119
|
-
// If we have expected spaces, highlight only the extra ones
|
|
120
|
-
let extra_spaces_start = if whitespace.len() > expected_spaces {
|
|
121
|
-
whitespace_start_pos + expected_spaces
|
|
122
|
-
} else {
|
|
123
|
-
whitespace_start_pos
|
|
124
|
-
};
|
|
125
|
-
let extra_spaces_len = if whitespace.len() > expected_spaces {
|
|
126
|
-
whitespace.len() - expected_spaces
|
|
127
|
-
} else {
|
|
128
|
-
whitespace.len()
|
|
129
|
-
};
|
|
117
|
+
let whitespace_len = whitespace.len();
|
|
130
118
|
|
|
119
|
+
// Calculate the range that needs to be replaced (the entire whitespace after marker)
|
|
131
120
|
let (start_line, start_col, end_line, end_col) =
|
|
132
|
-
calculate_match_range(line_num, line,
|
|
133
|
-
|
|
134
|
-
// Generate the
|
|
135
|
-
let
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
});
|
|
121
|
+
calculate_match_range(line_num, line, whitespace_start_pos, whitespace_len);
|
|
122
|
+
|
|
123
|
+
// Generate the correct replacement text (just the correct spacing)
|
|
124
|
+
let correct_spaces = " ".repeat(expected_spaces);
|
|
125
|
+
let fix = Some(crate::rule::Fix {
|
|
126
|
+
range: crate::utils::range_utils::LineIndex::new(
|
|
127
|
+
ctx.content.to_string(),
|
|
128
|
+
)
|
|
129
|
+
.line_col_to_byte_range(line_num, start_col),
|
|
130
|
+
replacement: correct_spaces,
|
|
131
|
+
});
|
|
144
132
|
|
|
145
133
|
warnings.push(LintWarning {
|
|
146
134
|
rule_name: Some(self.name()),
|
|
@@ -231,6 +231,12 @@ fn has_spacing_issues(span: &EmphasisSpan) -> bool {
|
|
|
231
231
|
#[derive(Clone)]
|
|
232
232
|
pub struct MD037NoSpaceInEmphasis;
|
|
233
233
|
|
|
234
|
+
impl Default for MD037NoSpaceInEmphasis {
|
|
235
|
+
fn default() -> Self {
|
|
236
|
+
Self
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
234
240
|
impl Rule for MD037NoSpaceInEmphasis {
|
|
235
241
|
fn name(&self) -> &'static str {
|
|
236
242
|
"MD037"
|
|
@@ -11,7 +11,7 @@ fn test_md006_start_bullets() {
|
|
|
11
11
|
let test = simple_test(
|
|
12
12
|
"MD006",
|
|
13
13
|
" - Indented bullet",
|
|
14
|
-
ExpectedWarning::new(1,
|
|
14
|
+
ExpectedWarning::new(1, 1, 1, 4, " -"),
|
|
15
15
|
);
|
|
16
16
|
test_character_ranges(test);
|
|
17
17
|
}
|
|
@@ -121,7 +121,7 @@ fn test_md030_list_marker_space() {
|
|
|
121
121
|
let test = simple_test(
|
|
122
122
|
"MD030",
|
|
123
123
|
"- Two spaces",
|
|
124
|
-
ExpectedWarning::new(1,
|
|
124
|
+
ExpectedWarning::new(1, 2, 1, 4, " "),
|
|
125
125
|
);
|
|
126
126
|
test_character_ranges(test);
|
|
127
127
|
}
|
|
@@ -19,7 +19,7 @@ fn test_invalid_atx_headings() {
|
|
|
19
19
|
let result = rule.check(&ctx).unwrap();
|
|
20
20
|
assert_eq!(result.len(), 3);
|
|
21
21
|
assert_eq!(result[0].line, 1);
|
|
22
|
-
assert_eq!(result[0].column,
|
|
22
|
+
assert_eq!(result[0].column, 2);
|
|
23
23
|
assert_eq!(
|
|
24
24
|
result[0].message,
|
|
25
25
|
"Multiple spaces (2) after # in ATX style heading"
|