rumdl 0.0.95__tar.gz → 0.0.96__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.95 → rumdl-0.0.96}/CHANGELOG.md +38 -1
- {rumdl-0.0.95 → rumdl-0.0.96}/Cargo.lock +36 -1
- {rumdl-0.0.95 → rumdl-0.0.96}/Cargo.toml +2 -1
- {rumdl-0.0.95 → rumdl-0.0.96}/PKG-INFO +1 -1
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md013_line_length/md013_config.rs +5 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md013_line_length.rs +141 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/utils/mod.rs +1 -0
- rumdl-0.0.96/src/utils/text_reflow.rs +513 -0
- rumdl-0.0.96/tests/md013_reflow_integration_test.rs +270 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md013_test.rs +464 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/.config/nextest.toml +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/.mise.toml +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/.rumdl.toml +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/.rustfmt.toml +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/LICENSE +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/MANIFEST.in +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/Makefile +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/README.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/assets/logo.png +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/benches/fix_performance.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/benches/range_performance.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/benches/range_utils_benchmark.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/benches/rule_performance.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/benches/simple_fix_bench.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/RULES.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/global-settings.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md001.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md002.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md003.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md004.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md005.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md006.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md007.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md009.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md010.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md011.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md012.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md013.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md014.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md018.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md019.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md020.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md021.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md022.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md023.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md024.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md025.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md026.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md027.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md028.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md029.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md030.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md031.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md032.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md033.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md034.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md035.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md036.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md037.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md038.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md039.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md040.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md041.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md042.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md043.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md044.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md045.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md046.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md047.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md048.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md049.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md050.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md051.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md052.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md053.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md054.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md055.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md056.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md057.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/md058.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/docs/vscode-extension.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/parity_check.py +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/pyproject.toml +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/python/MANIFEST.in +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/python/PYTHON-README.md +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/python/rumdl/__init__.py +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/python/rumdl/__main__.py +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/python/rumdl/py.typed +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/rumdl.toml.example +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/rust-toolchain.toml +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/scripts/extract-changelog.sh +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/scripts/prepare-release.sh +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/bin/benchmark.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/bin/benchmark_rule.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/bin/file_parallel_benchmark.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/bin/measure_code_span_performance.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/exit_codes.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/init.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/inline_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/lib.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/lint_context.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/lsp/mod.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/lsp/server.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/lsp/types.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/main.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/markdownlint_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/output/formatters/azure.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/output/formatters/concise.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/output/formatters/github.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/output/formatters/gitlab.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/output/formatters/grouped.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/output/formatters/json.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/output/formatters/json_lines.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/output/formatters/junit.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/output/formatters/mod.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/output/formatters/pylint.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/output/formatters/sarif.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/output/formatters/text.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/output/mod.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/parallel.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/performance.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/profiling.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/python.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rule.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rule_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rule_config_serde.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/blockquote_utils.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/code_block_utils.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/code_fence_utils.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/emphasis_style.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/front_matter_utils.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/heading_utils.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/list_utils.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md001_heading_increment.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md002_first_heading_h1/md002_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md002_first_heading_h1.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md003_heading_style/md003_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md003_heading_style.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md004_unordered_list_style/md004_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md004_unordered_list_style.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md005_list_indent.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md006_start_bullets.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md007_ul_indent/md007_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md007_ul_indent.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md009_trailing_spaces/md009_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md009_trailing_spaces.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md010_no_hard_tabs/md010_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md010_no_hard_tabs.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md011_no_reversed_links.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md012_no_multiple_blanks/md012_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md012_no_multiple_blanks.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md014_commands_show_output/md014_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md014_commands_show_output.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md018_no_missing_space_atx.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md019_no_multiple_space_atx.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md022_blanks_around_headings/md022_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md022_blanks_around_headings.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md023_heading_start_left.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md024_no_duplicate_heading/md024_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md024_no_duplicate_heading.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md025_single_title/md025_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md025_single_title.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md026_no_trailing_punctuation/md026_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md026_no_trailing_punctuation.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md028_no_blanks_blockquote.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md029_ordered_list_prefix.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md030_list_marker_space/md030_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md030_list_marker_space.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md031_blanks_around_fences.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md032_blanks_around_lists.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md033_no_inline_html/md033_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md033_no_inline_html.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md034_no_bare_urls.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md035_hr_style/md035_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md035_hr_style.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md036_no_emphasis_only_first/md036_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md036_no_emphasis_only_first.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md037_spaces_around_emphasis.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md038_no_space_in_code.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md039_no_space_in_links.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md040_fenced_code_language.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md041_first_line_heading.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md042_no_empty_links.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md043_required_headings.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md044_proper_names/md044_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md044_proper_names.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md045_no_alt_text/md045_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md045_no_alt_text.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md046_code_block_style/md046_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md046_code_block_style.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md047_single_trailing_newline.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md048_code_fence_style/md048_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md048_code_fence_style.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md049_emphasis_style/md049_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md049_emphasis_style.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md050_strong_style/md050_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md050_strong_style.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md051_link_fragments.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md052_reference_links_images.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md053_link_image_reference_definitions.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md054_link_image_style/md054_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md054_link_image_style.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md055_table_pipe_style/md055_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md055_table_pipe_style.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md056_table_column_count.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md057_existing_relative_links/md057_config.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md057_existing_relative_links.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/md058_blanks_around_tables.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/mod.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/rules/strong_style.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/utils/ast_utils.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/utils/code_block_utils.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/utils/document_structure.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/utils/early_returns.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/utils/element_cache.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/utils/emphasis_utils.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/utils/fix_utils.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/utils/markdown_elements.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/utils/range_utils.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/utils/regex_cache.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/utils/string_interner.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/utils/table_utils.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/src/vscode.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/advanced_integration_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/character_ranges/additional_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/character_ranges/basic_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/character_ranges/comprehensive_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/character_ranges/extended_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/character_ranges/mod.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/character_ranges/unicode_utils.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/cli_duplication_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/cli_integration_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/cli_lsp_fix_consistency.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/cli_statistics_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/commonmark_compliance_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/comprehensive_integration_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/comprehensive_output_format_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/config_application_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/config_file_command_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/config_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/configuration_inheritance_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/consistency_regression_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/cross_platform_compatibility_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/final_confidence_assessment.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/init_command_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/init_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/inline_config_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/integration_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/json_output_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/lib.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/lsp_editor_integration_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/lsp_integration_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/lsp_memory_leak_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/lsp_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/malformed_markdown_stress_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/markdownlint_cli_integration.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/markdownlint_config_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/markdownlintignore_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/nested_code_block_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/output_format_integration_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/output_format_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/perf_check.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/performance_validation_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/pyproject_config_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/real_world_repository_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/regression_prevention_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md001_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md001_unicode_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md002_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md003_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md004_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md005_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md006_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md006_unicode_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md007_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md009_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md010_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md011_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md012_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md014_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md018_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md019_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md020_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md021_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md022_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md023_extended_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md023_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md024_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md025_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md026_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md027_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md028_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md029_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md030_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md031_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md032_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md033_extended_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md033_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md034_ipv6_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md034_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md035_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md036_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md037_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md038_nested_backticks_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md038_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md039_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md040_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md041_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md042_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md043_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md044_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md045_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md046_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md047_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md048_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md049_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md050_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md051_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md051_unicode_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md052_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md053_additional_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md053_proptest.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md053_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md054_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md054_unicode_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md055_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md056_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md057_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/md058_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules/mod.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/rules_mod_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/thread_safety_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/unicode_edge_case_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/utils/blockquote_utils_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/utils/code_block_utils_extended_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/utils/code_block_utils_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/utils/core_utils_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/utils/front_matter_utils_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/utils/line_index_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/utils/mod.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/utils_markdown_edge_cases.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/utils_tests.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/vscode_extension_fixes.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/vscode_test.rs +0 -0
- {rumdl-0.0.95 → rumdl-0.0.96}/tests/vscode_tests.rs +0 -0
|
@@ -7,8 +7,44 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.0.96] - 2025-07-16
|
|
11
|
+
|
|
12
|
+
## [0.0.96] - 2025-07-16
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
- MD013: Text reflow/wrapping functionality for automatic line breaking (fixes #13)
|
|
16
|
+
- New `enable_reflow` configuration option (disabled by default)
|
|
17
|
+
- Intelligently wraps long lines while preserving Markdown formatting
|
|
18
|
+
- Preserves bold, italic, links, code spans, and other Markdown elements
|
|
19
|
+
- Proper list continuation indentation that aligns with the text after markers
|
|
20
|
+
- Preserves hard line breaks (two trailing spaces)
|
|
21
|
+
- Does not wrap code blocks, tables, headings, or reference definitions
|
|
22
|
+
- Added `pulldown-cmark` dependency (v0.12.2) for improved Markdown parsing
|
|
23
|
+
- Comprehensive test coverage for text reflow functionality
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
- MD013: Enhanced fix functionality with optional text reflow (opt-in feature)
|
|
27
|
+
|
|
28
|
+
### Fixed
|
|
29
|
+
- MD013: Fixed list indentation to properly align continuation lines with the text content
|
|
30
|
+
|
|
10
31
|
## [0.0.95] - 2025-07-15
|
|
11
32
|
|
|
33
|
+
### Added
|
|
34
|
+
- Implemented 3-tier exit code system following Ruff's convention:
|
|
35
|
+
- Exit code 0: Success (no issues found)
|
|
36
|
+
- Exit code 1: Linting violations found
|
|
37
|
+
- Exit code 2: Tool error (config error, file access error, etc.)
|
|
38
|
+
- Added exit_codes module for cleaner exit code management
|
|
39
|
+
|
|
40
|
+
### Changed
|
|
41
|
+
- Updated all error handlers to use appropriate exit codes
|
|
42
|
+
- CI/CD systems can now distinguish between markdown issues (exit 1) and tool failures (exit 2)
|
|
43
|
+
|
|
44
|
+
### Documentation
|
|
45
|
+
- Updated README with exit code documentation
|
|
46
|
+
- Added exit codes section to CLI reference
|
|
47
|
+
|
|
12
48
|
## [0.0.94] - 2025-07-04
|
|
13
49
|
|
|
14
50
|
### Performance Improvements
|
|
@@ -149,7 +185,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
149
185
|
|
|
150
186
|
- Initial implementation of remaining rules for markdownlint parity
|
|
151
187
|
|
|
152
|
-
[Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.
|
|
188
|
+
[Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.96...HEAD
|
|
189
|
+
[0.0.96]: https://github.com/rvben/rumdl/compare/v0.0.95...v0.0.96
|
|
153
190
|
[0.0.95]: https://github.com/rvben/rumdl/compare/v0.0.94...v0.0.95
|
|
154
191
|
[0.0.94]: https://github.com/rvben/rumdl/compare/v0.0.93...v0.0.94
|
|
155
192
|
[0.0.93]: https://github.com/rvben/rumdl/compare/v0.0.92...v0.0.93
|
|
@@ -614,6 +614,15 @@ dependencies = [
|
|
|
614
614
|
"slab",
|
|
615
615
|
]
|
|
616
616
|
|
|
617
|
+
[[package]]
|
|
618
|
+
name = "getopts"
|
|
619
|
+
version = "0.2.23"
|
|
620
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
621
|
+
checksum = "cba6ae63eb948698e300f645f87c70f76630d505f23b8907cf1e193ee85048c1"
|
|
622
|
+
dependencies = [
|
|
623
|
+
"unicode-width",
|
|
624
|
+
]
|
|
625
|
+
|
|
617
626
|
[[package]]
|
|
618
627
|
name = "getrandom"
|
|
619
628
|
version = "0.3.3"
|
|
@@ -1283,6 +1292,25 @@ dependencies = [
|
|
|
1283
1292
|
"unarray",
|
|
1284
1293
|
]
|
|
1285
1294
|
|
|
1295
|
+
[[package]]
|
|
1296
|
+
name = "pulldown-cmark"
|
|
1297
|
+
version = "0.12.2"
|
|
1298
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1299
|
+
checksum = "f86ba2052aebccc42cbbb3ed234b8b13ce76f75c3551a303cb2bcffcff12bb14"
|
|
1300
|
+
dependencies = [
|
|
1301
|
+
"bitflags 2.9.1",
|
|
1302
|
+
"getopts",
|
|
1303
|
+
"memchr",
|
|
1304
|
+
"pulldown-cmark-escape",
|
|
1305
|
+
"unicase",
|
|
1306
|
+
]
|
|
1307
|
+
|
|
1308
|
+
[[package]]
|
|
1309
|
+
name = "pulldown-cmark-escape"
|
|
1310
|
+
version = "0.11.0"
|
|
1311
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1312
|
+
checksum = "007d8adb5ddab6f8e3f491ac63566a7d5002cc7ed73901f72057943fa71ae1ae"
|
|
1313
|
+
|
|
1286
1314
|
[[package]]
|
|
1287
1315
|
name = "pyo3"
|
|
1288
1316
|
version = "0.24.2"
|
|
@@ -1465,7 +1493,7 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
|
|
|
1465
1493
|
|
|
1466
1494
|
[[package]]
|
|
1467
1495
|
name = "rumdl"
|
|
1468
|
-
version = "0.0.
|
|
1496
|
+
version = "0.0.96"
|
|
1469
1497
|
dependencies = [
|
|
1470
1498
|
"anyhow",
|
|
1471
1499
|
"assert_cmd",
|
|
@@ -1488,6 +1516,7 @@ dependencies = [
|
|
|
1488
1516
|
"predicates",
|
|
1489
1517
|
"pretty_assertions",
|
|
1490
1518
|
"proptest",
|
|
1519
|
+
"pulldown-cmark",
|
|
1491
1520
|
"pyo3",
|
|
1492
1521
|
"rand",
|
|
1493
1522
|
"rayon",
|
|
@@ -1986,6 +2015,12 @@ version = "0.1.4"
|
|
|
1986
2015
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1987
2016
|
checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94"
|
|
1988
2017
|
|
|
2018
|
+
[[package]]
|
|
2019
|
+
name = "unicase"
|
|
2020
|
+
version = "2.8.1"
|
|
2021
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2022
|
+
checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539"
|
|
2023
|
+
|
|
1989
2024
|
[[package]]
|
|
1990
2025
|
name = "unicode-bidi"
|
|
1991
2026
|
version = "0.3.18"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "rumdl"
|
|
3
|
-
version = "0.0.
|
|
3
|
+
version = "0.0.96"
|
|
4
4
|
edition = "2024"
|
|
5
5
|
rust-version = "1.88.0"
|
|
6
6
|
description = "A fast Markdown linter written in Rust (Ru(st) MarkDown Linter)"
|
|
@@ -68,6 +68,7 @@ globset = "0.4.16"
|
|
|
68
68
|
anyhow = "1.0"
|
|
69
69
|
log = "0.4.27"
|
|
70
70
|
markdown = "1.0"
|
|
71
|
+
pulldown-cmark = "0.12.2"
|
|
71
72
|
regex = "1.11"
|
|
72
73
|
toml_edit = "0.22"
|
|
73
74
|
dyn-clone = "1"
|
|
@@ -36,6 +36,10 @@ pub struct MD013Config {
|
|
|
36
36
|
/// Stern mode - stricter checking without exceptions (default: false)
|
|
37
37
|
#[serde(default)]
|
|
38
38
|
pub stern: bool,
|
|
39
|
+
|
|
40
|
+
/// Enable text reflow to wrap long lines (default: false)
|
|
41
|
+
#[serde(default)]
|
|
42
|
+
pub enable_reflow: bool,
|
|
39
43
|
}
|
|
40
44
|
|
|
41
45
|
fn default_line_length() -> usize {
|
|
@@ -65,6 +69,7 @@ impl Default for MD013Config {
|
|
|
65
69
|
heading_line_length: None,
|
|
66
70
|
code_block_line_length: None,
|
|
67
71
|
stern: false,
|
|
72
|
+
enable_reflow: false,
|
|
68
73
|
}
|
|
69
74
|
}
|
|
70
75
|
}
|
|
@@ -51,6 +51,7 @@ impl MD013LineLength {
|
|
|
51
51
|
heading_line_length: None,
|
|
52
52
|
code_block_line_length: None,
|
|
53
53
|
stern: false,
|
|
54
|
+
enable_reflow: false,
|
|
54
55
|
},
|
|
55
56
|
}
|
|
56
57
|
}
|
|
@@ -333,6 +334,18 @@ impl Rule for MD013LineLength {
|
|
|
333
334
|
}
|
|
334
335
|
|
|
335
336
|
fn fix(&self, ctx: &crate::lint_context::LintContext) -> Result<String, LintError> {
|
|
337
|
+
// If reflow is enabled, use the new text reflow functionality
|
|
338
|
+
if self.config.enable_reflow {
|
|
339
|
+
let reflow_options = crate::utils::text_reflow::ReflowOptions {
|
|
340
|
+
line_length: self.config.line_length,
|
|
341
|
+
break_on_sentences: true,
|
|
342
|
+
preserve_breaks: false,
|
|
343
|
+
};
|
|
344
|
+
|
|
345
|
+
return Ok(crate::utils::text_reflow::reflow_markdown(ctx.content, &reflow_options));
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
// Otherwise, use the existing fix logic (trimming whitespace)
|
|
336
349
|
// Get all warnings with their fixes
|
|
337
350
|
let warnings = self.check(ctx)?;
|
|
338
351
|
|
|
@@ -907,4 +920,132 @@ Another long line that should trigger a warning."#;
|
|
|
907
920
|
// Should not flag because the URL is in a markdown link
|
|
908
921
|
assert_eq!(result.len(), 0);
|
|
909
922
|
}
|
|
923
|
+
|
|
924
|
+
#[test]
|
|
925
|
+
fn test_text_reflow_simple() {
|
|
926
|
+
let mut config = MD013Config::default();
|
|
927
|
+
config.line_length = 30;
|
|
928
|
+
config.enable_reflow = true;
|
|
929
|
+
let rule = MD013LineLength::from_config_struct(config);
|
|
930
|
+
|
|
931
|
+
let content = "This is a very long line that definitely exceeds thirty characters and needs to be wrapped.";
|
|
932
|
+
let ctx = LintContext::new(content);
|
|
933
|
+
|
|
934
|
+
let fixed = rule.fix(&ctx).unwrap();
|
|
935
|
+
|
|
936
|
+
// Verify all lines are under 30 chars
|
|
937
|
+
for line in fixed.lines() {
|
|
938
|
+
assert!(line.chars().count() <= 30, "Line too long: {} (len={})", line, line.chars().count());
|
|
939
|
+
}
|
|
940
|
+
|
|
941
|
+
// Verify content is preserved
|
|
942
|
+
let fixed_words: Vec<&str> = fixed.split_whitespace().collect();
|
|
943
|
+
let original_words: Vec<&str> = content.split_whitespace().collect();
|
|
944
|
+
assert_eq!(fixed_words, original_words);
|
|
945
|
+
}
|
|
946
|
+
|
|
947
|
+
#[test]
|
|
948
|
+
fn test_text_reflow_preserves_markdown_elements() {
|
|
949
|
+
let mut config = MD013Config::default();
|
|
950
|
+
config.line_length = 40;
|
|
951
|
+
config.enable_reflow = true;
|
|
952
|
+
let rule = MD013LineLength::from_config_struct(config);
|
|
953
|
+
|
|
954
|
+
let content = "This paragraph has **bold text** and *italic text* and [a link](https://example.com) that should be preserved.";
|
|
955
|
+
let ctx = LintContext::new(content);
|
|
956
|
+
|
|
957
|
+
let fixed = rule.fix(&ctx).unwrap();
|
|
958
|
+
|
|
959
|
+
// Verify markdown elements are preserved
|
|
960
|
+
assert!(fixed.contains("**bold text**"), "Bold text not preserved in: {}", fixed);
|
|
961
|
+
assert!(fixed.contains("*italic text*"), "Italic text not preserved in: {}", fixed);
|
|
962
|
+
assert!(fixed.contains("[a link](https://example.com)"), "Link not preserved in: {}", fixed);
|
|
963
|
+
|
|
964
|
+
// Verify all lines are under 40 chars
|
|
965
|
+
for line in fixed.lines() {
|
|
966
|
+
assert!(line.len() <= 40, "Line too long: {}", line);
|
|
967
|
+
}
|
|
968
|
+
}
|
|
969
|
+
|
|
970
|
+
#[test]
|
|
971
|
+
fn test_text_reflow_preserves_code_blocks() {
|
|
972
|
+
let mut config = MD013Config::default();
|
|
973
|
+
config.line_length = 30;
|
|
974
|
+
config.enable_reflow = true;
|
|
975
|
+
let rule = MD013LineLength::from_config_struct(config);
|
|
976
|
+
|
|
977
|
+
let content = r#"Here is some text.
|
|
978
|
+
|
|
979
|
+
```python
|
|
980
|
+
def very_long_function_name_that_exceeds_limit():
|
|
981
|
+
return "This should not be wrapped"
|
|
982
|
+
```
|
|
983
|
+
|
|
984
|
+
More text after code block."#;
|
|
985
|
+
let ctx = LintContext::new(content);
|
|
986
|
+
|
|
987
|
+
let fixed = rule.fix(&ctx).unwrap();
|
|
988
|
+
|
|
989
|
+
// Verify code block is preserved
|
|
990
|
+
assert!(fixed.contains("def very_long_function_name_that_exceeds_limit():"));
|
|
991
|
+
assert!(fixed.contains("```python"));
|
|
992
|
+
assert!(fixed.contains("```"));
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
#[test]
|
|
996
|
+
fn test_text_reflow_preserves_lists() {
|
|
997
|
+
let mut config = MD013Config::default();
|
|
998
|
+
config.line_length = 30;
|
|
999
|
+
config.enable_reflow = true;
|
|
1000
|
+
let rule = MD013LineLength::from_config_struct(config);
|
|
1001
|
+
|
|
1002
|
+
let content = r#"Here is a list:
|
|
1003
|
+
|
|
1004
|
+
1. First item with a very long line that needs wrapping
|
|
1005
|
+
2. Second item is short
|
|
1006
|
+
3. Third item also has a long line that exceeds the limit
|
|
1007
|
+
|
|
1008
|
+
And a bullet list:
|
|
1009
|
+
|
|
1010
|
+
- Bullet item with very long content that needs wrapping
|
|
1011
|
+
- Short bullet"#;
|
|
1012
|
+
let ctx = LintContext::new(content);
|
|
1013
|
+
|
|
1014
|
+
let fixed = rule.fix(&ctx).unwrap();
|
|
1015
|
+
|
|
1016
|
+
// Verify list structure is preserved
|
|
1017
|
+
assert!(fixed.contains("1. "));
|
|
1018
|
+
assert!(fixed.contains("2. "));
|
|
1019
|
+
assert!(fixed.contains("3. "));
|
|
1020
|
+
assert!(fixed.contains("- "));
|
|
1021
|
+
|
|
1022
|
+
// Verify proper indentation for wrapped lines
|
|
1023
|
+
let lines: Vec<&str> = fixed.lines().collect();
|
|
1024
|
+
for (i, line) in lines.iter().enumerate() {
|
|
1025
|
+
if line.trim().starts_with("1.") || line.trim().starts_with("2.") ||
|
|
1026
|
+
line.trim().starts_with("3.") || line.trim().starts_with("-") {
|
|
1027
|
+
// Check if next line is a continuation (should be indented)
|
|
1028
|
+
if i + 1 < lines.len() && !lines[i + 1].trim().is_empty() &&
|
|
1029
|
+
!lines[i + 1].trim().starts_with(char::is_numeric) &&
|
|
1030
|
+
!lines[i + 1].trim().starts_with("-") {
|
|
1031
|
+
// Continuation lines should have proper indentation
|
|
1032
|
+
assert!(lines[i + 1].starts_with(" ") || lines[i + 1].trim().is_empty());
|
|
1033
|
+
}
|
|
1034
|
+
}
|
|
1035
|
+
}
|
|
1036
|
+
}
|
|
1037
|
+
|
|
1038
|
+
#[test]
|
|
1039
|
+
fn test_text_reflow_disabled_by_default() {
|
|
1040
|
+
let rule = MD013LineLength::new(30, false, false, false, false);
|
|
1041
|
+
|
|
1042
|
+
let content = "This is a very long line that definitely exceeds thirty characters.";
|
|
1043
|
+
let ctx = LintContext::new(content);
|
|
1044
|
+
|
|
1045
|
+
let fixed = rule.fix(&ctx).unwrap();
|
|
1046
|
+
|
|
1047
|
+
// Without reflow enabled, it should only trim whitespace (if any)
|
|
1048
|
+
// Since there's no trailing whitespace, content should be unchanged
|
|
1049
|
+
assert_eq!(fixed, content);
|
|
1050
|
+
}
|
|
910
1051
|
}
|