rumdl 0.0.51__tar.gz → 0.0.52__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.51 → rumdl-0.0.52}/Cargo.lock +8 -7
- {rumdl-0.0.51 → rumdl-0.0.52}/Cargo.toml +2 -1
- {rumdl-0.0.51 → rumdl-0.0.52}/Makefile +7 -1
- {rumdl-0.0.51 → rumdl-0.0.52}/PKG-INFO +2 -2
- {rumdl-0.0.51 → rumdl-0.0.52}/pyproject.toml +2 -2
- {rumdl-0.0.51 → rumdl-0.0.52}/src/config.rs +125 -15
- {rumdl-0.0.51 → rumdl-0.0.52}/src/init.rs +3 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/lib.rs +1 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/main.rs +235 -390
- rumdl-0.0.52/src/markdownlint_config.rs +152 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/profiling.rs +5 -2
- {rumdl-0.0.51 → rumdl-0.0.52}/src/python.rs +3 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rule.rs +4 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md001_heading_increment.rs +2 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md002_first_heading_h1.rs +2 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md003_heading_style.rs +5 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md004_unordered_list_style.rs +50 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md005_list_indent.rs +5 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md006_start_bullets.rs +3 -1
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md007_ul_indent.rs +3 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md008_ul_style.rs +4 -1
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md009_trailing_spaces.rs +4 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md010_no_hard_tabs.rs +3 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md011_no_reversed_links.rs +3 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md012_no_multiple_blanks.rs +4 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md013_line_length.rs +3 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md014_commands_show_output.rs +5 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md015_no_missing_space_after_list_marker.rs +3 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md016_no_multiple_space_after_list_marker.rs +3 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md018_no_missing_space_atx.rs +3 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md019_no_multiple_space_atx.rs +3 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md020_no_missing_space_closed_atx.rs +3 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md021_no_multiple_space_closed_atx.rs +3 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md022_blanks_around_headings.rs +3 -1
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md023_heading_start_left.rs +3 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md024_no_duplicate_heading.rs +3 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md025_single_title.rs +3 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md026_no_trailing_punctuation.rs +3 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md027_multiple_spaces_blockquote.rs +4 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md028_no_blanks_blockquote.rs +3 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md029_ordered_list_prefix.rs +3 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md030_list_marker_space.rs +5 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md031_blanks_around_fences.rs +3 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md033_no_inline_html.rs +5 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md034_no_bare_urls.rs +4 -1
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md035_hr_style.rs +5 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md036_no_emphasis_only_first.rs +5 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md037_spaces_around_emphasis.rs +3 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md038_no_space_in_code.rs +4 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md039_no_space_in_links.rs +3 -1
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md040_fenced_code_language.rs +4 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md041_first_line_heading.rs +4 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md042_no_empty_links.rs +2 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md043_required_headings.rs +2 -2
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md044_proper_names.rs +3 -1
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md045_no_alt_text.rs +3 -1
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md046_code_block_style.rs +2 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md047_single_trailing_newline.rs +4 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md048_code_fence_style.rs +3 -1
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md049_emphasis_style.rs +3 -1
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md050_strong_style.rs +3 -1
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md051_link_fragments.rs +3 -1
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md052_reference_links_images.rs +3 -1
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md053_link_image_reference_definitions.rs +3 -12
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md054_link_image_style.rs +16 -12
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md055_table_pipe_style.rs +12 -11
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md056_table_column_count.rs +3 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md057_existing_relative_links.rs +11 -7
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md058_blanks_around_tables.rs +5 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/mod.rs +0 -3
- {rumdl-0.0.51 → rumdl-0.0.52}/src/utils/code_block_utils.rs +3 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/utils/document_structure.rs +1 -1
- {rumdl-0.0.51 → rumdl-0.0.52}/src/utils/early_returns.rs +4 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/utils/element_cache.rs +1 -1
- {rumdl-0.0.51 → rumdl-0.0.52}/src/utils/mod.rs +4 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/utils/regex_cache.rs +29 -2
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/cli_integration_tests.rs +75 -21
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/config_application_tests.rs +9 -9
- rumdl-0.0.52/tests/markdownlint_cli_integration.rs +154 -0
- rumdl-0.0.52/tests/markdownlint_config_test.rs +209 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/mod.rs +1 -1
- rumdl-0.0.51/.pre-commit-config.yaml +0 -42
- rumdl-0.0.51/docs/md017.md +0 -57
- rumdl-0.0.51/src/rules/md017_no_emphasis_as_heading.rs +0 -183
- rumdl-0.0.51/tests/rules/md017_test.rs +0 -116
- {rumdl-0.0.51 → rumdl-0.0.52}/.rumdl.toml +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/MANIFEST.in +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/README.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/assets/logo.png +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/benches/range_performance.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/benches/range_utils_benchmark.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/benches/rule_performance.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/RULES.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md001.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md002.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md003.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md004.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md005.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md006.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md007.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md008.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md009.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md010.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md011.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md012.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md013.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md014.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md015.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md016.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md018.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md019.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md020.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md021.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md022.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md023.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md024.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md025.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md026.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md027.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md028.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md029.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md030.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md031.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md032.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md033.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md034.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md035.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md036.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md037.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md038.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md039.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md040.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md041.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md042.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md043.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md044.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md045.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md046.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md047.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md048.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md049.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md050.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md051.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md052.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md053.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md054.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md055.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md056.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md057.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/docs/md058.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/python/MANIFEST.in +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/python/PYTHON-README.md +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/python/rumdl/__init__.py +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/python/rumdl/__main__.py +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/python/rumdl/py.typed +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/rumdl.toml.example +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/blockquote_utils.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/code_block_utils.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/code_fence_utils.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/emphasis_style.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/front_matter_utils.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/heading_utils.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/list_utils.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md032_blanks_around_lists.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/strong_style.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/utils/markdown_elements.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/src/utils/range_utils.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/advanced_integration_tests.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/cli_duplication_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/commonmark_compliance_tests.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/comprehensive_integration_tests.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/config_tests.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/init_command_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/init_tests.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/integration_tests.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/lib.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/output_format_tests.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/perf_check.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/pyproject_config_tests.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md001_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md001_unicode_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md002_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md003_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md004_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md005_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md006_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md006_unicode_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md007_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md008_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md009_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md010_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md011_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md012_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md013_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md014_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md015_proptest.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md015_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md016_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md018_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md019_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md020_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md021_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md022_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md023_extended_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md023_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md024_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md025_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md026_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md027_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md028_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md029_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md030_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md031_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md032_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md033_extended_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md033_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md034_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md035_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md036_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md037_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md038_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md039_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md040_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md041_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md042_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md043_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md044_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md045_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md046_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md047_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md048_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md049_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md050_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md051_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md052_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md053_additional_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md053_proptest.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md053_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md054_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md054_unicode_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md055_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md056_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md057_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md058_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/utils/blockquote_utils_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/utils/code_block_utils_extended_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/utils/code_block_utils_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/utils/core_utils_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/utils/front_matter_utils_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/utils/line_index_test.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/utils/mod.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/utils_markdown_edge_cases.rs +0 -0
- {rumdl-0.0.51 → rumdl-0.0.52}/tests/utils_tests.rs +0 -0
|
@@ -1208,7 +1208,7 @@ dependencies = [
|
|
|
1208
1208
|
|
|
1209
1209
|
[[package]]
|
|
1210
1210
|
name = "rumdl"
|
|
1211
|
-
version = "0.0.
|
|
1211
|
+
version = "0.0.52"
|
|
1212
1212
|
dependencies = [
|
|
1213
1213
|
"anyhow",
|
|
1214
1214
|
"assert_cmd",
|
|
@@ -1236,6 +1236,7 @@ dependencies = [
|
|
|
1236
1236
|
"rayon",
|
|
1237
1237
|
"regex",
|
|
1238
1238
|
"serde",
|
|
1239
|
+
"serde_json",
|
|
1239
1240
|
"serde_yaml",
|
|
1240
1241
|
"strsim",
|
|
1241
1242
|
"tempfile",
|
|
@@ -1475,9 +1476,9 @@ dependencies = [
|
|
|
1475
1476
|
|
|
1476
1477
|
[[package]]
|
|
1477
1478
|
name = "toml"
|
|
1478
|
-
version = "0.8.
|
|
1479
|
+
version = "0.8.22"
|
|
1479
1480
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1480
|
-
checksum = "
|
|
1481
|
+
checksum = "05ae329d1f08c4d17a59bed7ff5b5a769d062e64a62d34a3261b219e62cd5aae"
|
|
1481
1482
|
dependencies = [
|
|
1482
1483
|
"serde",
|
|
1483
1484
|
"serde_spanned",
|
|
@@ -1496,9 +1497,9 @@ dependencies = [
|
|
|
1496
1497
|
|
|
1497
1498
|
[[package]]
|
|
1498
1499
|
name = "toml_edit"
|
|
1499
|
-
version = "0.22.
|
|
1500
|
+
version = "0.22.26"
|
|
1500
1501
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1501
|
-
checksum = "
|
|
1502
|
+
checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e"
|
|
1502
1503
|
dependencies = [
|
|
1503
1504
|
"indexmap",
|
|
1504
1505
|
"serde",
|
|
@@ -1510,9 +1511,9 @@ dependencies = [
|
|
|
1510
1511
|
|
|
1511
1512
|
[[package]]
|
|
1512
1513
|
name = "toml_write"
|
|
1513
|
-
version = "0.1.
|
|
1514
|
+
version = "0.1.1"
|
|
1514
1515
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1515
|
-
checksum = "
|
|
1516
|
+
checksum = "bfb942dfe1d8e29a7ee7fcbde5bd2b9a25fb89aa70caea2eba3bee836ff41076"
|
|
1516
1517
|
|
|
1517
1518
|
[[package]]
|
|
1518
1519
|
name = "trim-in-place"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "rumdl"
|
|
3
|
-
version = "0.0.
|
|
3
|
+
version = "0.0.52"
|
|
4
4
|
edition = "2021"
|
|
5
5
|
description = "A fast Markdown linter written in Rust (Ru(st) MarkDown Linter)"
|
|
6
6
|
authors = ["Ruben J. Jongejan <ruben.jongejan@gmail.com>"]
|
|
@@ -32,6 +32,7 @@ lazy_static = "1.5.0"
|
|
|
32
32
|
rayon = { version = "1.10.0", optional = true }
|
|
33
33
|
serde = { version = "1.0", features = ["derive"] }
|
|
34
34
|
serde_yaml = "0.9.34"
|
|
35
|
+
serde_json = "1.0"
|
|
35
36
|
toml = "0.8.20"
|
|
36
37
|
walkdir = "2.5.0"
|
|
37
38
|
strsim = "0.11"
|
|
@@ -117,4 +117,10 @@ version-push:
|
|
|
117
117
|
# Combined targets for one-step release
|
|
118
118
|
release-major: version-major version-push
|
|
119
119
|
release-minor: version-minor version-push
|
|
120
|
-
release-patch: version-patch version-push
|
|
120
|
+
release-patch: version-patch version-push
|
|
121
|
+
|
|
122
|
+
maturin-build:
|
|
123
|
+
uv run --with pip,maturin[zig],cffi maturin build --release
|
|
124
|
+
|
|
125
|
+
maturin-sdist:
|
|
126
|
+
uv run --with pip,maturin[zig],cffi maturin sdist
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rumdl
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.52
|
|
4
4
|
Classifier: Development Status :: 4 - Beta
|
|
5
5
|
Classifier: Environment :: Console
|
|
6
6
|
Classifier: Intended Audience :: Developers
|
|
@@ -17,7 +17,7 @@ Classifier: Programming Language :: Rust
|
|
|
17
17
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
18
18
|
Classifier: Topic :: Software Development :: Quality Assurance
|
|
19
19
|
Classifier: Topic :: Text Processing :: Markup :: Markdown
|
|
20
|
-
Summary:
|
|
20
|
+
Summary: A fast Markdown linter written in Rust
|
|
21
21
|
Keywords: markdown,linter,markdown-linter,static-analysis,documentation
|
|
22
22
|
Home-Page: https://github.com/rvben/rumdl
|
|
23
23
|
Author: Ruben J. Jongejan <ruben.jongejan@gmail.com>
|
|
@@ -5,7 +5,7 @@ build-backend = "maturin"
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "rumdl"
|
|
7
7
|
dynamic = ["version"]
|
|
8
|
-
description = "
|
|
8
|
+
description = "A fast Markdown linter written in Rust"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.7"
|
|
11
11
|
license = { text = "MIT" }
|
|
@@ -60,4 +60,4 @@ disallow_incomplete_defs = true
|
|
|
60
60
|
[dependency-groups]
|
|
61
61
|
dev = [
|
|
62
62
|
"pre-commit>=2.21.0",
|
|
63
|
-
]
|
|
63
|
+
]
|
|
@@ -1,19 +1,23 @@
|
|
|
1
|
+
//!
|
|
2
|
+
//! This module defines configuration structures, loading logic, and provenance tracking for rumdl.
|
|
3
|
+
//! Supports TOML, pyproject.toml, and markdownlint config formats, and provides merging and override logic.
|
|
4
|
+
|
|
1
5
|
use serde::{Deserialize, Serialize};
|
|
2
|
-
use std::collections::
|
|
6
|
+
use std::collections::BTreeMap;
|
|
3
7
|
use std::fs;
|
|
4
8
|
use std::io;
|
|
5
9
|
use std::path::Path;
|
|
6
10
|
|
|
7
11
|
/// Represents a rule-specific configuration
|
|
8
|
-
#[derive(Debug, Serialize, Deserialize, Default)]
|
|
12
|
+
#[derive(Debug, Serialize, Deserialize, Default, PartialEq)]
|
|
9
13
|
pub struct RuleConfig {
|
|
10
14
|
/// Configuration values for the rule
|
|
11
15
|
#[serde(flatten)]
|
|
12
|
-
pub values:
|
|
16
|
+
pub values: BTreeMap<String, toml::Value>,
|
|
13
17
|
}
|
|
14
18
|
|
|
15
19
|
/// Represents the complete configuration loaded from rumdl.toml
|
|
16
|
-
#[derive(Debug, Serialize, Deserialize, Default)]
|
|
20
|
+
#[derive(Debug, Serialize, Deserialize, Default, PartialEq)]
|
|
17
21
|
pub struct Config {
|
|
18
22
|
/// Global configuration options
|
|
19
23
|
#[serde(default)]
|
|
@@ -21,11 +25,11 @@ pub struct Config {
|
|
|
21
25
|
|
|
22
26
|
/// Rule-specific configurations
|
|
23
27
|
#[serde(flatten)]
|
|
24
|
-
pub rules:
|
|
28
|
+
pub rules: BTreeMap<String, RuleConfig>,
|
|
25
29
|
}
|
|
26
30
|
|
|
27
31
|
/// Global configuration options
|
|
28
|
-
#[derive(Debug, Serialize, Deserialize)]
|
|
32
|
+
#[derive(Debug, Serialize, Deserialize, PartialEq)]
|
|
29
33
|
#[serde(default)]
|
|
30
34
|
pub struct GlobalConfig {
|
|
31
35
|
/// Enabled rules
|
|
@@ -66,6 +70,17 @@ impl Default for GlobalConfig {
|
|
|
66
70
|
}
|
|
67
71
|
}
|
|
68
72
|
|
|
73
|
+
const MARKDOWNLINT_CONFIG_FILES: &[&str] = &[
|
|
74
|
+
".markdownlint.json",
|
|
75
|
+
".markdownlint.jsonc",
|
|
76
|
+
".markdownlint.yaml",
|
|
77
|
+
".markdownlint.yml",
|
|
78
|
+
"markdownlint.json",
|
|
79
|
+
"markdownlint.jsonc",
|
|
80
|
+
"markdownlint.yaml",
|
|
81
|
+
"markdownlint.yml",
|
|
82
|
+
];
|
|
83
|
+
|
|
69
84
|
/// Load configuration from the specified file or search for a default config file
|
|
70
85
|
pub fn load_config(config_path: Option<&str>) -> Result<Config, ConfigError> {
|
|
71
86
|
// If a specific config file is provided, use it
|
|
@@ -444,6 +459,8 @@ pub enum ConfigSource {
|
|
|
444
459
|
RumdlToml,
|
|
445
460
|
PyprojectToml,
|
|
446
461
|
Cli,
|
|
462
|
+
/// Value was loaded from a markdownlint config file (e.g. .markdownlint.json, .markdownlint.yaml)
|
|
463
|
+
Markdownlint,
|
|
447
464
|
}
|
|
448
465
|
|
|
449
466
|
#[derive(Debug, Clone)]
|
|
@@ -515,13 +532,13 @@ impl Default for SourcedGlobalConfig {
|
|
|
515
532
|
|
|
516
533
|
#[derive(Debug, Default)]
|
|
517
534
|
pub struct SourcedRuleConfig {
|
|
518
|
-
pub values:
|
|
535
|
+
pub values: BTreeMap<String, SourcedValue<toml::Value>>,
|
|
519
536
|
}
|
|
520
537
|
|
|
521
538
|
#[derive(Debug, Default)]
|
|
522
539
|
pub struct SourcedConfig {
|
|
523
540
|
pub global: SourcedGlobalConfig,
|
|
524
|
-
pub rules:
|
|
541
|
+
pub rules: BTreeMap<String, SourcedRuleConfig>,
|
|
525
542
|
pub loaded_files: Vec<String>,
|
|
526
543
|
pub unknown_keys: Vec<(String, String)>, // (section, key)
|
|
527
544
|
}
|
|
@@ -541,8 +558,7 @@ impl SourcedConfig {
|
|
|
541
558
|
include: SourcedValue::new(Vec::new(), Default),
|
|
542
559
|
respect_gitignore: SourcedValue::new(true, Default),
|
|
543
560
|
};
|
|
544
|
-
let mut rules:
|
|
545
|
-
std::collections::HashMap::new();
|
|
561
|
+
let mut rules: BTreeMap<String, SourcedRuleConfig> = BTreeMap::new();
|
|
546
562
|
|
|
547
563
|
// Helper to update a sourced value if the new source has higher precedence
|
|
548
564
|
let update_vec = |current: &mut SourcedValue<Vec<String>>,
|
|
@@ -564,17 +580,21 @@ impl SourcedConfig {
|
|
|
564
580
|
match src {
|
|
565
581
|
ConfigSource::Default => 0,
|
|
566
582
|
ConfigSource::PyprojectToml => 1,
|
|
567
|
-
ConfigSource::
|
|
568
|
-
ConfigSource::
|
|
583
|
+
ConfigSource::Markdownlint => 2,
|
|
584
|
+
ConfigSource::RumdlToml => 3,
|
|
585
|
+
ConfigSource::Cli => 4,
|
|
569
586
|
}
|
|
570
587
|
}
|
|
571
588
|
|
|
589
|
+
// Track if any TOML/pyproject config was loaded
|
|
590
|
+
let mut loaded_toml_or_pyproject = false;
|
|
572
591
|
// 1. Load pyproject.toml if present
|
|
573
592
|
if config_path.is_none() && std::path::Path::new("pyproject.toml").exists() {
|
|
574
|
-
loaded_files.push("pyproject.toml".to_string());
|
|
575
593
|
if let Ok(content) = std::fs::read_to_string("pyproject.toml") {
|
|
576
594
|
if let Ok(pyproject) = toml::from_str::<toml::Value>(&content) {
|
|
577
595
|
if let Some(rumdl_config) = pyproject.get("tool").and_then(|t| t.get("rumdl")) {
|
|
596
|
+
loaded_files.push("pyproject.toml".to_string());
|
|
597
|
+
loaded_toml_or_pyproject = true;
|
|
578
598
|
if let Some(rumdl_table) = rumdl_config.as_table() {
|
|
579
599
|
for (key, value) in rumdl_table {
|
|
580
600
|
match key.as_str() {
|
|
@@ -673,12 +693,12 @@ impl SourcedConfig {
|
|
|
673
693
|
}
|
|
674
694
|
}
|
|
675
695
|
}
|
|
676
|
-
|
|
677
696
|
// 2. Load .rumdl.toml or rumdl.toml if present (higher precedence)
|
|
678
697
|
if config_path.is_none() {
|
|
679
698
|
for filename in [".rumdl.toml", "rumdl.toml"] {
|
|
680
699
|
if std::path::Path::new(filename).exists() {
|
|
681
700
|
loaded_files.push(filename.to_string());
|
|
701
|
+
loaded_toml_or_pyproject = true;
|
|
682
702
|
if let Ok(content) = std::fs::read_to_string(filename) {
|
|
683
703
|
if let Ok(toml_val) = toml::from_str::<toml::Value>(&content) {
|
|
684
704
|
if let Some(global_table) =
|
|
@@ -786,6 +806,7 @@ impl SourcedConfig {
|
|
|
786
806
|
// 3. If explicit config path is given, load it (highest precedence except CLI)
|
|
787
807
|
if let Some(path) = config_path {
|
|
788
808
|
loaded_files.push(path.to_string());
|
|
809
|
+
loaded_toml_or_pyproject = true;
|
|
789
810
|
if let Ok(content) = std::fs::read_to_string(path) {
|
|
790
811
|
if let Ok(toml_val) = toml::from_str::<toml::Value>(&content) {
|
|
791
812
|
if let Some(global_table) = toml_val.get("global").and_then(|v| v.as_table()) {
|
|
@@ -874,7 +895,75 @@ impl SourcedConfig {
|
|
|
874
895
|
}
|
|
875
896
|
}
|
|
876
897
|
}
|
|
877
|
-
// 4.
|
|
898
|
+
// 4. Markdownlint config fallback if no TOML/pyproject config was loaded
|
|
899
|
+
if !loaded_toml_or_pyproject {
|
|
900
|
+
for filename in MARKDOWNLINT_CONFIG_FILES {
|
|
901
|
+
if std::path::Path::new(filename).exists() {
|
|
902
|
+
let result = crate::markdownlint_config::load_markdownlint_config(filename);
|
|
903
|
+
if let Ok(ml_config) = result {
|
|
904
|
+
let sourced = ml_config.map_to_sourced_rumdl_config(Some(filename));
|
|
905
|
+
// Merge rule configs
|
|
906
|
+
for (rule, rule_cfg) in sourced.rules {
|
|
907
|
+
rules.insert(rule, rule_cfg);
|
|
908
|
+
}
|
|
909
|
+
// Set provenance for global config values to Markdownlint
|
|
910
|
+
global.enable = SourcedValue {
|
|
911
|
+
value: Vec::new(),
|
|
912
|
+
source: ConfigSource::Markdownlint,
|
|
913
|
+
overrides: vec![ConfigOverride {
|
|
914
|
+
value: Vec::new(),
|
|
915
|
+
source: ConfigSource::Markdownlint,
|
|
916
|
+
file: Some(filename.to_string()),
|
|
917
|
+
line: None,
|
|
918
|
+
}],
|
|
919
|
+
};
|
|
920
|
+
global.disable = SourcedValue {
|
|
921
|
+
value: Vec::new(),
|
|
922
|
+
source: ConfigSource::Markdownlint,
|
|
923
|
+
overrides: vec![ConfigOverride {
|
|
924
|
+
value: Vec::new(),
|
|
925
|
+
source: ConfigSource::Markdownlint,
|
|
926
|
+
file: Some(filename.to_string()),
|
|
927
|
+
line: None,
|
|
928
|
+
}],
|
|
929
|
+
};
|
|
930
|
+
global.exclude = SourcedValue {
|
|
931
|
+
value: Vec::new(),
|
|
932
|
+
source: ConfigSource::Markdownlint,
|
|
933
|
+
overrides: vec![ConfigOverride {
|
|
934
|
+
value: Vec::new(),
|
|
935
|
+
source: ConfigSource::Markdownlint,
|
|
936
|
+
file: Some(filename.to_string()),
|
|
937
|
+
line: None,
|
|
938
|
+
}],
|
|
939
|
+
};
|
|
940
|
+
global.include = SourcedValue {
|
|
941
|
+
value: Vec::new(),
|
|
942
|
+
source: ConfigSource::Markdownlint,
|
|
943
|
+
overrides: vec![ConfigOverride {
|
|
944
|
+
value: Vec::new(),
|
|
945
|
+
source: ConfigSource::Markdownlint,
|
|
946
|
+
file: Some(filename.to_string()),
|
|
947
|
+
line: None,
|
|
948
|
+
}],
|
|
949
|
+
};
|
|
950
|
+
global.respect_gitignore = SourcedValue {
|
|
951
|
+
value: true,
|
|
952
|
+
source: ConfigSource::Markdownlint,
|
|
953
|
+
overrides: vec![ConfigOverride {
|
|
954
|
+
value: true,
|
|
955
|
+
source: ConfigSource::Markdownlint,
|
|
956
|
+
file: Some(filename.to_string()),
|
|
957
|
+
line: None,
|
|
958
|
+
}],
|
|
959
|
+
};
|
|
960
|
+
loaded_files.push(filename.to_string());
|
|
961
|
+
}
|
|
962
|
+
break;
|
|
963
|
+
}
|
|
964
|
+
}
|
|
965
|
+
}
|
|
966
|
+
// 5. CLI overrides (if provided)
|
|
878
967
|
if let Some(cli) = cli_overrides {
|
|
879
968
|
update_vec(&mut global.enable, cli.enable.value.clone(), Cli, None);
|
|
880
969
|
update_vec(&mut global.disable, cli.disable.value.clone(), Cli, None);
|
|
@@ -896,3 +985,24 @@ impl SourcedConfig {
|
|
|
896
985
|
}
|
|
897
986
|
}
|
|
898
987
|
}
|
|
988
|
+
|
|
989
|
+
impl From<SourcedConfig> for Config {
|
|
990
|
+
fn from(sourced: SourcedConfig) -> Self {
|
|
991
|
+
let global = GlobalConfig {
|
|
992
|
+
enable: sourced.global.enable.value,
|
|
993
|
+
disable: sourced.global.disable.value,
|
|
994
|
+
exclude: sourced.global.exclude.value,
|
|
995
|
+
include: sourced.global.include.value,
|
|
996
|
+
respect_gitignore: sourced.global.respect_gitignore.value,
|
|
997
|
+
};
|
|
998
|
+
let mut rules = BTreeMap::new();
|
|
999
|
+
for (rule_name, sourced_rule) in sourced.rules {
|
|
1000
|
+
let mut rule_config = RuleConfig::default();
|
|
1001
|
+
for (k, v) in sourced_rule.values {
|
|
1002
|
+
rule_config.values.insert(k, v.value);
|
|
1003
|
+
}
|
|
1004
|
+
rules.insert(rule_name, rule_config);
|
|
1005
|
+
}
|
|
1006
|
+
Config { global, rules }
|
|
1007
|
+
}
|
|
1008
|
+
}
|