rumdl 0.0.119__tar.gz → 0.0.120__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.

Files changed (388) hide show
  1. {rumdl-0.0.119 → rumdl-0.0.120}/CHANGELOG.md +4 -1
  2. {rumdl-0.0.119 → rumdl-0.0.120}/Cargo.lock +13 -13
  3. {rumdl-0.0.119 → rumdl-0.0.120}/Cargo.toml +1 -1
  4. {rumdl-0.0.119 → rumdl-0.0.120}/PKG-INFO +1 -1
  5. {rumdl-0.0.119 → rumdl-0.0.120}/src/lint_context.rs +244 -56
  6. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md029_ordered_list_prefix.rs +81 -48
  7. {rumdl-0.0.119 → rumdl-0.0.120}/src/utils/code_block_utils.rs +113 -0
  8. rumdl-0.0.120/tests/rules/md029_code_block_separation_test.rs +304 -0
  9. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md029_issue42_test.rs +21 -20
  10. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md029_test.rs +317 -12
  11. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md029_unicode_test.rs +2 -2
  12. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/mod.rs +2 -0
  13. {rumdl-0.0.119 → rumdl-0.0.120}/.config/nextest.toml +0 -0
  14. {rumdl-0.0.119 → rumdl-0.0.120}/.mise.toml +0 -0
  15. {rumdl-0.0.119 → rumdl-0.0.120}/.pre-commit-config.yaml +0 -0
  16. {rumdl-0.0.119 → rumdl-0.0.120}/.rumdl.toml +0 -0
  17. {rumdl-0.0.119 → rumdl-0.0.120}/.rustfmt.toml +0 -0
  18. {rumdl-0.0.119 → rumdl-0.0.120}/LICENSE +0 -0
  19. {rumdl-0.0.119 → rumdl-0.0.120}/MANIFEST.in +0 -0
  20. {rumdl-0.0.119 → rumdl-0.0.120}/Makefile +0 -0
  21. {rumdl-0.0.119 → rumdl-0.0.120}/README.md +0 -0
  22. {rumdl-0.0.119 → rumdl-0.0.120}/assets/logo.png +0 -0
  23. {rumdl-0.0.119 → rumdl-0.0.120}/benches/fix_performance.rs +0 -0
  24. {rumdl-0.0.119 → rumdl-0.0.120}/benches/range_performance.rs +0 -0
  25. {rumdl-0.0.119 → rumdl-0.0.120}/benches/range_utils_benchmark.rs +0 -0
  26. {rumdl-0.0.119 → rumdl-0.0.120}/benches/rule_performance.rs +0 -0
  27. {rumdl-0.0.119 → rumdl-0.0.120}/benches/simple_fix_bench.rs +0 -0
  28. {rumdl-0.0.119 → rumdl-0.0.120}/benchmark/bin/bench_lint_context.rs +0 -0
  29. {rumdl-0.0.119 → rumdl-0.0.120}/benchmark/bin/benchmark.rs +0 -0
  30. {rumdl-0.0.119 → rumdl-0.0.120}/benchmark/bin/benchmark_rule.rs +0 -0
  31. {rumdl-0.0.119 → rumdl-0.0.120}/benchmark/bin/file_parallel_benchmark.rs +0 -0
  32. {rumdl-0.0.119 → rumdl-0.0.120}/benchmark/bin/measure_code_span_performance.rs +0 -0
  33. {rumdl-0.0.119 → rumdl-0.0.120}/docs/RULES.md +0 -0
  34. {rumdl-0.0.119 → rumdl-0.0.120}/docs/global-settings.md +0 -0
  35. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md001.md +0 -0
  36. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md002.md +0 -0
  37. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md003.md +0 -0
  38. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md004.md +0 -0
  39. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md005.md +0 -0
  40. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md006.md +0 -0
  41. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md007.md +0 -0
  42. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md009.md +0 -0
  43. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md010.md +0 -0
  44. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md011.md +0 -0
  45. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md012.md +0 -0
  46. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md013.md +0 -0
  47. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md014.md +0 -0
  48. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md018.md +0 -0
  49. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md019.md +0 -0
  50. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md020.md +0 -0
  51. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md021.md +0 -0
  52. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md022.md +0 -0
  53. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md023.md +0 -0
  54. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md024.md +0 -0
  55. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md025.md +0 -0
  56. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md026.md +0 -0
  57. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md027.md +0 -0
  58. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md028.md +0 -0
  59. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md029.md +0 -0
  60. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md030.md +0 -0
  61. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md031.md +0 -0
  62. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md032.md +0 -0
  63. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md033.md +0 -0
  64. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md034.md +0 -0
  65. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md035.md +0 -0
  66. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md036.md +0 -0
  67. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md037.md +0 -0
  68. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md038.md +0 -0
  69. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md039.md +0 -0
  70. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md040.md +0 -0
  71. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md041.md +0 -0
  72. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md042.md +0 -0
  73. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md043.md +0 -0
  74. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md044.md +0 -0
  75. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md045.md +0 -0
  76. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md046.md +0 -0
  77. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md047.md +0 -0
  78. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md048.md +0 -0
  79. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md049.md +0 -0
  80. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md050.md +0 -0
  81. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md051.md +0 -0
  82. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md052.md +0 -0
  83. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md053.md +0 -0
  84. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md054.md +0 -0
  85. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md055.md +0 -0
  86. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md056.md +0 -0
  87. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md057.md +0 -0
  88. {rumdl-0.0.119 → rumdl-0.0.120}/docs/md058.md +0 -0
  89. {rumdl-0.0.119 → rumdl-0.0.120}/docs/vscode-extension.md +0 -0
  90. {rumdl-0.0.119 → rumdl-0.0.120}/parity_check.py +0 -0
  91. {rumdl-0.0.119 → rumdl-0.0.120}/pyproject.toml +0 -0
  92. {rumdl-0.0.119 → rumdl-0.0.120}/python/MANIFEST.in +0 -0
  93. {rumdl-0.0.119 → rumdl-0.0.120}/python/PYTHON-README.md +0 -0
  94. {rumdl-0.0.119 → rumdl-0.0.120}/python/rumdl/__init__.py +0 -0
  95. {rumdl-0.0.119 → rumdl-0.0.120}/python/rumdl/__main__.py +0 -0
  96. {rumdl-0.0.119 → rumdl-0.0.120}/python/rumdl/py.typed +0 -0
  97. {rumdl-0.0.119 → rumdl-0.0.120}/rumdl.toml.example +0 -0
  98. {rumdl-0.0.119 → rumdl-0.0.120}/rust-toolchain.toml +0 -0
  99. {rumdl-0.0.119 → rumdl-0.0.120}/scripts/extract-changelog.sh +0 -0
  100. {rumdl-0.0.119 → rumdl-0.0.120}/scripts/generate-downloads-table.sh +0 -0
  101. {rumdl-0.0.119 → rumdl-0.0.120}/scripts/pre-release.sh +0 -0
  102. {rumdl-0.0.119 → rumdl-0.0.120}/scripts/prepare-release.sh +0 -0
  103. {rumdl-0.0.119 → rumdl-0.0.120}/scripts/setup-pre-commit.sh +0 -0
  104. {rumdl-0.0.119 → rumdl-0.0.120}/scripts/update-pre-commit-docs.sh +0 -0
  105. {rumdl-0.0.119 → rumdl-0.0.120}/src/config.rs +0 -0
  106. {rumdl-0.0.119 → rumdl-0.0.120}/src/exit_codes.rs +0 -0
  107. {rumdl-0.0.119 → rumdl-0.0.120}/src/inline_config.rs +0 -0
  108. {rumdl-0.0.119 → rumdl-0.0.120}/src/lib.rs +0 -0
  109. {rumdl-0.0.119 → rumdl-0.0.120}/src/lsp/mod.rs +0 -0
  110. {rumdl-0.0.119 → rumdl-0.0.120}/src/lsp/server.rs +0 -0
  111. {rumdl-0.0.119 → rumdl-0.0.120}/src/lsp/types.rs +0 -0
  112. {rumdl-0.0.119 → rumdl-0.0.120}/src/main.rs +0 -0
  113. {rumdl-0.0.119 → rumdl-0.0.120}/src/markdownlint_config.rs +0 -0
  114. {rumdl-0.0.119 → rumdl-0.0.120}/src/output/formatters/azure.rs +0 -0
  115. {rumdl-0.0.119 → rumdl-0.0.120}/src/output/formatters/concise.rs +0 -0
  116. {rumdl-0.0.119 → rumdl-0.0.120}/src/output/formatters/github.rs +0 -0
  117. {rumdl-0.0.119 → rumdl-0.0.120}/src/output/formatters/gitlab.rs +0 -0
  118. {rumdl-0.0.119 → rumdl-0.0.120}/src/output/formatters/grouped.rs +0 -0
  119. {rumdl-0.0.119 → rumdl-0.0.120}/src/output/formatters/json.rs +0 -0
  120. {rumdl-0.0.119 → rumdl-0.0.120}/src/output/formatters/json_lines.rs +0 -0
  121. {rumdl-0.0.119 → rumdl-0.0.120}/src/output/formatters/junit.rs +0 -0
  122. {rumdl-0.0.119 → rumdl-0.0.120}/src/output/formatters/mod.rs +0 -0
  123. {rumdl-0.0.119 → rumdl-0.0.120}/src/output/formatters/pylint.rs +0 -0
  124. {rumdl-0.0.119 → rumdl-0.0.120}/src/output/formatters/sarif.rs +0 -0
  125. {rumdl-0.0.119 → rumdl-0.0.120}/src/output/formatters/text.rs +0 -0
  126. {rumdl-0.0.119 → rumdl-0.0.120}/src/output/mod.rs +0 -0
  127. {rumdl-0.0.119 → rumdl-0.0.120}/src/parallel.rs +0 -0
  128. {rumdl-0.0.119 → rumdl-0.0.120}/src/performance.rs +0 -0
  129. {rumdl-0.0.119 → rumdl-0.0.120}/src/profiling.rs +0 -0
  130. {rumdl-0.0.119 → rumdl-0.0.120}/src/python.rs +0 -0
  131. {rumdl-0.0.119 → rumdl-0.0.120}/src/rule.rs +0 -0
  132. {rumdl-0.0.119 → rumdl-0.0.120}/src/rule_config.rs +0 -0
  133. {rumdl-0.0.119 → rumdl-0.0.120}/src/rule_config_serde.rs +0 -0
  134. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/blockquote_utils.rs +0 -0
  135. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/code_block_utils.rs +0 -0
  136. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/code_fence_utils.rs +0 -0
  137. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/emphasis_style.rs +0 -0
  138. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/front_matter_utils.rs +0 -0
  139. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/heading_utils.rs +0 -0
  140. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/list_utils.rs +0 -0
  141. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md001_heading_increment.rs +0 -0
  142. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md002_first_heading_h1/md002_config.rs +0 -0
  143. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md002_first_heading_h1.rs +0 -0
  144. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md003_heading_style/md003_config.rs +0 -0
  145. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md003_heading_style.rs +0 -0
  146. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md004_unordered_list_style/md004_config.rs +0 -0
  147. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md004_unordered_list_style.rs +0 -0
  148. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md005_list_indent.rs +0 -0
  149. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md006_start_bullets.rs +0 -0
  150. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md007_ul_indent/md007_config.rs +0 -0
  151. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md007_ul_indent.rs +0 -0
  152. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md009_trailing_spaces/md009_config.rs +0 -0
  153. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md009_trailing_spaces.rs +0 -0
  154. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md010_no_hard_tabs/md010_config.rs +0 -0
  155. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md010_no_hard_tabs.rs +0 -0
  156. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md011_no_reversed_links.rs +0 -0
  157. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md012_no_multiple_blanks/md012_config.rs +0 -0
  158. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md012_no_multiple_blanks.rs +0 -0
  159. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md013_line_length/md013_config.rs +0 -0
  160. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md013_line_length.rs +0 -0
  161. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md014_commands_show_output/md014_config.rs +0 -0
  162. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md014_commands_show_output.rs +0 -0
  163. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md018_no_missing_space_atx.rs +0 -0
  164. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md019_no_multiple_space_atx.rs +0 -0
  165. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
  166. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
  167. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md022_blanks_around_headings/md022_config.rs +0 -0
  168. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md022_blanks_around_headings.rs +0 -0
  169. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md023_heading_start_left.rs +0 -0
  170. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md024_no_duplicate_heading/md024_config.rs +0 -0
  171. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md024_no_duplicate_heading.rs +0 -0
  172. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md025_single_title/md025_config.rs +0 -0
  173. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md025_single_title.rs +0 -0
  174. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md026_no_trailing_punctuation/md026_config.rs +0 -0
  175. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md026_no_trailing_punctuation.rs +0 -0
  176. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
  177. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md028_no_blanks_blockquote.rs +0 -0
  178. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md029_ordered_list_prefix/md029_config.rs +0 -0
  179. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md030_list_marker_space/md030_config.rs +0 -0
  180. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md030_list_marker_space.rs +0 -0
  181. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md031_blanks_around_fences.rs +0 -0
  182. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md032_blanks_around_lists.rs +0 -0
  183. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md033_no_inline_html/md033_config.rs +0 -0
  184. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md033_no_inline_html.rs +0 -0
  185. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md034_no_bare_urls.rs +0 -0
  186. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md035_hr_style/md035_config.rs +0 -0
  187. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md035_hr_style.rs +0 -0
  188. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md036_no_emphasis_only_first/md036_config.rs +0 -0
  189. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md036_no_emphasis_only_first.rs +0 -0
  190. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md037_spaces_around_emphasis.rs +0 -0
  191. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md038_no_space_in_code.rs +0 -0
  192. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md039_no_space_in_links.rs +0 -0
  193. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md040_fenced_code_language.rs +0 -0
  194. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md041_first_line_heading.rs +0 -0
  195. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md042_no_empty_links.rs +0 -0
  196. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md043_required_headings.rs +0 -0
  197. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md044_proper_names/md044_config.rs +0 -0
  198. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md044_proper_names.rs +0 -0
  199. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md045_no_alt_text/md045_config.rs +0 -0
  200. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md045_no_alt_text.rs +0 -0
  201. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md046_code_block_style/md046_config.rs +0 -0
  202. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md046_code_block_style.rs +0 -0
  203. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md047_single_trailing_newline.rs +0 -0
  204. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md048_code_fence_style/md048_config.rs +0 -0
  205. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md048_code_fence_style.rs +0 -0
  206. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md049_emphasis_style/md049_config.rs +0 -0
  207. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md049_emphasis_style.rs +0 -0
  208. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md050_strong_style/md050_config.rs +0 -0
  209. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md050_strong_style.rs +0 -0
  210. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md051_link_fragments.rs +0 -0
  211. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md052_reference_links_images.rs +0 -0
  212. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md053_link_image_reference_definitions.rs +0 -0
  213. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md054_link_image_style/md054_config.rs +0 -0
  214. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md054_link_image_style.rs +0 -0
  215. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md055_table_pipe_style/md055_config.rs +0 -0
  216. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md055_table_pipe_style.rs +0 -0
  217. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md056_table_column_count.rs +0 -0
  218. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md057_existing_relative_links/md057_config.rs +0 -0
  219. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md057_existing_relative_links.rs +0 -0
  220. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/md058_blanks_around_tables.rs +0 -0
  221. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/mod.rs +0 -0
  222. {rumdl-0.0.119 → rumdl-0.0.120}/src/rules/strong_style.rs +0 -0
  223. {rumdl-0.0.119 → rumdl-0.0.120}/src/utils/ast_utils.rs +0 -0
  224. {rumdl-0.0.119 → rumdl-0.0.120}/src/utils/document_structure.rs +0 -0
  225. {rumdl-0.0.119 → rumdl-0.0.120}/src/utils/early_returns.rs +0 -0
  226. {rumdl-0.0.119 → rumdl-0.0.120}/src/utils/element_cache.rs +0 -0
  227. {rumdl-0.0.119 → rumdl-0.0.120}/src/utils/emphasis_utils.rs +0 -0
  228. {rumdl-0.0.119 → rumdl-0.0.120}/src/utils/fix_utils.rs +0 -0
  229. {rumdl-0.0.119 → rumdl-0.0.120}/src/utils/header_id_utils.rs +0 -0
  230. {rumdl-0.0.119 → rumdl-0.0.120}/src/utils/kramdown_utils.rs +0 -0
  231. {rumdl-0.0.119 → rumdl-0.0.120}/src/utils/markdown_elements.rs +0 -0
  232. {rumdl-0.0.119 → rumdl-0.0.120}/src/utils/mod.rs +0 -0
  233. {rumdl-0.0.119 → rumdl-0.0.120}/src/utils/range_utils.rs +0 -0
  234. {rumdl-0.0.119 → rumdl-0.0.120}/src/utils/regex_cache.rs +0 -0
  235. {rumdl-0.0.119 → rumdl-0.0.120}/src/utils/skip_context.rs +0 -0
  236. {rumdl-0.0.119 → rumdl-0.0.120}/src/utils/string_interner.rs +0 -0
  237. {rumdl-0.0.119 → rumdl-0.0.120}/src/utils/table_utils.rs +0 -0
  238. {rumdl-0.0.119 → rumdl-0.0.120}/src/utils/text_reflow.rs +0 -0
  239. {rumdl-0.0.119 → rumdl-0.0.120}/src/vscode.rs +0 -0
  240. {rumdl-0.0.119 → rumdl-0.0.120}/tests/advanced_integration_tests.rs +0 -0
  241. {rumdl-0.0.119 → rumdl-0.0.120}/tests/character_ranges/additional_tests.rs +0 -0
  242. {rumdl-0.0.119 → rumdl-0.0.120}/tests/character_ranges/basic_tests.rs +0 -0
  243. {rumdl-0.0.119 → rumdl-0.0.120}/tests/character_ranges/comprehensive_tests.rs +0 -0
  244. {rumdl-0.0.119 → rumdl-0.0.120}/tests/character_ranges/extended_tests.rs +0 -0
  245. {rumdl-0.0.119 → rumdl-0.0.120}/tests/character_ranges/mod.rs +0 -0
  246. {rumdl-0.0.119 → rumdl-0.0.120}/tests/character_ranges/unicode_utils.rs +0 -0
  247. {rumdl-0.0.119 → rumdl-0.0.120}/tests/cli_duplication_test.rs +0 -0
  248. {rumdl-0.0.119 → rumdl-0.0.120}/tests/cli_explain_test.rs +0 -0
  249. {rumdl-0.0.119 → rumdl-0.0.120}/tests/cli_flag_precedence_test.rs +0 -0
  250. {rumdl-0.0.119 → rumdl-0.0.120}/tests/cli_integration_tests.rs +0 -0
  251. {rumdl-0.0.119 → rumdl-0.0.120}/tests/cli_lsp_fix_consistency.rs +0 -0
  252. {rumdl-0.0.119 → rumdl-0.0.120}/tests/cli_statistics_test.rs +0 -0
  253. {rumdl-0.0.119 → rumdl-0.0.120}/tests/common/cli_test_utils.rs +0 -0
  254. {rumdl-0.0.119 → rumdl-0.0.120}/tests/common/fixtures.rs +0 -0
  255. {rumdl-0.0.119 → rumdl-0.0.120}/tests/common/mod.rs +0 -0
  256. {rumdl-0.0.119 → rumdl-0.0.120}/tests/common/test_utils.rs +0 -0
  257. {rumdl-0.0.119 → rumdl-0.0.120}/tests/commonmark_compliance_tests.rs +0 -0
  258. {rumdl-0.0.119 → rumdl-0.0.120}/tests/comprehensive_integration_tests.rs +0 -0
  259. {rumdl-0.0.119 → rumdl-0.0.120}/tests/comprehensive_output_format_tests.rs +0 -0
  260. {rumdl-0.0.119 → rumdl-0.0.120}/tests/config_application_tests.rs +0 -0
  261. {rumdl-0.0.119 → rumdl-0.0.120}/tests/config_file_command_test.rs +0 -0
  262. {rumdl-0.0.119 → rumdl-0.0.120}/tests/config_tests.rs +0 -0
  263. {rumdl-0.0.119 → rumdl-0.0.120}/tests/configuration_inheritance_tests.rs +0 -0
  264. {rumdl-0.0.119 → rumdl-0.0.120}/tests/consistency_regression_tests.rs +0 -0
  265. {rumdl-0.0.119 → rumdl-0.0.120}/tests/cross_platform_compatibility_tests.rs +0 -0
  266. {rumdl-0.0.119 → rumdl-0.0.120}/tests/deeply_nested_lists_performance_test.rs +0 -0
  267. {rumdl-0.0.119 → rumdl-0.0.120}/tests/escaped_brackets_test.rs +0 -0
  268. {rumdl-0.0.119 → rumdl-0.0.120}/tests/final_confidence_assessment.rs +0 -0
  269. {rumdl-0.0.119 → rumdl-0.0.120}/tests/fixable_unfixable_config_test.rs +0 -0
  270. {rumdl-0.0.119 → rumdl-0.0.120}/tests/init_command_test.rs +0 -0
  271. {rumdl-0.0.119 → rumdl-0.0.120}/tests/init_tests.rs +0 -0
  272. {rumdl-0.0.119 → rumdl-0.0.120}/tests/inline_config_blocks_test.rs +0 -0
  273. {rumdl-0.0.119 → rumdl-0.0.120}/tests/inline_config_test.rs +0 -0
  274. {rumdl-0.0.119 → rumdl-0.0.120}/tests/integration_tests.rs +0 -0
  275. {rumdl-0.0.119 → rumdl-0.0.120}/tests/json_output_test.rs +0 -0
  276. {rumdl-0.0.119 → rumdl-0.0.120}/tests/kramdown_integration_test.rs +0 -0
  277. {rumdl-0.0.119 → rumdl-0.0.120}/tests/lib.rs +0 -0
  278. {rumdl-0.0.119 → rumdl-0.0.120}/tests/lsp_editor_integration_tests.rs +0 -0
  279. {rumdl-0.0.119 → rumdl-0.0.120}/tests/lsp_integration_tests.rs +0 -0
  280. {rumdl-0.0.119 → rumdl-0.0.120}/tests/lsp_memory_leak_tests.rs +0 -0
  281. {rumdl-0.0.119 → rumdl-0.0.120}/tests/lsp_tests.rs +0 -0
  282. {rumdl-0.0.119 → rumdl-0.0.120}/tests/malformed_markdown_stress_tests.rs +0 -0
  283. {rumdl-0.0.119 → rumdl-0.0.120}/tests/markdownlint_cli_integration.rs +0 -0
  284. {rumdl-0.0.119 → rumdl-0.0.120}/tests/markdownlint_config_test.rs +0 -0
  285. {rumdl-0.0.119 → rumdl-0.0.120}/tests/markdownlintignore_test.rs +0 -0
  286. {rumdl-0.0.119 → rumdl-0.0.120}/tests/md013_reflow_integration_test.rs +0 -0
  287. {rumdl-0.0.119 → rumdl-0.0.120}/tests/nested_code_block_test.rs +0 -0
  288. {rumdl-0.0.119 → rumdl-0.0.120}/tests/output_format_integration_tests.rs +0 -0
  289. {rumdl-0.0.119 → rumdl-0.0.120}/tests/output_format_tests.rs +0 -0
  290. {rumdl-0.0.119 → rumdl-0.0.120}/tests/perf_check.rs +0 -0
  291. {rumdl-0.0.119 → rumdl-0.0.120}/tests/performance_validation_tests.rs +0 -0
  292. {rumdl-0.0.119 → rumdl-0.0.120}/tests/pyproject_config_tests.rs +0 -0
  293. {rumdl-0.0.119 → rumdl-0.0.120}/tests/python_bindings_test.rs +0 -0
  294. {rumdl-0.0.119 → rumdl-0.0.120}/tests/real_world_repository_tests.rs +0 -0
  295. {rumdl-0.0.119 → rumdl-0.0.120}/tests/regression_prevention_tests.rs +0 -0
  296. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/emphasis_edge_cases_test.rs +0 -0
  297. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/heading_edge_cases_test.rs +0 -0
  298. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/inline_content_edge_cases_test.rs +0 -0
  299. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/link_edge_cases_test.rs +0 -0
  300. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/list_rules_integration_test.rs +0 -0
  301. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md001_test.rs +0 -0
  302. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md001_unicode_test.rs +0 -0
  303. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md002_test.rs +0 -0
  304. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md003_test.rs +0 -0
  305. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md004_test.rs +0 -0
  306. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md005_test.rs +0 -0
  307. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md005_unicode_test.rs +0 -0
  308. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md006_test.rs +0 -0
  309. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md006_unicode_test.rs +0 -0
  310. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md007_test.rs +0 -0
  311. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md009_test.rs +0 -0
  312. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md010_test.rs +0 -0
  313. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md011_test.rs +0 -0
  314. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md012_test.rs +0 -0
  315. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md013_test.rs +0 -0
  316. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md014_test.rs +0 -0
  317. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md018_test.rs +0 -0
  318. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md019_test.rs +0 -0
  319. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md020_test.rs +0 -0
  320. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md021_test.rs +0 -0
  321. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md022_test.rs +0 -0
  322. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md023_extended_test.rs +0 -0
  323. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md023_test.rs +0 -0
  324. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md024_test.rs +0 -0
  325. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md025_test.rs +0 -0
  326. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md026_kramdown_test.rs +0 -0
  327. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md026_test.rs +0 -0
  328. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md027_test.rs +0 -0
  329. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md028_test.rs +0 -0
  330. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md030_test.rs +0 -0
  331. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md031_kramdown_test.rs +0 -0
  332. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md031_test.rs +0 -0
  333. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md032_test.rs +0 -0
  334. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md033_extended_test.rs +0 -0
  335. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md033_kramdown_test.rs +0 -0
  336. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md033_test.rs +0 -0
  337. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md034_ipv6_test.rs +0 -0
  338. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md034_test.rs +0 -0
  339. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md035_test.rs +0 -0
  340. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md036_test.rs +0 -0
  341. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md037_kramdown_test.rs +0 -0
  342. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md037_test.rs +0 -0
  343. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md038_nested_backticks_test.rs +0 -0
  344. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md038_test.rs +0 -0
  345. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md039_test.rs +0 -0
  346. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md040_test.rs +0 -0
  347. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md041_test.rs +0 -0
  348. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md042_test.rs +0 -0
  349. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md043_test.rs +0 -0
  350. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md044_test.rs +0 -0
  351. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md045_test.rs +0 -0
  352. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md046_test.rs +0 -0
  353. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md047_test.rs +0 -0
  354. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md048_test.rs +0 -0
  355. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md049_test.rs +0 -0
  356. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md050_test.rs +0 -0
  357. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md051_issue_39_regression_test.rs +0 -0
  358. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md051_test.rs +0 -0
  359. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md051_unicode_test.rs +0 -0
  360. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md052_test.rs +0 -0
  361. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md053_additional_test.rs +0 -0
  362. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md053_proptest.rs +0 -0
  363. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md053_test.rs +0 -0
  364. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md054_test.rs +0 -0
  365. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md054_unicode_test.rs +0 -0
  366. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md055_test.rs +0 -0
  367. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md056_test.rs +0 -0
  368. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md057_test.rs +0 -0
  369. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md058_kramdown_test.rs +0 -0
  370. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules/md058_test.rs +0 -0
  371. {rumdl-0.0.119 → rumdl-0.0.120}/tests/rules_mod_test.rs +0 -0
  372. {rumdl-0.0.119 → rumdl-0.0.120}/tests/skip_context_tests.rs +0 -0
  373. {rumdl-0.0.119 → rumdl-0.0.120}/tests/thread_safety_tests.rs +0 -0
  374. {rumdl-0.0.119 → rumdl-0.0.120}/tests/unicode_edge_case_tests.rs +0 -0
  375. {rumdl-0.0.119 → rumdl-0.0.120}/tests/utils/blockquote_utils_test.rs +0 -0
  376. {rumdl-0.0.119 → rumdl-0.0.120}/tests/utils/code_block_utils_extended_test.rs +0 -0
  377. {rumdl-0.0.119 → rumdl-0.0.120}/tests/utils/code_block_utils_test.rs +0 -0
  378. {rumdl-0.0.119 → rumdl-0.0.120}/tests/utils/core_utils_test.rs +0 -0
  379. {rumdl-0.0.119 → rumdl-0.0.120}/tests/utils/front_matter_utils_test.rs +0 -0
  380. {rumdl-0.0.119 → rumdl-0.0.120}/tests/utils/line_index_test.rs +0 -0
  381. {rumdl-0.0.119 → rumdl-0.0.120}/tests/utils/mod.rs +0 -0
  382. {rumdl-0.0.119 → rumdl-0.0.120}/tests/utils_markdown_edge_cases.rs +0 -0
  383. {rumdl-0.0.119 → rumdl-0.0.120}/tests/utils_tests.rs +0 -0
  384. {rumdl-0.0.119 → rumdl-0.0.120}/tests/vscode_extension_fixes.rs +0 -0
  385. {rumdl-0.0.119 → rumdl-0.0.120}/tests/vscode_test.rs +0 -0
  386. {rumdl-0.0.119 → rumdl-0.0.120}/tests/vscode_tests.rs +0 -0
  387. {rumdl-0.0.119 → rumdl-0.0.120}/tests/vscode_windows_comprehensive_test.rs +0 -0
  388. {rumdl-0.0.119 → rumdl-0.0.120}/tests/vscode_windows_test.rs +0 -0
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.0.120] - 2025-08-16
11
+
10
12
  ## [0.0.119] - 2025-08-15
11
13
 
12
14
  ### Fixed
@@ -351,7 +353,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
351
353
 
352
354
  - Initial implementation of remaining rules for markdownlint parity
353
355
 
354
- [Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.119...HEAD
356
+ [Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.120...HEAD
357
+ [0.0.120]: https://github.com/rvben/rumdl/compare/v0.0.119...v0.0.120
355
358
  [0.0.119]: https://github.com/rvben/rumdl/compare/v0.0.118...v0.0.119
356
359
  [0.0.118]: https://github.com/rvben/rumdl/compare/v0.0.117...v0.0.118
357
360
  [0.0.117]: https://github.com/rvben/rumdl/compare/v0.0.116...v0.0.117
@@ -185,9 +185,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
185
185
 
186
186
  [[package]]
187
187
  name = "bitflags"
188
- version = "2.9.1"
188
+ version = "2.9.2"
189
189
  source = "registry+https://github.com/rust-lang/crates.io-index"
190
- checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
190
+ checksum = "6a65b545ab31d687cff52899d4890855fec459eb6afe0da6417b8a18da87aa29"
191
191
 
192
192
  [[package]]
193
193
  name = "bstr"
@@ -220,9 +220,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
220
220
 
221
221
  [[package]]
222
222
  name = "cc"
223
- version = "1.2.32"
223
+ version = "1.2.33"
224
224
  source = "registry+https://github.com/rust-lang/crates.io-index"
225
- checksum = "2352e5597e9c544d5e6d9c95190d5d27738ade584fa8db0a16e130e5c2b5296e"
225
+ checksum = "3ee0f8803222ba5a7e2777dd72ca451868909b1ac410621b676adf07280e9b5f"
226
226
  dependencies = [
227
227
  "shlex",
228
228
  ]
@@ -863,7 +863,7 @@ version = "0.7.9"
863
863
  source = "registry+https://github.com/rust-lang/crates.io-index"
864
864
  checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4"
865
865
  dependencies = [
866
- "bitflags 2.9.1",
866
+ "bitflags 2.9.2",
867
867
  "cfg-if",
868
868
  "libc",
869
869
  ]
@@ -1280,7 +1280,7 @@ checksum = "6fcdab19deb5195a31cf7726a210015ff1496ba1464fd42cb4f537b8b01b471f"
1280
1280
  dependencies = [
1281
1281
  "bit-set",
1282
1282
  "bit-vec",
1283
- "bitflags 2.9.1",
1283
+ "bitflags 2.9.2",
1284
1284
  "lazy_static",
1285
1285
  "num-traits",
1286
1286
  "rand",
@@ -1298,7 +1298,7 @@ version = "0.12.2"
1298
1298
  source = "registry+https://github.com/rust-lang/crates.io-index"
1299
1299
  checksum = "f86ba2052aebccc42cbbb3ed234b8b13ce76f75c3551a303cb2bcffcff12bb14"
1300
1300
  dependencies = [
1301
- "bitflags 2.9.1",
1301
+ "bitflags 2.9.2",
1302
1302
  "getopts",
1303
1303
  "memchr",
1304
1304
  "pulldown-cmark-escape",
@@ -1459,7 +1459,7 @@ version = "0.5.17"
1459
1459
  source = "registry+https://github.com/rust-lang/crates.io-index"
1460
1460
  checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77"
1461
1461
  dependencies = [
1462
- "bitflags 2.9.1",
1462
+ "bitflags 2.9.2",
1463
1463
  ]
1464
1464
 
1465
1465
  [[package]]
@@ -1493,7 +1493,7 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
1493
1493
 
1494
1494
  [[package]]
1495
1495
  name = "rumdl"
1496
- version = "0.0.119"
1496
+ version = "0.0.120"
1497
1497
  dependencies = [
1498
1498
  "anyhow",
1499
1499
  "assert_cmd",
@@ -1555,7 +1555,7 @@ version = "1.0.8"
1555
1555
  source = "registry+https://github.com/rust-lang/crates.io-index"
1556
1556
  checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8"
1557
1557
  dependencies = [
1558
- "bitflags 2.9.1",
1558
+ "bitflags 2.9.2",
1559
1559
  "errno",
1560
1560
  "libc",
1561
1561
  "linux-raw-sys",
@@ -1723,9 +1723,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
1723
1723
 
1724
1724
  [[package]]
1725
1725
  name = "syn"
1726
- version = "2.0.105"
1726
+ version = "2.0.106"
1727
1727
  source = "registry+https://github.com/rust-lang/crates.io-index"
1728
- checksum = "7bc3fcb250e53458e712715cf74285c1f889686520d79294a9ef3bd7aa1fc619"
1728
+ checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
1729
1729
  dependencies = [
1730
1730
  "proc-macro2",
1731
1731
  "quote",
@@ -2434,7 +2434,7 @@ version = "0.39.0"
2434
2434
  source = "registry+https://github.com/rust-lang/crates.io-index"
2435
2435
  checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
2436
2436
  dependencies = [
2437
- "bitflags 2.9.1",
2437
+ "bitflags 2.9.2",
2438
2438
  ]
2439
2439
 
2440
2440
  [[package]]
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "rumdl"
3
- version = "0.0.119"
3
+ version = "0.0.120"
4
4
  edition = "2024"
5
5
  rust-version = "1.89.0"
6
6
  description = "A fast Markdown linter written in Rust (Ru(st) MarkDown Linter)"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rumdl
3
- Version: 0.0.119
3
+ Version: 0.0.120
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -1,4 +1,4 @@
1
- use crate::utils::code_block_utils::CodeBlockUtils;
1
+ use crate::utils::code_block_utils::{CodeBlockContext, CodeBlockUtils};
2
2
  use lazy_static::lazy_static;
3
3
  use regex::Regex;
4
4
 
@@ -1352,31 +1352,37 @@ impl<'a> LintContext<'a> {
1352
1352
  for (line_idx, line_info) in lines.iter().enumerate() {
1353
1353
  let line_num = line_idx + 1;
1354
1354
 
1355
- // Handle code blocks - they should continue the list if properly indented
1355
+ // Enhanced code block handling using Design #3's context analysis
1356
1356
  if line_info.in_code_block {
1357
1357
  if let Some(ref mut block) = current_block {
1358
- // For code blocks to continue a list, they need to be indented
1359
- // at least 2 spaces beyond the list marker
1360
1358
  // Calculate minimum indentation for list continuation
1361
- // For ordered lists, use the last marker width (e.g., 3 for "1. ", 4 for "10. ")
1362
- // For unordered lists like "- ", content starts at column 2, so continuations need at least 2 spaces
1363
- let min_continuation_indent = if block.is_ordered {
1364
- current_indent_level + last_marker_width
1365
- } else {
1366
- current_indent_level + 2 // Unordered lists need at least 2 spaces (e.g., "- " = 2 chars)
1367
- };
1359
+ let min_continuation_indent = CodeBlockUtils::calculate_min_continuation_indent(lines, line_idx);
1368
1360
 
1369
- if line_info.indent >= min_continuation_indent {
1370
- // Code blocks at list continuation level should continue the list
1371
- block.end_line = line_num;
1372
- continue;
1361
+ // Analyze code block context using the three-tier classification
1362
+ let context = CodeBlockUtils::analyze_code_block_context(lines, line_idx, min_continuation_indent);
1363
+
1364
+ match context {
1365
+ CodeBlockContext::Indented => {
1366
+ // Code block is properly indented - continues the list
1367
+ block.end_line = line_num;
1368
+ continue;
1369
+ }
1370
+ CodeBlockContext::Standalone => {
1371
+ // Code block separates lists - end current block
1372
+ let completed_block = current_block.take().unwrap();
1373
+ list_blocks.push(completed_block);
1374
+ continue;
1375
+ }
1376
+ CodeBlockContext::Adjacent => {
1377
+ // Edge case - use conservative behavior (continue list)
1378
+ block.end_line = line_num;
1379
+ continue;
1380
+ }
1373
1381
  }
1382
+ } else {
1383
+ // No current list block - skip code block lines
1384
+ continue;
1374
1385
  }
1375
- // If we have a current block and hit a non-indented code block, end it
1376
- if let Some(block) = current_block.take() {
1377
- list_blocks.push(block);
1378
- }
1379
- continue;
1380
1386
  }
1381
1387
 
1382
1388
  // Extract blockquote prefix if any
@@ -1409,17 +1415,18 @@ impl<'a> LintContext<'a> {
1409
1415
  // Check if there's non-list content between the last item and this one
1410
1416
  let has_non_list_content = {
1411
1417
  let mut found_non_list = false;
1412
- for check_line in (last_list_item_line + 1)..line_num {
1418
+ // Use the last item from the current block, not the global last_list_item_line
1419
+ let block_last_item_line = block.item_lines.last().copied().unwrap_or(block.end_line);
1420
+ for check_line in (block_last_item_line + 1)..line_num {
1413
1421
  let check_idx = check_line - 1;
1414
1422
  if check_idx < lines.len() {
1415
1423
  let check_info = &lines[check_idx];
1416
- if !check_info.is_blank && !check_info.in_code_block && check_info.list_item.is_none() {
1417
- // Found non-blank, non-list content
1418
- // Check if it's indented enough to be a continuation
1419
- // Get the marker width of the last list item
1424
+ // Check for content that breaks the list
1425
+ let is_list_breaking_content = if check_info.in_code_block {
1426
+ // Use enhanced code block classification for list separation
1420
1427
  let last_item_marker_width =
1421
- if last_list_item_line > 0 && last_list_item_line <= lines.len() {
1422
- lines[last_list_item_line - 1]
1428
+ if block_last_item_line > 0 && block_last_item_line <= lines.len() {
1429
+ lines[block_last_item_line - 1]
1423
1430
  .list_item
1424
1431
  .as_ref()
1425
1432
  .map(|li| {
@@ -1435,11 +1442,61 @@ impl<'a> LintContext<'a> {
1435
1442
  };
1436
1443
 
1437
1444
  let min_continuation = if block.is_ordered { last_item_marker_width } else { 2 };
1438
- if check_info.indent < min_continuation {
1439
- // Not indented enough, so it breaks the list
1440
- found_non_list = true;
1441
- break;
1445
+
1446
+ // Analyze code block context using our enhanced classification
1447
+ let context = CodeBlockUtils::analyze_code_block_context(
1448
+ lines,
1449
+ check_line - 1,
1450
+ min_continuation,
1451
+ );
1452
+
1453
+ // Standalone code blocks break lists, indented ones continue them
1454
+ matches!(context, CodeBlockContext::Standalone)
1455
+ } else if !check_info.is_blank && check_info.list_item.is_none() {
1456
+ // Check for structural separators that should break lists (from issue #42)
1457
+ let line_content = check_info.content.trim();
1458
+
1459
+ // Any of these structural separators break lists
1460
+ if check_info.heading.is_some()
1461
+ || line_content.starts_with("---")
1462
+ || line_content.starts_with("***")
1463
+ || line_content.starts_with("___")
1464
+ || line_content.contains('|')
1465
+ || line_content.starts_with(">")
1466
+ {
1467
+ true
1468
+ }
1469
+ // Other non-list content - check if properly indented
1470
+ else {
1471
+ let last_item_marker_width =
1472
+ if block_last_item_line > 0 && block_last_item_line <= lines.len() {
1473
+ lines[block_last_item_line - 1]
1474
+ .list_item
1475
+ .as_ref()
1476
+ .map(|li| {
1477
+ if li.is_ordered {
1478
+ li.marker.len() + 1 // Add 1 for the space after ordered list markers
1479
+ } else {
1480
+ li.marker.len()
1481
+ }
1482
+ })
1483
+ .unwrap_or(3) // fallback to 3 if no list item found
1484
+ } else {
1485
+ 3 // fallback
1486
+ };
1487
+
1488
+ let min_continuation =
1489
+ if block.is_ordered { last_item_marker_width } else { 2 };
1490
+ check_info.indent < min_continuation
1442
1491
  }
1492
+ } else {
1493
+ false
1494
+ };
1495
+
1496
+ if is_list_breaking_content {
1497
+ // Not indented enough, so it breaks the list
1498
+ found_non_list = true;
1499
+ break;
1443
1500
  }
1444
1501
  }
1445
1502
  }
@@ -1574,8 +1631,9 @@ impl<'a> LintContext<'a> {
1574
1631
  && item.is_ordered == block.is_ordered
1575
1632
  && block.blockquote_prefix.trim() == next_blockquote_prefix.trim()
1576
1633
  {
1577
- // Check if there was meaningful content between the list items
1578
- let has_meaningful_content = (line_idx + 1..check_idx).any(|idx| {
1634
+ // Check if there was meaningful content between the list items (unused now)
1635
+ // This variable is kept for potential future use but is currently replaced by has_structural_separators
1636
+ let _has_meaningful_content = (line_idx + 1..check_idx).any(|idx| {
1579
1637
  if let Some(between_line) = lines.get(idx) {
1580
1638
  let trimmed = between_line.content.trim();
1581
1639
  // Skip empty lines
@@ -1585,21 +1643,72 @@ impl<'a> LintContext<'a> {
1585
1643
  // Check for meaningful content
1586
1644
  let line_indent =
1587
1645
  between_line.content.len() - between_line.content.trim_start().len();
1588
- // Code fences or properly indented content
1589
- trimmed.starts_with("```")
1646
+
1647
+ // Structural separators (code fences, headings, etc.) are meaningful and should BREAK lists
1648
+ if trimmed.starts_with("```")
1590
1649
  || trimmed.starts_with("~~~")
1591
- || line_indent >= min_continuation_indent
1650
+ || trimmed.starts_with("---")
1651
+ || trimmed.starts_with("***")
1652
+ || trimmed.starts_with("___")
1653
+ || trimmed.starts_with(">")
1654
+ || trimmed.contains('|') // Tables
1655
+ || between_line.heading.is_some()
1656
+ {
1657
+ return true; // These are structural separators - meaningful content that breaks lists
1658
+ }
1659
+
1660
+ // Only properly indented content continues the list
1661
+ line_indent >= min_continuation_indent
1592
1662
  } else {
1593
1663
  false
1594
1664
  }
1595
1665
  });
1596
1666
 
1597
1667
  if block.is_ordered {
1598
- // For ordered lists: only continue if there's meaningful content
1599
- found_continuation = has_meaningful_content;
1668
+ // For ordered lists: don't continue if there are structural separators
1669
+ // Check if there are structural separators between the list items
1670
+ let has_structural_separators = (line_idx + 1..check_idx).any(|idx| {
1671
+ if let Some(between_line) = lines.get(idx) {
1672
+ let trimmed = between_line.content.trim();
1673
+ if trimmed.is_empty() {
1674
+ return false;
1675
+ }
1676
+ // Check for structural separators that break lists
1677
+ trimmed.starts_with("```")
1678
+ || trimmed.starts_with("~~~")
1679
+ || trimmed.starts_with("---")
1680
+ || trimmed.starts_with("***")
1681
+ || trimmed.starts_with("___")
1682
+ || trimmed.starts_with(">")
1683
+ || trimmed.contains('|') // Tables
1684
+ || between_line.heading.is_some()
1685
+ } else {
1686
+ false
1687
+ }
1688
+ });
1689
+ found_continuation = !has_structural_separators;
1600
1690
  } else {
1601
- // For unordered lists: continue regardless
1602
- found_continuation = true;
1691
+ // For unordered lists: also check for structural separators
1692
+ let has_structural_separators = (line_idx + 1..check_idx).any(|idx| {
1693
+ if let Some(between_line) = lines.get(idx) {
1694
+ let trimmed = between_line.content.trim();
1695
+ if trimmed.is_empty() {
1696
+ return false;
1697
+ }
1698
+ // Check for structural separators that break lists
1699
+ trimmed.starts_with("```")
1700
+ || trimmed.starts_with("~~~")
1701
+ || trimmed.starts_with("---")
1702
+ || trimmed.starts_with("***")
1703
+ || trimmed.starts_with("___")
1704
+ || trimmed.starts_with(">")
1705
+ || trimmed.contains('|') // Tables
1706
+ || between_line.heading.is_some()
1707
+ } else {
1708
+ false
1709
+ }
1710
+ });
1711
+ found_continuation = !has_structural_separators;
1603
1712
  }
1604
1713
  }
1605
1714
  }
@@ -1625,8 +1734,19 @@ impl<'a> LintContext<'a> {
1625
1734
  // For lazy continuation to apply, the line must either:
1626
1735
  // 1. Have no indentation (true lazy continuation)
1627
1736
  // 2. Have sufficient indentation for the list type
1737
+ // BUT structural separators (headings, code blocks, etc.) should never be lazy continuations
1738
+ let line_content = line_info.content.trim();
1739
+ let is_structural_separator = line_info.heading.is_some()
1740
+ || line_content.starts_with("```")
1741
+ || line_content.starts_with("~~~")
1742
+ || line_content.starts_with("---")
1743
+ || line_content.starts_with("***")
1744
+ || line_content.starts_with("___")
1745
+ || line_content.starts_with(">")
1746
+ || line_content.contains('|'); // Tables
1747
+
1628
1748
  let is_lazy_continuation = last_list_item_line == line_num - 1
1629
- && line_info.heading.is_none()
1749
+ && !is_structural_separator
1630
1750
  && !line_info.is_blank
1631
1751
  && (line_info.indent == 0 || line_info.indent >= min_required_indent);
1632
1752
 
@@ -2075,14 +2195,25 @@ impl<'a> ListBlockMerger<'a> {
2075
2195
 
2076
2196
  /// Check if unordered lists can be merged with a single blank line between
2077
2197
  fn can_merge_with_blank_between(&self, current: &ListBlock, next: &ListBlock) -> bool {
2198
+ // Check if there are structural separators between the blocks
2199
+ // If has_meaningful_content_between returns true, it means there are structural separators
2200
+ if has_meaningful_content_between(current, next, self.lines) {
2201
+ return false; // Structural separators prevent merging
2202
+ }
2203
+
2078
2204
  // Only merge unordered lists with same marker across single blank
2079
2205
  !current.is_ordered && current.marker == next.marker
2080
2206
  }
2081
2207
 
2082
2208
  /// Check if ordered lists can be merged when there's content between them
2083
2209
  fn can_merge_with_content_between(&self, current: &ListBlock, next: &ListBlock) -> bool {
2084
- // Only consider merging ordered lists with meaningful content between
2085
- current.is_ordered && next.is_ordered && has_meaningful_content_between(current, next, self.lines)
2210
+ // Do not merge lists if there are structural separators between them
2211
+ if has_meaningful_content_between(current, next, self.lines) {
2212
+ return false; // Structural separators prevent merging
2213
+ }
2214
+
2215
+ // Only consider merging ordered lists if there's no structural content between
2216
+ current.is_ordered && next.is_ordered
2086
2217
  }
2087
2218
 
2088
2219
  /// Check if there are only blank lines between blocks
@@ -2141,33 +2272,90 @@ fn has_meaningful_content_between(current: &ListBlock, next: &ListBlock, lines:
2141
2272
  continue;
2142
2273
  }
2143
2274
 
2275
+ // Check for structural separators that should separate lists (CommonMark compliant)
2276
+
2277
+ // Headings separate lists
2278
+ if line_info.heading.is_some() {
2279
+ return true; // Has meaningful content - headings separate lists
2280
+ }
2281
+
2282
+ // Horizontal rules separate lists (---, ***, ___)
2283
+ if is_horizontal_rule(trimmed) {
2284
+ return true; // Has meaningful content - horizontal rules separate lists
2285
+ }
2286
+
2287
+ // Tables separate lists (lines containing |)
2288
+ if trimmed.contains('|') && trimmed.len() > 1 {
2289
+ return true; // Has meaningful content - tables separate lists
2290
+ }
2291
+
2292
+ // Blockquotes separate lists
2293
+ if trimmed.starts_with('>') {
2294
+ return true; // Has meaningful content - blockquotes separate lists
2295
+ }
2296
+
2297
+ // Code block fences separate lists (unless properly indented as list content)
2298
+ if trimmed.starts_with("```") || trimmed.starts_with("~~~") {
2299
+ let line_indent = line_info.content.len() - line_info.content.trim_start().len();
2300
+
2301
+ // Check if this code block is properly indented as list continuation
2302
+ let min_continuation_indent = if current.is_ordered {
2303
+ current.nesting_level + current.max_marker_width
2304
+ } else {
2305
+ current.nesting_level + 2
2306
+ };
2307
+
2308
+ if line_indent < min_continuation_indent {
2309
+ // This is a standalone code block that separates lists
2310
+ return true; // Has meaningful content - standalone code blocks separate lists
2311
+ }
2312
+ }
2313
+
2144
2314
  // Check if this line has proper indentation for list continuation
2145
2315
  let line_indent = line_info.content.len() - line_info.content.trim_start().len();
2146
2316
 
2147
- // If the line is indented enough to be list continuation content, it's meaningful
2148
- // For ordered lists, use actual marker width; for unordered, 2 spaces
2317
+ // Calculate minimum indentation needed to be list continuation
2149
2318
  let min_indent = if current.is_ordered {
2150
2319
  current.nesting_level + current.max_marker_width
2151
2320
  } else {
2152
2321
  current.nesting_level + 2
2153
2322
  };
2154
2323
 
2155
- // Check if the line has sufficient indentation to be a continuation
2156
- if line_indent >= min_indent {
2157
- return true;
2158
- }
2159
-
2160
- // Code fences are meaningful content
2161
- if trimmed.starts_with("```") || trimmed.starts_with("~~~") {
2162
- return true;
2324
+ // If the line is not indented enough to be list continuation, it's meaningful content
2325
+ if line_indent < min_indent {
2326
+ return true; // Has meaningful content - content not indented as list continuation
2163
2327
  }
2164
2328
 
2165
- // Any other non-blank content at this level breaks the sequence
2166
- return false;
2329
+ // If we reach here, the line is properly indented as list continuation
2330
+ // Continue checking other lines
2167
2331
  }
2168
2332
  }
2169
2333
 
2170
- // Only blank lines between blocks - should not merge
2334
+ // Only blank lines or properly indented list continuation content between blocks
2335
+ false
2336
+ }
2337
+
2338
+ /// Check if a line is a horizontal rule (---, ***, ___)
2339
+ fn is_horizontal_rule(trimmed: &str) -> bool {
2340
+ if trimmed.len() < 3 {
2341
+ return false;
2342
+ }
2343
+
2344
+ // Check for three or more consecutive -, *, or _ characters (with optional spaces)
2345
+ let chars: Vec<char> = trimmed.chars().collect();
2346
+ if let Some(&first_char) = chars.first()
2347
+ && (first_char == '-' || first_char == '*' || first_char == '_')
2348
+ {
2349
+ let mut count = 0;
2350
+ for &ch in &chars {
2351
+ if ch == first_char {
2352
+ count += 1;
2353
+ } else if ch != ' ' && ch != '\t' {
2354
+ return false; // Non-matching, non-whitespace character
2355
+ }
2356
+ }
2357
+ return count >= 3;
2358
+ }
2171
2359
  false
2172
2360
  }
2173
2361