rumdl 0.0.69__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.69 → rumdl-0.0.71}/Cargo.lock +1 -1
- {rumdl-0.0.69 → rumdl-0.0.71}/Cargo.toml +1 -1
- {rumdl-0.0.69 → rumdl-0.0.71}/PKG-INFO +1 -1
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md006_start_bullets.rs +55 -35
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md012_no_multiple_blanks.rs +55 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md030_list_marker_space.rs +10 -2
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md012_test.rs +92 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md030_test.rs +35 -7
- {rumdl-0.0.69 → rumdl-0.0.71}/.rumdl.toml +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/MANIFEST.in +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/Makefile +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/README.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/assets/logo.png +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/benches/fix_performance.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/benches/range_performance.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/benches/range_utils_benchmark.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/benches/rule_performance.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/benches/simple_fix_bench.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/RULES.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md001.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md002.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md003.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md004.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md005.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md006.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md007.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md009.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md010.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md011.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md012.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md013.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md014.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md018.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md019.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md020.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md021.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md022.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md023.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md024.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md025.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md026.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md027.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md028.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md029.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md030.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md031.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md032.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md033.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md034.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md035.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md036.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md037.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md038.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md039.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md040.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md041.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md042.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md043.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md044.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md045.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md046.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md047.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md048.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md049.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md050.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md051.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md052.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md053.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md054.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md055.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md056.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md057.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/docs/md058.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/issues/plan-rule-parity-with-markdownlint.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/parity_check.py +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/pyproject.toml +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/python/MANIFEST.in +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/python/PYTHON-README.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/python/rumdl/__init__.py +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/python/rumdl/__main__.py +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/python/rumdl/py.typed +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/rumdl.toml.example +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/config.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/init.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/lib.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/lint_context.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/lsp/mod.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/lsp/server.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/lsp/types.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/main.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/markdownlint_config.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/parallel.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/performance.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/profiling.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/python.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rule.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/blockquote_utils.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/code_block_utils.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/code_fence_utils.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/emphasis_style.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/front_matter_utils.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/heading_utils.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/list_utils.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md001_heading_increment.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md002_first_heading_h1.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md003_heading_style.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md004_unordered_list_style.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md005_list_indent.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md007_ul_indent.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md009_trailing_spaces.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md010_no_hard_tabs.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md011_no_reversed_links.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md013_line_length.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md014_commands_show_output.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md018_no_missing_space_atx.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md019_no_multiple_space_atx.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md022_blanks_around_headings.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md023_heading_start_left.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md024_no_duplicate_heading.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md025_single_title.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md026_no_trailing_punctuation.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md028_no_blanks_blockquote.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md029_ordered_list_prefix.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md031_blanks_around_fences.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md032_blanks_around_lists.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md033_no_inline_html.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md034_no_bare_urls.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md035_hr_style.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md036_no_emphasis_only_first.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md037_spaces_around_emphasis.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md038_no_space_in_code.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md039_no_space_in_links.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md040_fenced_code_language.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md041_first_line_heading.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md042_no_empty_links.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md043_required_headings.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md044_proper_names.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md045_no_alt_text.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md046_code_block_style.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md047_single_trailing_newline.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md048_code_fence_style.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md049_emphasis_style.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md050_strong_style.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md051_link_fragments.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md052_reference_links_images.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md053_link_image_reference_definitions.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md054_link_image_style.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md055_table_pipe_style.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md056_table_column_count.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md057_existing_relative_links.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/md058_blanks_around_tables.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/mod.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/rules/strong_style.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/utils/ast_utils.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/utils/code_block_utils.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/utils/document_structure.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/utils/early_returns.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/utils/element_cache.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/utils/markdown_elements.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/utils/mod.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/utils/range_utils.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/utils/regex_cache.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/utils/string_interner.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/src/utils/table_utils.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/advanced_integration_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/character_ranges/additional_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/character_ranges/basic_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/character_ranges/comprehensive_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/character_ranges/extended_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/character_ranges/mod.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/character_ranges/unicode_utils.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/cli_duplication_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/cli_integration_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/commonmark_compliance_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/comprehensive_integration_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/config_application_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/config_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/init_command_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/init_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/integration_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/json_output_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/lib.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/lsp_integration_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/lsp_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/markdownlint_cli_integration.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/markdownlint_config_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/md030_edge_cases.md +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/output_format_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/perf_check.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/pyproject_config_tests.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md001_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md001_unicode_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md002_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md003_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md004_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md005_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md006_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md006_unicode_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md007_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md009_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md010_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md011_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md013_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md014_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md018_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md019_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md020_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md021_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md022_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md023_extended_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md023_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md024_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md025_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md026_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md027_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md028_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md029_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md031_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md032_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md033_extended_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md033_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md034_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md035_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md036_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md037_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md038_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md039_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md040_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md041_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md042_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md043_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md044_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md045_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md046_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md047_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md048_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md049_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md050_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md051_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md052_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md053_additional_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md053_proptest.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md053_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md054_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md054_unicode_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md055_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md056_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md057_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/md058_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/rules/mod.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/utils/blockquote_utils_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/utils/code_block_utils_extended_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/utils/code_block_utils_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/utils/core_utils_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/utils/front_matter_utils_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/utils/line_index_test.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/utils/mod.rs +0 -0
- {rumdl-0.0.69 → rumdl-0.0.71}/tests/utils_markdown_edge_cases.rs +0 -0
- {rumdl-0.0.69 → 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
|
}
|
|
@@ -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
|
|
|
@@ -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
|
}
|
|
@@ -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
|
+
}
|
|
@@ -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
|