rumdl 0.0.69__tar.gz → 0.0.70__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.69 → rumdl-0.0.70}/Cargo.lock +1 -1
- {rumdl-0.0.69 → rumdl-0.0.70}/Cargo.toml +1 -1
- {rumdl-0.0.69 → rumdl-0.0.70}/PKG-INFO +1 -1
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md012_no_multiple_blanks.rs +55 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md012_test.rs +92 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/.rumdl.toml +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/MANIFEST.in +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/Makefile +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/README.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/assets/logo.png +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/benches/fix_performance.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/benches/range_performance.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/benches/range_utils_benchmark.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/benches/rule_performance.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/benches/simple_fix_bench.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/RULES.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md001.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md002.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md003.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md004.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md005.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md006.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md007.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md009.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md010.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md011.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md012.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md013.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md014.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md018.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md019.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md020.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md021.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md022.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md023.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md024.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md025.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md026.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md027.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md028.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md029.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md030.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md031.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md032.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md033.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md034.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md035.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md036.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md037.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md038.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md039.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md040.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md041.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md042.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md043.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md044.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md045.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md046.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md047.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md048.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md049.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md050.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md051.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md052.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md053.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md054.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md055.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md056.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md057.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/docs/md058.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/issues/plan-rule-parity-with-markdownlint.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/parity_check.py +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/pyproject.toml +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/python/MANIFEST.in +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/python/PYTHON-README.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/python/rumdl/__init__.py +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/python/rumdl/__main__.py +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/python/rumdl/py.typed +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/rumdl.toml.example +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/config.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/init.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/lib.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/lint_context.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/lsp/mod.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/lsp/server.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/lsp/types.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/main.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/markdownlint_config.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/parallel.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/performance.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/profiling.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/python.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rule.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/blockquote_utils.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/code_block_utils.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/code_fence_utils.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/emphasis_style.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/front_matter_utils.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/heading_utils.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/list_utils.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md001_heading_increment.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md002_first_heading_h1.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md003_heading_style.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md004_unordered_list_style.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md005_list_indent.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md006_start_bullets.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md007_ul_indent.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md009_trailing_spaces.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md010_no_hard_tabs.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md011_no_reversed_links.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md013_line_length.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md014_commands_show_output.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md018_no_missing_space_atx.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md019_no_multiple_space_atx.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md022_blanks_around_headings.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md023_heading_start_left.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md024_no_duplicate_heading.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md025_single_title.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md026_no_trailing_punctuation.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md028_no_blanks_blockquote.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md029_ordered_list_prefix.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md030_list_marker_space.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md031_blanks_around_fences.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md032_blanks_around_lists.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md033_no_inline_html.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md034_no_bare_urls.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md035_hr_style.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md036_no_emphasis_only_first.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md037_spaces_around_emphasis.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md038_no_space_in_code.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md039_no_space_in_links.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md040_fenced_code_language.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md041_first_line_heading.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md042_no_empty_links.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md043_required_headings.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md044_proper_names.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md045_no_alt_text.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md046_code_block_style.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md047_single_trailing_newline.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md048_code_fence_style.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md049_emphasis_style.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md050_strong_style.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md051_link_fragments.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md052_reference_links_images.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md053_link_image_reference_definitions.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md054_link_image_style.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md055_table_pipe_style.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md056_table_column_count.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md057_existing_relative_links.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md058_blanks_around_tables.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/mod.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/strong_style.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/utils/ast_utils.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/utils/code_block_utils.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/utils/document_structure.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/utils/early_returns.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/utils/element_cache.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/utils/markdown_elements.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/utils/mod.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/utils/range_utils.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/utils/regex_cache.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/utils/string_interner.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/src/utils/table_utils.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/advanced_integration_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/character_ranges/additional_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/character_ranges/basic_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/character_ranges/comprehensive_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/character_ranges/extended_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/character_ranges/mod.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/character_ranges/unicode_utils.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/cli_duplication_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/cli_integration_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/commonmark_compliance_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/comprehensive_integration_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/config_application_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/config_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/init_command_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/init_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/integration_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/json_output_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/lib.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/lsp_integration_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/lsp_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/markdownlint_cli_integration.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/markdownlint_config_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/md030_edge_cases.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/output_format_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/perf_check.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/pyproject_config_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md001_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md001_unicode_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md002_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md003_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md004_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md005_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md006_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md006_unicode_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md007_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md009_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md010_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md011_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md013_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md014_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md018_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md019_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md020_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md021_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md022_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md023_extended_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md023_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md024_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md025_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md026_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md027_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md028_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md029_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md030_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md031_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md032_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md033_extended_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md033_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md034_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md035_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md036_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md037_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md038_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md039_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md040_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md041_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md042_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md043_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md044_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md045_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md046_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md047_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md048_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md049_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md050_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md051_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md052_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md053_additional_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md053_proptest.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md053_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md054_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md054_unicode_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md055_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md056_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md057_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md058_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/mod.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/utils/blockquote_utils_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/utils/code_block_utils_extended_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/utils/code_block_utils_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/utils/core_utils_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/utils/front_matter_utils_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/utils/line_index_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/utils/mod.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/utils_markdown_edge_cases.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.70}/tests/utils_tests.rs +0 -0
|
@@ -23,6 +23,19 @@ impl MD012NoMultipleBlanks {
|
|
|
23
23
|
Self { maximum }
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
#[cfg(test)]
|
|
27
|
+
pub fn debug_regions(lines: &[&str]) -> (Vec<(usize, usize)>, Vec<(usize, usize)>) {
|
|
28
|
+
let code_regions = Self::compute_code_block_regions(lines);
|
|
29
|
+
let front_matter_regions = Self::compute_front_matter_regions(lines);
|
|
30
|
+
println!("Lines:");
|
|
31
|
+
for (i, line) in lines.iter().enumerate() {
|
|
32
|
+
println!(" {}: {:?}", i, line);
|
|
33
|
+
}
|
|
34
|
+
println!("Code block regions: {:?}", code_regions);
|
|
35
|
+
println!("Front matter regions: {:?}", front_matter_regions);
|
|
36
|
+
(code_regions, front_matter_regions)
|
|
37
|
+
}
|
|
38
|
+
|
|
26
39
|
/// Pre-compute code block regions for efficient lookup
|
|
27
40
|
fn compute_code_block_regions(lines: &[&str]) -> Vec<(usize, usize)> {
|
|
28
41
|
let mut regions = Vec::new();
|
|
@@ -48,6 +61,43 @@ impl MD012NoMultipleBlanks {
|
|
|
48
61
|
regions.push((start_line, lines.len() - 1));
|
|
49
62
|
}
|
|
50
63
|
|
|
64
|
+
// Second pass: detect indented code blocks (4+ spaces)
|
|
65
|
+
let mut in_indented_block = false;
|
|
66
|
+
let mut indented_start = 0;
|
|
67
|
+
|
|
68
|
+
for (i, line) in lines.iter().enumerate() {
|
|
69
|
+
// Skip lines that are already in fenced code blocks
|
|
70
|
+
if Self::is_in_regions(i, ®ions) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
let is_indented_code = line.len() >= 4 && line.starts_with(" ") && !line.trim().is_empty();
|
|
75
|
+
let is_blank = line.trim().is_empty();
|
|
76
|
+
|
|
77
|
+
if is_indented_code {
|
|
78
|
+
if !in_indented_block {
|
|
79
|
+
// Start of indented code block
|
|
80
|
+
indented_start = i;
|
|
81
|
+
in_indented_block = true;
|
|
82
|
+
}
|
|
83
|
+
} else if !is_blank {
|
|
84
|
+
// Non-blank, non-indented line ends the indented code block
|
|
85
|
+
if in_indented_block {
|
|
86
|
+
regions.push((indented_start, i - 1));
|
|
87
|
+
in_indented_block = false;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Blank lines don't end indented code blocks, they're part of them
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Handle indented code block at end of file
|
|
94
|
+
if in_indented_block {
|
|
95
|
+
regions.push((indented_start, lines.len() - 1));
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Sort regions by start position
|
|
99
|
+
regions.sort_by(|a, b| a.0.cmp(&b.0));
|
|
100
|
+
|
|
51
101
|
regions
|
|
52
102
|
}
|
|
53
103
|
|
|
@@ -130,6 +180,11 @@ impl Rule for MD012NoMultipleBlanks {
|
|
|
130
180
|
if Self::is_in_regions(line_num, &code_block_regions)
|
|
131
181
|
|| Self::is_in_regions(line_num, &front_matter_regions)
|
|
132
182
|
{
|
|
183
|
+
// Reset blank line counting when entering a code block or front matter
|
|
184
|
+
// to prevent counting blank lines across block boundaries
|
|
185
|
+
if blank_count > 0 {
|
|
186
|
+
blank_count = 0;
|
|
187
|
+
}
|
|
133
188
|
continue;
|
|
134
189
|
}
|
|
135
190
|
|
|
@@ -131,3 +131,95 @@ fn test_md012_whitespace_lines() {
|
|
|
131
131
|
"Multiple consecutive blank lines between content (Expected: 1; Actual: 2)"
|
|
132
132
|
);
|
|
133
133
|
}
|
|
134
|
+
|
|
135
|
+
#[test]
|
|
136
|
+
fn test_md012_indented_code_blocks() {
|
|
137
|
+
let rule = MD012NoMultipleBlanks::default();
|
|
138
|
+
let content = "Line 1\n\n code block\n\n more code\n\nLine 2\n";
|
|
139
|
+
let ctx = LintContext::new(content);
|
|
140
|
+
let result = rule.check(&ctx).unwrap();
|
|
141
|
+
assert!(result.is_empty()); // Multiple blank lines in indented code blocks are allowed
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
#[test]
|
|
145
|
+
fn test_md012_indented_fenced_code_blocks() {
|
|
146
|
+
let rule = MD012NoMultipleBlanks::default();
|
|
147
|
+
let content = "Text\n\n ```bash\n code\n ```\n\nMore text\n";
|
|
148
|
+
let ctx = LintContext::new(content);
|
|
149
|
+
let result = rule.check(&ctx).unwrap();
|
|
150
|
+
assert!(result.is_empty()); // Should not flag blank lines around indented fenced code blocks
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
#[test]
|
|
154
|
+
fn test_md012_debug_indented_fenced() {
|
|
155
|
+
let content = "Text\n\n ```bash\n code\n ```\n\nMore text\n";
|
|
156
|
+
let lines: Vec<&str> = content.lines().collect();
|
|
157
|
+
|
|
158
|
+
// Debug the regions
|
|
159
|
+
println!("Lines:");
|
|
160
|
+
for (i, line) in lines.iter().enumerate() {
|
|
161
|
+
println!(" {}: {:?}", i, line);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Test the rule
|
|
165
|
+
let rule = MD012NoMultipleBlanks::default();
|
|
166
|
+
let ctx = LintContext::new(content);
|
|
167
|
+
let result = rule.check(&ctx).unwrap();
|
|
168
|
+
|
|
169
|
+
println!("Warnings: {:?}", result);
|
|
170
|
+
for warning in &result {
|
|
171
|
+
println!(" Line {}: {}", warning.line, warning.message);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// This should pass but currently fails
|
|
175
|
+
assert!(result.is_empty(), "Expected no warnings, got: {:?}", result);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
#[test]
|
|
179
|
+
fn test_md012_contributing_pattern() {
|
|
180
|
+
// This reproduces the exact pattern from the CONTRIBUTING file that's causing false positives
|
|
181
|
+
let content = "To set up the MLflow repository, run the following commands:\n\n ```bash\n # Clone the repository\n git clone --recurse-submodules git@github.com:<username>/mlflow.git\n # The alternative way of cloning through https may cause permission error during branch push\n";
|
|
182
|
+
|
|
183
|
+
let rule = MD012NoMultipleBlanks::default();
|
|
184
|
+
let ctx = LintContext::new(content);
|
|
185
|
+
let result = rule.check(&ctx).unwrap();
|
|
186
|
+
|
|
187
|
+
println!("Content lines:");
|
|
188
|
+
for (i, line) in content.lines().enumerate() {
|
|
189
|
+
println!(" {}: {:?}", i, line);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
println!("Warnings: {:?}", result);
|
|
193
|
+
for warning in &result {
|
|
194
|
+
println!(" Line {}: {}", warning.line, warning.message);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// This should pass - there's only 1 blank line before the indented fenced code block
|
|
198
|
+
assert!(result.is_empty(), "Expected no warnings, got: {:?}", result);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
#[test]
|
|
202
|
+
fn test_md012_region_calculation() {
|
|
203
|
+
// Test with a simple fenced code block to debug region calculation
|
|
204
|
+
let content = "Text\n\n```bash\ncode\n```\n\nMore text\n";
|
|
205
|
+
let lines: Vec<&str> = content.lines().collect();
|
|
206
|
+
|
|
207
|
+
println!("Lines:");
|
|
208
|
+
for (i, line) in lines.iter().enumerate() {
|
|
209
|
+
println!(" {}: {:?}", i, line);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// We need to access the compute_code_block_regions function somehow
|
|
213
|
+
// For now, let's just test the rule behavior
|
|
214
|
+
let rule = MD012NoMultipleBlanks::default();
|
|
215
|
+
let ctx = LintContext::new(content);
|
|
216
|
+
let result = rule.check(&ctx).unwrap();
|
|
217
|
+
|
|
218
|
+
println!("Warnings: {:?}", result);
|
|
219
|
+
for warning in &result {
|
|
220
|
+
println!(" Line {}: {}", warning.line, warning.message);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// This should pass - there's only 1 blank line before and after the code block
|
|
224
|
+
assert!(result.is_empty(), "Expected no warnings, got: {:?}", result);
|
|
225
|
+
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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
|