rumdl 0.0.55__tar.gz → 0.0.57__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.55 → rumdl-0.0.57}/Cargo.lock +1 -1
- {rumdl-0.0.55 → rumdl-0.0.57}/Cargo.toml +1 -1
- {rumdl-0.0.55 → rumdl-0.0.57}/PKG-INFO +1 -1
- {rumdl-0.0.55 → rumdl-0.0.57}/benches/rule_performance.rs +14 -24
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/RULES.md +1 -2
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md030.md +4 -2
- rumdl-0.0.57/parity_check.py +211 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/config.rs +85 -44
- {rumdl-0.0.55 → rumdl-0.0.57}/src/lib.rs +4 -5
- {rumdl-0.0.55 → rumdl-0.0.57}/src/main.rs +88 -24
- {rumdl-0.0.55 → rumdl-0.0.57}/src/markdownlint_config.rs +1 -5
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rule.rs +4 -3
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/emphasis_style.rs +1 -1
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md003_heading_style.rs +16 -25
- rumdl-0.0.57/src/rules/md004_unordered_list_style.rs +445 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md007_ul_indent.rs +90 -28
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md012_no_multiple_blanks.rs +38 -29
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md013_line_length.rs +57 -42
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md025_single_title.rs +26 -19
- rumdl-0.0.57/src/rules/md030_list_marker_space.rs +226 -0
- rumdl-0.0.57/src/rules/md032_blanks_around_lists.rs +588 -0
- rumdl-0.0.57/src/rules/md033_no_inline_html.rs +469 -0
- rumdl-0.0.57/src/rules/md034_no_bare_urls.rs +469 -0
- rumdl-0.0.57/src/rules/md039_no_space_in_links.rs +466 -0
- rumdl-0.0.57/src/rules/md049_emphasis_style.rs +303 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md055_table_pipe_style.rs +2 -2
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/mod.rs +1 -15
- {rumdl-0.0.55 → rumdl-0.0.57}/src/utils/document_structure.rs +214 -16
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/advanced_integration_tests.rs +33 -29
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/config_application_tests.rs +8 -7
- rumdl-0.0.57/tests/config_tests.rs +859 -0
- rumdl-0.0.57/tests/integration_tests.rs +18 -0
- rumdl-0.0.57/tests/json_output_test.rs +34 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/perf_check.rs +5 -1
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md004_test.rs +167 -119
- rumdl-0.0.57/tests/rules/md007_test.rs +292 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md012_test.rs +27 -12
- rumdl-0.0.57/tests/rules/md013_test.rs +263 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md025_test.rs +4 -3
- rumdl-0.0.57/tests/rules/md030_test.rs +194 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md032_test.rs +104 -1
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md033_test.rs +27 -25
- rumdl-0.0.57/tests/rules/md034_test.rs +486 -0
- rumdl-0.0.57/tests/rules/md039_test.rs +296 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/mod.rs +0 -2
- rumdl-0.0.55/docs/md008.md +0 -119
- rumdl-0.0.55/docs/md015.md +0 -93
- rumdl-0.0.55/src/rules/md004_unordered_list_style.rs +0 -361
- rumdl-0.0.55/src/rules/md008_ul_style.rs +0 -520
- rumdl-0.0.55/src/rules/md015_no_missing_space_after_list_marker.rs +0 -157
- rumdl-0.0.55/src/rules/md030_list_marker_space.rs +0 -428
- rumdl-0.0.55/src/rules/md032_blanks_around_lists.rs +0 -418
- rumdl-0.0.55/src/rules/md033_no_inline_html.rs +0 -400
- rumdl-0.0.55/src/rules/md034_no_bare_urls.rs +0 -328
- rumdl-0.0.55/src/rules/md039_no_space_in_links.rs +0 -365
- rumdl-0.0.55/src/rules/md049_emphasis_style.rs +0 -375
- rumdl-0.0.55/tests/config_tests.rs +0 -472
- rumdl-0.0.55/tests/integration_tests.rs +0 -40
- rumdl-0.0.55/tests/rules/md007_test.rs +0 -127
- rumdl-0.0.55/tests/rules/md008_test.rs +0 -318
- rumdl-0.0.55/tests/rules/md013_test.rs +0 -128
- rumdl-0.0.55/tests/rules/md015_proptest.rs +0 -23
- rumdl-0.0.55/tests/rules/md015_test.rs +0 -243
- rumdl-0.0.55/tests/rules/md030_test.rs +0 -48
- rumdl-0.0.55/tests/rules/md034_test.rs +0 -255
- rumdl-0.0.55/tests/rules/md039_test.rs +0 -89
- {rumdl-0.0.55 → rumdl-0.0.57}/.rumdl.toml +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/MANIFEST.in +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/Makefile +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/README.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/assets/logo.png +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/benches/range_performance.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/benches/range_utils_benchmark.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md001.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md002.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md003.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md004.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md005.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md006.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md007.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md009.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md010.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md011.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md012.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md013.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md014.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md018.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md019.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md020.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md021.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md022.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md023.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md024.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md025.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md026.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md027.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md028.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md029.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md031.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md032.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md033.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md034.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md035.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md036.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md037.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md038.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md039.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md040.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md041.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md042.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md043.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md044.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md045.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md046.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md047.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md048.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md049.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md050.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md051.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md052.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md053.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md054.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md055.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md056.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md057.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/docs/md058.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/issues/plan-rule-parity-with-markdownlint.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/pyproject.toml +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/python/MANIFEST.in +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/python/PYTHON-README.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/python/rumdl/__init__.py +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/python/rumdl/__main__.py +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/python/rumdl/py.typed +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/rumdl.toml.example +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/init.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/lint_context.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/profiling.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/python.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/blockquote_utils.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/code_block_utils.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/code_fence_utils.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/front_matter_utils.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/heading_utils.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/list_utils.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md001_heading_increment.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md002_first_heading_h1.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md005_list_indent.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md006_start_bullets.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md009_trailing_spaces.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md010_no_hard_tabs.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md011_no_reversed_links.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md014_commands_show_output.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md018_no_missing_space_atx.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md019_no_multiple_space_atx.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md022_blanks_around_headings.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md023_heading_start_left.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md024_no_duplicate_heading.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md026_no_trailing_punctuation.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md028_no_blanks_blockquote.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md029_ordered_list_prefix.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md031_blanks_around_fences.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md035_hr_style.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md036_no_emphasis_only_first.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md037_spaces_around_emphasis.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md038_no_space_in_code.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md040_fenced_code_language.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md041_first_line_heading.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md042_no_empty_links.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md043_required_headings.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md044_proper_names.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md045_no_alt_text.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md046_code_block_style.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md047_single_trailing_newline.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md048_code_fence_style.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md050_strong_style.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md051_link_fragments.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md052_reference_links_images.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md053_link_image_reference_definitions.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md054_link_image_style.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md056_table_column_count.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md057_existing_relative_links.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md058_blanks_around_tables.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/strong_style.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/utils/code_block_utils.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/utils/early_returns.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/utils/element_cache.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/utils/markdown_elements.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/utils/mod.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/utils/range_utils.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/src/utils/regex_cache.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/cli_duplication_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/cli_integration_tests.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/commonmark_compliance_tests.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/comprehensive_integration_tests.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/init_command_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/init_tests.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/lib.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/markdownlint_cli_integration.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/markdownlint_config_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/md030_edge_cases.md +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/output_format_tests.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/pyproject_config_tests.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md001_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md001_unicode_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md002_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md003_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md005_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md006_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md006_unicode_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md009_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md010_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md011_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md014_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md018_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md019_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md020_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md021_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md022_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md023_extended_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md023_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md024_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md026_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md027_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md028_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md029_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md031_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md033_extended_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md035_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md036_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md037_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md038_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md040_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md041_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md042_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md043_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md044_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md045_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md046_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md047_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md048_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md049_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md050_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md051_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md052_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md053_additional_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md053_proptest.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md053_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md054_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md054_unicode_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md055_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md056_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md057_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md058_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/utils/blockquote_utils_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/utils/code_block_utils_extended_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/utils/code_block_utils_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/utils/core_utils_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/utils/front_matter_utils_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/utils/line_index_test.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/utils/mod.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/utils_markdown_edge_cases.rs +0 -0
- {rumdl-0.0.55 → rumdl-0.0.57}/tests/utils_tests.rs +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
use criterion::{black_box, criterion_group, criterion_main, Criterion};
|
|
2
2
|
use rumdl::rule::Rule;
|
|
3
3
|
use rumdl::rules::{
|
|
4
|
-
MD013LineLength,
|
|
5
|
-
|
|
4
|
+
MD013LineLength, MD033NoInlineHtml, MD037NoSpaceInEmphasis, MD044ProperNames, MD051LinkFragments,
|
|
5
|
+
MD053LinkImageReferenceDefinitions,
|
|
6
6
|
};
|
|
7
7
|
|
|
8
8
|
/// Benchmark MD013 rule on a large content with long lines
|
|
@@ -16,20 +16,11 @@ fn bench_md013(c: &mut Criterion) {
|
|
|
16
16
|
let rule = MD013LineLength::default();
|
|
17
17
|
|
|
18
18
|
c.bench_function("MD013 check 100 long lines", |b| {
|
|
19
|
-
b.iter(|| rule.check(
|
|
19
|
+
b.iter(|| rule.check(&rumdl::lint_context::LintContext::new(&content)))
|
|
20
20
|
});
|
|
21
21
|
|
|
22
22
|
c.bench_function("MD013 fix 100 long lines", |b| {
|
|
23
|
-
b.iter(|| rule.fix(
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/// Benchmark MD015 rule on a large content with list items
|
|
28
|
-
fn bench_md015(c: &mut Criterion) {
|
|
29
|
-
let rule = MD015NoMissingSpaceAfterListMarker::new();
|
|
30
|
-
let content = "-Item 1\n*Item 2\n+Item 3".repeat(1000);
|
|
31
|
-
c.bench_function("MD015 fix 1000 items", |b| {
|
|
32
|
-
b.iter(|| rule.fix(black_box(&content)))
|
|
23
|
+
b.iter(|| rule.fix(&rumdl::lint_context::LintContext::new(&content)))
|
|
33
24
|
});
|
|
34
25
|
}
|
|
35
26
|
|
|
@@ -44,7 +35,7 @@ fn bench_md033(c: &mut Criterion) {
|
|
|
44
35
|
let rule = MD033NoInlineHtml::default();
|
|
45
36
|
|
|
46
37
|
c.bench_function("MD033 check 500 HTML tags", |b| {
|
|
47
|
-
b.iter(|| rule.check(
|
|
38
|
+
b.iter(|| rule.check(&rumdl::lint_context::LintContext::new(&content)))
|
|
48
39
|
});
|
|
49
40
|
}
|
|
50
41
|
|
|
@@ -68,11 +59,11 @@ fn bench_md037(c: &mut Criterion) {
|
|
|
68
59
|
let rule = MD037NoSpaceInEmphasis;
|
|
69
60
|
|
|
70
61
|
c.bench_function("MD037 check 500 emphasis markers", |b| {
|
|
71
|
-
b.iter(|| rule.check(
|
|
62
|
+
b.iter(|| rule.check(&rumdl::lint_context::LintContext::new(&content)))
|
|
72
63
|
});
|
|
73
64
|
|
|
74
65
|
c.bench_function("MD037 fix 500 emphasis markers", |b| {
|
|
75
|
-
b.iter(|| rule.fix(
|
|
66
|
+
b.iter(|| rule.fix(&rumdl::lint_context::LintContext::new(&content)))
|
|
76
67
|
});
|
|
77
68
|
}
|
|
78
69
|
|
|
@@ -117,11 +108,11 @@ fn bench_md044(c: &mut Criterion) {
|
|
|
117
108
|
let rule = MD044ProperNames::new(proper_names, true); // true = exclude code blocks
|
|
118
109
|
|
|
119
110
|
c.bench_function("MD044 check 500 proper name occurrences", |b| {
|
|
120
|
-
b.iter(|| rule.check(
|
|
111
|
+
b.iter(|| rule.check(&rumdl::lint_context::LintContext::new(&content)))
|
|
121
112
|
});
|
|
122
113
|
|
|
123
114
|
c.bench_function("MD044 fix 500 proper name occurrences", |b| {
|
|
124
|
-
b.iter(|| rule.fix(
|
|
115
|
+
b.iter(|| rule.fix(&rumdl::lint_context::LintContext::new(&content)))
|
|
125
116
|
});
|
|
126
117
|
}
|
|
127
118
|
|
|
@@ -155,7 +146,7 @@ fn bench_md051(c: &mut Criterion) {
|
|
|
155
146
|
let rule = MD051LinkFragments::new();
|
|
156
147
|
|
|
157
148
|
c.bench_function("MD051 check 500 link fragments", |b| {
|
|
158
|
-
b.iter(|| rule.check(
|
|
149
|
+
b.iter(|| rule.check(&rumdl::lint_context::LintContext::new(&content)))
|
|
159
150
|
});
|
|
160
151
|
}
|
|
161
152
|
|
|
@@ -190,7 +181,7 @@ fn bench_md053(c: &mut Criterion) {
|
|
|
190
181
|
c.bench_function("MD053 check cold cache", |b| {
|
|
191
182
|
b.iter_with_setup(
|
|
192
183
|
MD053LinkImageReferenceDefinitions::default, // Create a new instance for each iteration
|
|
193
|
-
|r| r.check(
|
|
184
|
+
|r| r.check(&rumdl::lint_context::LintContext::new(&content)),
|
|
194
185
|
)
|
|
195
186
|
});
|
|
196
187
|
|
|
@@ -198,21 +189,20 @@ fn bench_md053(c: &mut Criterion) {
|
|
|
198
189
|
c.bench_function("MD053 check warm cache", |b| {
|
|
199
190
|
// First, prime the cache
|
|
200
191
|
let primed_rule = rule.clone();
|
|
201
|
-
let _ = primed_rule.check(&content);
|
|
192
|
+
let _ = primed_rule.check(&rumdl::lint_context::LintContext::new(&content));
|
|
202
193
|
|
|
203
194
|
// Then benchmark with warm cache
|
|
204
|
-
b.iter(|| primed_rule.check(
|
|
195
|
+
b.iter(|| primed_rule.check(&rumdl::lint_context::LintContext::new(&content)))
|
|
205
196
|
});
|
|
206
197
|
|
|
207
198
|
c.bench_function("MD053 fix unused references", |b| {
|
|
208
|
-
b.iter(|| rule.fix(
|
|
199
|
+
b.iter(|| rule.fix(&rumdl::lint_context::LintContext::new(&content)))
|
|
209
200
|
});
|
|
210
201
|
}
|
|
211
202
|
|
|
212
203
|
criterion_group!(
|
|
213
204
|
benches,
|
|
214
205
|
bench_md013,
|
|
215
|
-
bench_md015,
|
|
216
206
|
bench_md033,
|
|
217
207
|
bench_md037,
|
|
218
208
|
bench_md044,
|
|
@@ -82,7 +82,7 @@ Each rule has a brief description and a link to its detailed documentation.
|
|
|
82
82
|
|
|
83
83
|
| Rule ID | Rule Name | Description |
|
|
84
84
|
|---------|-----------|-------------|
|
|
85
|
-
| [MD014](md014.md) | Commands show output |
|
|
85
|
+
| [MD014](md014.md) | Commands show output | Code blocks should show output when appropriate |
|
|
86
86
|
| [MD040](md040.md) | Fenced code language | Fenced code blocks should have a language specified |
|
|
87
87
|
| [MD046](md046.md) | Code block style | Code block style |
|
|
88
88
|
| [MD048](md048.md) | Code fence style | Code fence style |
|
|
@@ -111,7 +111,6 @@ Each rule has a brief description and a link to its detailed documentation.
|
|
|
111
111
|
|
|
112
112
|
| Rule ID | Rule Name | Description |
|
|
113
113
|
|---------|-----------|-------------|
|
|
114
|
-
| [MD015](md015.md) | No multiple space list | Multiple spaces after list marker |
|
|
115
114
|
| [MD057](md057.md) | Relative links | Relative links should exist |
|
|
116
115
|
|
|
117
116
|
## Using Rules
|
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
## Description
|
|
4
4
|
|
|
5
|
-
This rule ensures that there is a consistent number of spaces between list markers and the list content.
|
|
6
|
-
By default, ordered lists should have one space after the list marker, and unordered lists should have
|
|
5
|
+
This rule ensures that there is a consistent number of spaces between list markers and the list content.
|
|
6
|
+
By default, ordered lists should have one space after the list marker, and unordered lists should have
|
|
7
7
|
one space after the list marker.
|
|
8
8
|
|
|
9
|
+
**Note:** This rule covers multiple spaces (e.g., `* Item`) after list markers, but does **not** warn for missing space (e.g., `*Item`) after the marker. Lines like `*Item` are not considered valid list items per CommonMark and markdownlint, and are ignored.
|
|
10
|
+
|
|
9
11
|
Consistent spacing improves readability and ensures proper rendering across different Markdown processors.
|
|
10
12
|
|
|
11
13
|
<!-- markdownlint-disable -->
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
import subprocess
|
|
3
|
+
import json
|
|
4
|
+
import sys
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
PARITY_CORPUS = Path(__file__).parent / "parity_corpus"
|
|
9
|
+
RUMDL_BIN = "cargo run --bin rumdl --"
|
|
10
|
+
MARKDOWNLINT_BIN = "markdownlint"
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def run_rumdl(md_file):
|
|
14
|
+
# Use --no-config to ensure no config is loaded (use built-in defaults only)
|
|
15
|
+
cmd = f"{RUMDL_BIN} check '{md_file}' -o json --no-config"
|
|
16
|
+
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
|
|
17
|
+
if result.returncode != 0 and not result.stdout.strip():
|
|
18
|
+
print(f"[rumdl] Error running on {md_file}: {result.stderr}")
|
|
19
|
+
return []
|
|
20
|
+
try:
|
|
21
|
+
return json.loads(result.stdout)
|
|
22
|
+
except Exception as e:
|
|
23
|
+
print(f"[rumdl] Failed to parse JSON for {md_file}: {e}")
|
|
24
|
+
return []
|
|
25
|
+
|
|
26
|
+
def run_markdownlint(md_file):
|
|
27
|
+
cmd = ["npx", MARKDOWNLINT_BIN, str(md_file), "--json"]
|
|
28
|
+
result = subprocess.run(cmd, capture_output=True, text=True)
|
|
29
|
+
if result.returncode not in (0, 1):
|
|
30
|
+
print(f"[markdownlint] Error running on {md_file}: {result.stderr}")
|
|
31
|
+
return []
|
|
32
|
+
|
|
33
|
+
# markdownlint outputs JSON to stderr when using --json flag
|
|
34
|
+
output = result.stderr.strip() if result.stderr.strip() else result.stdout.strip()
|
|
35
|
+
if output:
|
|
36
|
+
try:
|
|
37
|
+
return json.loads(output)
|
|
38
|
+
except Exception as e:
|
|
39
|
+
print(f"[markdownlint] Failed to parse JSON for {md_file}: {e}")
|
|
40
|
+
print(f"[markdownlint] output for {md_file}:")
|
|
41
|
+
print(output)
|
|
42
|
+
return []
|
|
43
|
+
|
|
44
|
+
def normalize_rumdl(warning, file):
|
|
45
|
+
"""Normalize rumdl warning to common format"""
|
|
46
|
+
return {
|
|
47
|
+
"file": str(file.relative_to(Path.cwd())), # Convert to relative path
|
|
48
|
+
"line": warning.get("line"),
|
|
49
|
+
"column": warning.get("column", 1),
|
|
50
|
+
"rule": warning.get("rule_name"),
|
|
51
|
+
"message": warning.get("message"),
|
|
52
|
+
"fix": warning.get("fix"),
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
def normalize_markdownlint(warning):
|
|
56
|
+
"""Normalize markdownlint warning to common format"""
|
|
57
|
+
file_path = warning.get("fileName")
|
|
58
|
+
# Convert absolute paths to relative if possible
|
|
59
|
+
if file_path and file_path.startswith('/'):
|
|
60
|
+
try:
|
|
61
|
+
file_path = str(Path(file_path).relative_to(Path.cwd()))
|
|
62
|
+
except ValueError:
|
|
63
|
+
# If the path is not relative to cwd, keep it as is
|
|
64
|
+
pass
|
|
65
|
+
|
|
66
|
+
return {
|
|
67
|
+
"file": file_path,
|
|
68
|
+
"line": warning.get("lineNumber"),
|
|
69
|
+
"column": (warning.get("errorRange") or [1])[0] if warning.get("errorRange") else 1,
|
|
70
|
+
"rule": warning.get("ruleNames", [None])[0],
|
|
71
|
+
"message": warning.get("ruleDescription"),
|
|
72
|
+
"fix": warning.get("fixInfo"),
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
def compare_warnings(rumdl_warnings, markdownlint_warnings):
|
|
76
|
+
# Sort by (line, rule) for comparison - ignore column and message differences
|
|
77
|
+
def key(w):
|
|
78
|
+
return (
|
|
79
|
+
w.get("line", 0),
|
|
80
|
+
w.get("rule", "")
|
|
81
|
+
)
|
|
82
|
+
r_sorted = sorted(rumdl_warnings, key=key)
|
|
83
|
+
m_sorted = sorted(markdownlint_warnings, key=key)
|
|
84
|
+
|
|
85
|
+
# Compare based on file, line, and rule only
|
|
86
|
+
def warning_key(w):
|
|
87
|
+
return (w.get("file"), w.get("line"), w.get("rule"))
|
|
88
|
+
|
|
89
|
+
r_set = set(warning_key(w) for w in r_sorted)
|
|
90
|
+
m_set = set(warning_key(w) for w in m_sorted)
|
|
91
|
+
|
|
92
|
+
only_in_rumdl = r_set - m_set
|
|
93
|
+
only_in_markdownlint = m_set - r_set
|
|
94
|
+
common = r_set & m_set
|
|
95
|
+
|
|
96
|
+
if not only_in_rumdl and not only_in_markdownlint:
|
|
97
|
+
print("All warnings match!")
|
|
98
|
+
return True
|
|
99
|
+
|
|
100
|
+
if only_in_rumdl:
|
|
101
|
+
print(f" Warnings only in rumdl ({len(only_in_rumdl)}):")
|
|
102
|
+
for key in list(only_in_rumdl)[:3]: # Show fewer to reduce noise
|
|
103
|
+
file, line, rule = key
|
|
104
|
+
# Find the actual warning for context
|
|
105
|
+
warning = next((w for w in rumdl_warnings if w.get('file') == file and w.get('line') == line and w.get('rule') == rule), None)
|
|
106
|
+
message = warning.get('message', 'No message') if warning else 'No message'
|
|
107
|
+
print(f" Line {line}: {rule} - {message}")
|
|
108
|
+
if len(only_in_rumdl) > 3:
|
|
109
|
+
print(f" ...and {len(only_in_rumdl) - 3} more.")
|
|
110
|
+
if only_in_markdownlint:
|
|
111
|
+
print(f" Warnings only in markdownlint ({len(only_in_markdownlint)}):")
|
|
112
|
+
for key in list(only_in_markdownlint)[:3]: # Show fewer to reduce noise
|
|
113
|
+
file, line, rule = key
|
|
114
|
+
# Find the actual warning for context
|
|
115
|
+
warning = next((w for w in markdownlint_warnings if w.get('file') == file and w.get('line') == line and w.get('rule') == rule), None)
|
|
116
|
+
message = warning.get('message', 'No message') if warning else 'No message'
|
|
117
|
+
print(f" Line {line}: {rule} - {message}")
|
|
118
|
+
if len(only_in_markdownlint) > 3:
|
|
119
|
+
print(f" ...and {len(only_in_markdownlint) - 3} more.")
|
|
120
|
+
print(f" Common warnings: {len(r_set & m_set)}")
|
|
121
|
+
return False
|
|
122
|
+
|
|
123
|
+
def main():
|
|
124
|
+
md_files = sorted(PARITY_CORPUS.glob("*.md"))
|
|
125
|
+
if not md_files:
|
|
126
|
+
print("No markdown files found in parity_corpus/")
|
|
127
|
+
sys.exit(1)
|
|
128
|
+
|
|
129
|
+
all_passed = True
|
|
130
|
+
total_common = 0
|
|
131
|
+
total_rumdl_only = 0
|
|
132
|
+
total_markdownlint_only = 0
|
|
133
|
+
|
|
134
|
+
for md_file in md_files:
|
|
135
|
+
print(f"\n=== {md_file} ===")
|
|
136
|
+
rumdl_raw = run_rumdl(md_file)
|
|
137
|
+
markdownlint_raw = run_markdownlint(md_file)
|
|
138
|
+
|
|
139
|
+
rumdl_norm = [normalize_rumdl(w, md_file) for w in rumdl_raw]
|
|
140
|
+
markdownlint_norm = [normalize_markdownlint(w) for w in markdownlint_raw]
|
|
141
|
+
|
|
142
|
+
# Filter markdownlint warnings to only include the current file
|
|
143
|
+
file_relative = str(md_file.relative_to(Path.cwd()))
|
|
144
|
+
file_absolute = str(md_file.absolute())
|
|
145
|
+
markdownlint_norm = [w for w in markdownlint_norm if w.get("file") in (file_relative, file_absolute)]
|
|
146
|
+
|
|
147
|
+
# Sort by (line, rule) for comparison - ignore column and message differences
|
|
148
|
+
def key(w):
|
|
149
|
+
return (
|
|
150
|
+
w.get("line", 0),
|
|
151
|
+
w.get("rule", "")
|
|
152
|
+
)
|
|
153
|
+
r_sorted = sorted(rumdl_norm, key=key)
|
|
154
|
+
m_sorted = sorted(markdownlint_norm, key=key)
|
|
155
|
+
|
|
156
|
+
# Compare based on file, line, and rule only
|
|
157
|
+
def warning_key(w):
|
|
158
|
+
return (w.get("file"), w.get("line"), w.get("rule"))
|
|
159
|
+
|
|
160
|
+
r_set = set(warning_key(w) for w in r_sorted)
|
|
161
|
+
m_set = set(warning_key(w) for w in m_sorted)
|
|
162
|
+
|
|
163
|
+
only_in_rumdl = r_set - m_set
|
|
164
|
+
only_in_markdownlint = m_set - r_set
|
|
165
|
+
common = r_set & m_set
|
|
166
|
+
|
|
167
|
+
total_common += len(common)
|
|
168
|
+
total_rumdl_only += len(only_in_rumdl)
|
|
169
|
+
total_markdownlint_only += len(only_in_markdownlint)
|
|
170
|
+
|
|
171
|
+
if not only_in_rumdl and not only_in_markdownlint:
|
|
172
|
+
print("✓ All warnings match!")
|
|
173
|
+
else:
|
|
174
|
+
print("✗ Mismatches found:")
|
|
175
|
+
if only_in_rumdl:
|
|
176
|
+
print(f" Warnings only in rumdl ({len(only_in_rumdl)}):")
|
|
177
|
+
for key in list(only_in_rumdl)[:3]: # Show fewer to reduce noise
|
|
178
|
+
file, line, rule = key
|
|
179
|
+
# Find the actual warning for context
|
|
180
|
+
warning = next((w for w in rumdl_norm if w.get('file') == file and w.get('line') == line and w.get('rule') == rule), None)
|
|
181
|
+
message = warning.get('message', 'No message') if warning else 'No message'
|
|
182
|
+
print(f" Line {line}: {rule} - {message}")
|
|
183
|
+
if len(only_in_rumdl) > 3:
|
|
184
|
+
print(f" ...and {len(only_in_rumdl) - 3} more.")
|
|
185
|
+
if only_in_markdownlint:
|
|
186
|
+
print(f" Warnings only in markdownlint ({len(only_in_markdownlint)}):")
|
|
187
|
+
for key in list(only_in_markdownlint)[:3]: # Show fewer to reduce noise
|
|
188
|
+
file, line, rule = key
|
|
189
|
+
# Find the actual warning for context
|
|
190
|
+
warning = next((w for w in markdownlint_norm if w.get('file') == file and w.get('line') == line and w.get('rule') == rule), None)
|
|
191
|
+
message = warning.get('message', 'No message') if warning else 'No message'
|
|
192
|
+
print(f" Line {line}: {rule} - {message}")
|
|
193
|
+
if len(only_in_markdownlint) > 3:
|
|
194
|
+
print(f" ...and {len(only_in_markdownlint) - 3} more.")
|
|
195
|
+
print(f" Common warnings: {len(common)}")
|
|
196
|
+
all_passed = False
|
|
197
|
+
|
|
198
|
+
print(f"\n=== SUMMARY ===")
|
|
199
|
+
print(f"Total common warnings: {total_common}")
|
|
200
|
+
print(f"Total rumdl-only warnings: {total_rumdl_only}")
|
|
201
|
+
print(f"Total markdownlint-only warnings: {total_markdownlint_only}")
|
|
202
|
+
|
|
203
|
+
if all_passed:
|
|
204
|
+
print("✓ All files match between rumdl and markdownlint!")
|
|
205
|
+
sys.exit(0)
|
|
206
|
+
else:
|
|
207
|
+
print("✗ Some files have mismatches.")
|
|
208
|
+
sys.exit(1)
|
|
209
|
+
|
|
210
|
+
if __name__ == "__main__":
|
|
211
|
+
main()
|