rumdl 0.0.99__tar.gz → 0.0.101__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 (364) hide show
  1. {rumdl-0.0.99 → rumdl-0.0.101}/CHANGELOG.md +25 -1
  2. {rumdl-0.0.99 → rumdl-0.0.101}/Cargo.lock +7 -7
  3. {rumdl-0.0.99 → rumdl-0.0.101}/Cargo.toml +1 -1
  4. {rumdl-0.0.99 → rumdl-0.0.101}/Makefile +12 -6
  5. {rumdl-0.0.99 → rumdl-0.0.101}/PKG-INFO +2 -2
  6. {rumdl-0.0.99 → rumdl-0.0.101}/README.md +1 -1
  7. {rumdl-0.0.99 → rumdl-0.0.101}/docs/global-settings.md +1 -1
  8. rumdl-0.0.101/scripts/update-pre-commit-docs.sh +35 -0
  9. {rumdl-0.0.99 → rumdl-0.0.101}/src/lint_context.rs +119 -41
  10. {rumdl-0.0.99 → rumdl-0.0.101}/src/main.rs +37 -1
  11. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md005_list_indent.rs +1 -7
  12. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md006_start_bullets.rs +4 -13
  13. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md007_ul_indent.rs +5 -12
  14. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md009_trailing_spaces.rs +7 -14
  15. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md010_no_hard_tabs.rs +2 -7
  16. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md011_no_reversed_links.rs +0 -1
  17. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md013_line_length.rs +3 -24
  18. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md020_no_missing_space_closed_atx.rs +3 -10
  19. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md025_single_title.rs +3 -15
  20. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md029_ordered_list_prefix.rs +4 -5
  21. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md031_blanks_around_fences.rs +0 -6
  22. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md032_blanks_around_lists.rs +63 -74
  23. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md034_no_bare_urls.rs +3 -9
  24. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md035_hr_style.rs +3 -11
  25. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md037_spaces_around_emphasis.rs +3 -9
  26. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md041_first_line_heading.rs +2 -9
  27. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md045_no_alt_text.rs +112 -18
  28. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md046_code_block_style.rs +0 -6
  29. {rumdl-0.0.99 → rumdl-0.0.101}/src/utils/document_structure.rs +147 -107
  30. {rumdl-0.0.99 → rumdl-0.0.101}/src/utils/regex_cache.rs +35 -0
  31. rumdl-0.0.101/tests/deeply_nested_lists_performance_test.rs +455 -0
  32. rumdl-0.0.101/tests/escaped_brackets_test.rs +89 -0
  33. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/inline_content_edge_cases_test.rs +2 -2
  34. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md045_test.rs +27 -12
  35. {rumdl-0.0.99 → rumdl-0.0.101}/.config/nextest.toml +0 -0
  36. {rumdl-0.0.99 → rumdl-0.0.101}/.mise.toml +0 -0
  37. {rumdl-0.0.99 → rumdl-0.0.101}/.pre-commit-config.yaml +0 -0
  38. {rumdl-0.0.99 → rumdl-0.0.101}/.rumdl.toml +0 -0
  39. {rumdl-0.0.99 → rumdl-0.0.101}/.rustfmt.toml +0 -0
  40. {rumdl-0.0.99 → rumdl-0.0.101}/LICENSE +0 -0
  41. {rumdl-0.0.99 → rumdl-0.0.101}/MANIFEST.in +0 -0
  42. {rumdl-0.0.99 → rumdl-0.0.101}/assets/logo.png +0 -0
  43. {rumdl-0.0.99 → rumdl-0.0.101}/benches/fix_performance.rs +0 -0
  44. {rumdl-0.0.99 → rumdl-0.0.101}/benches/range_performance.rs +0 -0
  45. {rumdl-0.0.99 → rumdl-0.0.101}/benches/range_utils_benchmark.rs +0 -0
  46. {rumdl-0.0.99 → rumdl-0.0.101}/benches/rule_performance.rs +0 -0
  47. {rumdl-0.0.99 → rumdl-0.0.101}/benches/simple_fix_bench.rs +0 -0
  48. {rumdl-0.0.99 → rumdl-0.0.101}/docs/RULES.md +0 -0
  49. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md001.md +0 -0
  50. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md002.md +0 -0
  51. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md003.md +0 -0
  52. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md004.md +0 -0
  53. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md005.md +0 -0
  54. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md006.md +0 -0
  55. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md007.md +0 -0
  56. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md009.md +0 -0
  57. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md010.md +0 -0
  58. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md011.md +0 -0
  59. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md012.md +0 -0
  60. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md013.md +0 -0
  61. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md014.md +0 -0
  62. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md018.md +0 -0
  63. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md019.md +0 -0
  64. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md020.md +0 -0
  65. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md021.md +0 -0
  66. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md022.md +0 -0
  67. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md023.md +0 -0
  68. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md024.md +0 -0
  69. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md025.md +0 -0
  70. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md026.md +0 -0
  71. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md027.md +0 -0
  72. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md028.md +0 -0
  73. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md029.md +0 -0
  74. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md030.md +0 -0
  75. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md031.md +0 -0
  76. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md032.md +0 -0
  77. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md033.md +0 -0
  78. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md034.md +0 -0
  79. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md035.md +0 -0
  80. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md036.md +0 -0
  81. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md037.md +0 -0
  82. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md038.md +0 -0
  83. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md039.md +0 -0
  84. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md040.md +0 -0
  85. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md041.md +0 -0
  86. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md042.md +0 -0
  87. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md043.md +0 -0
  88. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md044.md +0 -0
  89. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md045.md +0 -0
  90. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md046.md +0 -0
  91. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md047.md +0 -0
  92. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md048.md +0 -0
  93. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md049.md +0 -0
  94. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md050.md +0 -0
  95. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md051.md +0 -0
  96. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md052.md +0 -0
  97. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md053.md +0 -0
  98. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md054.md +0 -0
  99. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md055.md +0 -0
  100. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md056.md +0 -0
  101. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md057.md +0 -0
  102. {rumdl-0.0.99 → rumdl-0.0.101}/docs/md058.md +0 -0
  103. {rumdl-0.0.99 → rumdl-0.0.101}/docs/vscode-extension.md +0 -0
  104. {rumdl-0.0.99 → rumdl-0.0.101}/parity_check.py +0 -0
  105. {rumdl-0.0.99 → rumdl-0.0.101}/pyproject.toml +0 -0
  106. {rumdl-0.0.99 → rumdl-0.0.101}/python/MANIFEST.in +0 -0
  107. {rumdl-0.0.99 → rumdl-0.0.101}/python/PYTHON-README.md +0 -0
  108. {rumdl-0.0.99 → rumdl-0.0.101}/python/rumdl/__init__.py +0 -0
  109. {rumdl-0.0.99 → rumdl-0.0.101}/python/rumdl/__main__.py +0 -0
  110. {rumdl-0.0.99 → rumdl-0.0.101}/python/rumdl/py.typed +0 -0
  111. {rumdl-0.0.99 → rumdl-0.0.101}/rumdl.toml.example +0 -0
  112. {rumdl-0.0.99 → rumdl-0.0.101}/rust-toolchain.toml +0 -0
  113. {rumdl-0.0.99 → rumdl-0.0.101}/scripts/extract-changelog.sh +0 -0
  114. {rumdl-0.0.99 → rumdl-0.0.101}/scripts/prepare-release.sh +0 -0
  115. {rumdl-0.0.99 → rumdl-0.0.101}/scripts/setup-pre-commit.sh +0 -0
  116. {rumdl-0.0.99 → rumdl-0.0.101}/src/bin/benchmark.rs +0 -0
  117. {rumdl-0.0.99 → rumdl-0.0.101}/src/bin/benchmark_rule.rs +0 -0
  118. {rumdl-0.0.99 → rumdl-0.0.101}/src/bin/file_parallel_benchmark.rs +0 -0
  119. {rumdl-0.0.99 → rumdl-0.0.101}/src/bin/measure_code_span_performance.rs +0 -0
  120. {rumdl-0.0.99 → rumdl-0.0.101}/src/config.rs +0 -0
  121. {rumdl-0.0.99 → rumdl-0.0.101}/src/exit_codes.rs +0 -0
  122. {rumdl-0.0.99 → rumdl-0.0.101}/src/init.rs +0 -0
  123. {rumdl-0.0.99 → rumdl-0.0.101}/src/inline_config.rs +0 -0
  124. {rumdl-0.0.99 → rumdl-0.0.101}/src/lib.rs +0 -0
  125. {rumdl-0.0.99 → rumdl-0.0.101}/src/lsp/mod.rs +0 -0
  126. {rumdl-0.0.99 → rumdl-0.0.101}/src/lsp/server.rs +0 -0
  127. {rumdl-0.0.99 → rumdl-0.0.101}/src/lsp/types.rs +0 -0
  128. {rumdl-0.0.99 → rumdl-0.0.101}/src/markdownlint_config.rs +0 -0
  129. {rumdl-0.0.99 → rumdl-0.0.101}/src/output/formatters/azure.rs +0 -0
  130. {rumdl-0.0.99 → rumdl-0.0.101}/src/output/formatters/concise.rs +0 -0
  131. {rumdl-0.0.99 → rumdl-0.0.101}/src/output/formatters/github.rs +0 -0
  132. {rumdl-0.0.99 → rumdl-0.0.101}/src/output/formatters/gitlab.rs +0 -0
  133. {rumdl-0.0.99 → rumdl-0.0.101}/src/output/formatters/grouped.rs +0 -0
  134. {rumdl-0.0.99 → rumdl-0.0.101}/src/output/formatters/json.rs +0 -0
  135. {rumdl-0.0.99 → rumdl-0.0.101}/src/output/formatters/json_lines.rs +0 -0
  136. {rumdl-0.0.99 → rumdl-0.0.101}/src/output/formatters/junit.rs +0 -0
  137. {rumdl-0.0.99 → rumdl-0.0.101}/src/output/formatters/mod.rs +0 -0
  138. {rumdl-0.0.99 → rumdl-0.0.101}/src/output/formatters/pylint.rs +0 -0
  139. {rumdl-0.0.99 → rumdl-0.0.101}/src/output/formatters/sarif.rs +0 -0
  140. {rumdl-0.0.99 → rumdl-0.0.101}/src/output/formatters/text.rs +0 -0
  141. {rumdl-0.0.99 → rumdl-0.0.101}/src/output/mod.rs +0 -0
  142. {rumdl-0.0.99 → rumdl-0.0.101}/src/parallel.rs +0 -0
  143. {rumdl-0.0.99 → rumdl-0.0.101}/src/performance.rs +0 -0
  144. {rumdl-0.0.99 → rumdl-0.0.101}/src/profiling.rs +0 -0
  145. {rumdl-0.0.99 → rumdl-0.0.101}/src/python.rs +0 -0
  146. {rumdl-0.0.99 → rumdl-0.0.101}/src/rule.rs +0 -0
  147. {rumdl-0.0.99 → rumdl-0.0.101}/src/rule_config.rs +0 -0
  148. {rumdl-0.0.99 → rumdl-0.0.101}/src/rule_config_serde.rs +0 -0
  149. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/blockquote_utils.rs +0 -0
  150. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/code_block_utils.rs +0 -0
  151. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/code_fence_utils.rs +0 -0
  152. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/emphasis_style.rs +0 -0
  153. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/front_matter_utils.rs +0 -0
  154. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/heading_utils.rs +0 -0
  155. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/list_utils.rs +0 -0
  156. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md001_heading_increment.rs +0 -0
  157. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md002_first_heading_h1/md002_config.rs +0 -0
  158. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md002_first_heading_h1.rs +0 -0
  159. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md003_heading_style/md003_config.rs +0 -0
  160. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md003_heading_style.rs +0 -0
  161. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md004_unordered_list_style/md004_config.rs +0 -0
  162. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md004_unordered_list_style.rs +0 -0
  163. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md007_ul_indent/md007_config.rs +0 -0
  164. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md009_trailing_spaces/md009_config.rs +0 -0
  165. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md010_no_hard_tabs/md010_config.rs +0 -0
  166. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md012_no_multiple_blanks/md012_config.rs +0 -0
  167. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md012_no_multiple_blanks.rs +0 -0
  168. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md013_line_length/md013_config.rs +0 -0
  169. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md014_commands_show_output/md014_config.rs +0 -0
  170. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md014_commands_show_output.rs +0 -0
  171. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md018_no_missing_space_atx.rs +0 -0
  172. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md019_no_multiple_space_atx.rs +0 -0
  173. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
  174. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md022_blanks_around_headings/md022_config.rs +0 -0
  175. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md022_blanks_around_headings.rs +0 -0
  176. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md023_heading_start_left.rs +0 -0
  177. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md024_no_duplicate_heading/md024_config.rs +0 -0
  178. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md024_no_duplicate_heading.rs +0 -0
  179. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md025_single_title/md025_config.rs +0 -0
  180. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md026_no_trailing_punctuation/md026_config.rs +0 -0
  181. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md026_no_trailing_punctuation.rs +0 -0
  182. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
  183. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md028_no_blanks_blockquote.rs +0 -0
  184. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md030_list_marker_space/md030_config.rs +0 -0
  185. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md030_list_marker_space.rs +0 -0
  186. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md033_no_inline_html/md033_config.rs +0 -0
  187. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md033_no_inline_html.rs +0 -0
  188. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md035_hr_style/md035_config.rs +0 -0
  189. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md036_no_emphasis_only_first/md036_config.rs +0 -0
  190. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md036_no_emphasis_only_first.rs +0 -0
  191. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md038_no_space_in_code.rs +0 -0
  192. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md039_no_space_in_links.rs +0 -0
  193. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md040_fenced_code_language.rs +0 -0
  194. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md042_no_empty_links.rs +0 -0
  195. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md043_required_headings.rs +0 -0
  196. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md044_proper_names/md044_config.rs +0 -0
  197. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md044_proper_names.rs +0 -0
  198. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md045_no_alt_text/md045_config.rs +0 -0
  199. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md046_code_block_style/md046_config.rs +0 -0
  200. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md047_single_trailing_newline.rs +0 -0
  201. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md048_code_fence_style/md048_config.rs +0 -0
  202. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md048_code_fence_style.rs +0 -0
  203. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md049_emphasis_style/md049_config.rs +0 -0
  204. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md049_emphasis_style.rs +0 -0
  205. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md050_strong_style/md050_config.rs +0 -0
  206. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md050_strong_style.rs +0 -0
  207. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md051_link_fragments.rs +0 -0
  208. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md052_reference_links_images.rs +0 -0
  209. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md053_link_image_reference_definitions.rs +0 -0
  210. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md054_link_image_style/md054_config.rs +0 -0
  211. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md054_link_image_style.rs +0 -0
  212. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md055_table_pipe_style/md055_config.rs +0 -0
  213. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md055_table_pipe_style.rs +0 -0
  214. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md056_table_column_count.rs +0 -0
  215. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md057_existing_relative_links/md057_config.rs +0 -0
  216. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md057_existing_relative_links.rs +0 -0
  217. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/md058_blanks_around_tables.rs +0 -0
  218. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/mod.rs +0 -0
  219. {rumdl-0.0.99 → rumdl-0.0.101}/src/rules/strong_style.rs +0 -0
  220. {rumdl-0.0.99 → rumdl-0.0.101}/src/utils/ast_utils.rs +0 -0
  221. {rumdl-0.0.99 → rumdl-0.0.101}/src/utils/code_block_utils.rs +0 -0
  222. {rumdl-0.0.99 → rumdl-0.0.101}/src/utils/early_returns.rs +0 -0
  223. {rumdl-0.0.99 → rumdl-0.0.101}/src/utils/element_cache.rs +0 -0
  224. {rumdl-0.0.99 → rumdl-0.0.101}/src/utils/emphasis_utils.rs +0 -0
  225. {rumdl-0.0.99 → rumdl-0.0.101}/src/utils/fix_utils.rs +0 -0
  226. {rumdl-0.0.99 → rumdl-0.0.101}/src/utils/markdown_elements.rs +0 -0
  227. {rumdl-0.0.99 → rumdl-0.0.101}/src/utils/mod.rs +0 -0
  228. {rumdl-0.0.99 → rumdl-0.0.101}/src/utils/range_utils.rs +0 -0
  229. {rumdl-0.0.99 → rumdl-0.0.101}/src/utils/string_interner.rs +0 -0
  230. {rumdl-0.0.99 → rumdl-0.0.101}/src/utils/table_utils.rs +0 -0
  231. {rumdl-0.0.99 → rumdl-0.0.101}/src/utils/text_reflow.rs +0 -0
  232. {rumdl-0.0.99 → rumdl-0.0.101}/src/vscode.rs +0 -0
  233. {rumdl-0.0.99 → rumdl-0.0.101}/tests/advanced_integration_tests.rs +0 -0
  234. {rumdl-0.0.99 → rumdl-0.0.101}/tests/character_ranges/additional_tests.rs +0 -0
  235. {rumdl-0.0.99 → rumdl-0.0.101}/tests/character_ranges/basic_tests.rs +0 -0
  236. {rumdl-0.0.99 → rumdl-0.0.101}/tests/character_ranges/comprehensive_tests.rs +0 -0
  237. {rumdl-0.0.99 → rumdl-0.0.101}/tests/character_ranges/extended_tests.rs +0 -0
  238. {rumdl-0.0.99 → rumdl-0.0.101}/tests/character_ranges/mod.rs +0 -0
  239. {rumdl-0.0.99 → rumdl-0.0.101}/tests/character_ranges/unicode_utils.rs +0 -0
  240. {rumdl-0.0.99 → rumdl-0.0.101}/tests/cli_duplication_test.rs +0 -0
  241. {rumdl-0.0.99 → rumdl-0.0.101}/tests/cli_explain_test.rs +0 -0
  242. {rumdl-0.0.99 → rumdl-0.0.101}/tests/cli_flag_precedence_test.rs +0 -0
  243. {rumdl-0.0.99 → rumdl-0.0.101}/tests/cli_integration_tests.rs +0 -0
  244. {rumdl-0.0.99 → rumdl-0.0.101}/tests/cli_lsp_fix_consistency.rs +0 -0
  245. {rumdl-0.0.99 → rumdl-0.0.101}/tests/cli_statistics_test.rs +0 -0
  246. {rumdl-0.0.99 → rumdl-0.0.101}/tests/commonmark_compliance_tests.rs +0 -0
  247. {rumdl-0.0.99 → rumdl-0.0.101}/tests/comprehensive_integration_tests.rs +0 -0
  248. {rumdl-0.0.99 → rumdl-0.0.101}/tests/comprehensive_output_format_tests.rs +0 -0
  249. {rumdl-0.0.99 → rumdl-0.0.101}/tests/config_application_tests.rs +0 -0
  250. {rumdl-0.0.99 → rumdl-0.0.101}/tests/config_file_command_test.rs +0 -0
  251. {rumdl-0.0.99 → rumdl-0.0.101}/tests/config_tests.rs +0 -0
  252. {rumdl-0.0.99 → rumdl-0.0.101}/tests/configuration_inheritance_tests.rs +0 -0
  253. {rumdl-0.0.99 → rumdl-0.0.101}/tests/consistency_regression_tests.rs +0 -0
  254. {rumdl-0.0.99 → rumdl-0.0.101}/tests/cross_platform_compatibility_tests.rs +0 -0
  255. {rumdl-0.0.99 → rumdl-0.0.101}/tests/final_confidence_assessment.rs +0 -0
  256. {rumdl-0.0.99 → rumdl-0.0.101}/tests/init_command_test.rs +0 -0
  257. {rumdl-0.0.99 → rumdl-0.0.101}/tests/init_tests.rs +0 -0
  258. {rumdl-0.0.99 → rumdl-0.0.101}/tests/inline_config_test.rs +0 -0
  259. {rumdl-0.0.99 → rumdl-0.0.101}/tests/integration_tests.rs +0 -0
  260. {rumdl-0.0.99 → rumdl-0.0.101}/tests/json_output_test.rs +0 -0
  261. {rumdl-0.0.99 → rumdl-0.0.101}/tests/lib.rs +0 -0
  262. {rumdl-0.0.99 → rumdl-0.0.101}/tests/lsp_editor_integration_tests.rs +0 -0
  263. {rumdl-0.0.99 → rumdl-0.0.101}/tests/lsp_integration_tests.rs +0 -0
  264. {rumdl-0.0.99 → rumdl-0.0.101}/tests/lsp_memory_leak_tests.rs +0 -0
  265. {rumdl-0.0.99 → rumdl-0.0.101}/tests/lsp_tests.rs +0 -0
  266. {rumdl-0.0.99 → rumdl-0.0.101}/tests/malformed_markdown_stress_tests.rs +0 -0
  267. {rumdl-0.0.99 → rumdl-0.0.101}/tests/markdownlint_cli_integration.rs +0 -0
  268. {rumdl-0.0.99 → rumdl-0.0.101}/tests/markdownlint_config_test.rs +0 -0
  269. {rumdl-0.0.99 → rumdl-0.0.101}/tests/markdownlintignore_test.rs +0 -0
  270. {rumdl-0.0.99 → rumdl-0.0.101}/tests/md013_reflow_integration_test.rs +0 -0
  271. {rumdl-0.0.99 → rumdl-0.0.101}/tests/nested_code_block_test.rs +0 -0
  272. {rumdl-0.0.99 → rumdl-0.0.101}/tests/output_format_integration_tests.rs +0 -0
  273. {rumdl-0.0.99 → rumdl-0.0.101}/tests/output_format_tests.rs +0 -0
  274. {rumdl-0.0.99 → rumdl-0.0.101}/tests/perf_check.rs +0 -0
  275. {rumdl-0.0.99 → rumdl-0.0.101}/tests/performance_validation_tests.rs +0 -0
  276. {rumdl-0.0.99 → rumdl-0.0.101}/tests/pyproject_config_tests.rs +0 -0
  277. {rumdl-0.0.99 → rumdl-0.0.101}/tests/python_bindings_test.rs +0 -0
  278. {rumdl-0.0.99 → rumdl-0.0.101}/tests/real_world_repository_tests.rs +0 -0
  279. {rumdl-0.0.99 → rumdl-0.0.101}/tests/regression_prevention_tests.rs +0 -0
  280. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/emphasis_edge_cases_test.rs +0 -0
  281. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/heading_edge_cases_test.rs +0 -0
  282. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/link_edge_cases_test.rs +0 -0
  283. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/list_rules_integration_test.rs +0 -0
  284. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md001_test.rs +0 -0
  285. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md001_unicode_test.rs +0 -0
  286. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md002_test.rs +0 -0
  287. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md003_test.rs +0 -0
  288. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md004_test.rs +0 -0
  289. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md005_test.rs +0 -0
  290. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md005_unicode_test.rs +0 -0
  291. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md006_test.rs +0 -0
  292. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md006_unicode_test.rs +0 -0
  293. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md007_test.rs +0 -0
  294. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md009_test.rs +0 -0
  295. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md010_test.rs +0 -0
  296. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md011_test.rs +0 -0
  297. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md012_test.rs +0 -0
  298. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md013_test.rs +0 -0
  299. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md014_test.rs +0 -0
  300. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md018_test.rs +0 -0
  301. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md019_test.rs +0 -0
  302. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md020_test.rs +0 -0
  303. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md021_test.rs +0 -0
  304. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md022_test.rs +0 -0
  305. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md023_extended_test.rs +0 -0
  306. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md023_test.rs +0 -0
  307. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md024_test.rs +0 -0
  308. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md025_test.rs +0 -0
  309. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md026_test.rs +0 -0
  310. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md027_test.rs +0 -0
  311. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md028_test.rs +0 -0
  312. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md029_test.rs +0 -0
  313. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md029_unicode_test.rs +0 -0
  314. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md030_test.rs +0 -0
  315. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md031_test.rs +0 -0
  316. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md032_test.rs +0 -0
  317. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md033_extended_test.rs +0 -0
  318. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md033_test.rs +0 -0
  319. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md034_ipv6_test.rs +0 -0
  320. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md034_test.rs +0 -0
  321. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md035_test.rs +0 -0
  322. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md036_test.rs +0 -0
  323. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md037_test.rs +0 -0
  324. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md038_nested_backticks_test.rs +0 -0
  325. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md038_test.rs +0 -0
  326. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md039_test.rs +0 -0
  327. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md040_test.rs +0 -0
  328. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md041_test.rs +0 -0
  329. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md042_test.rs +0 -0
  330. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md043_test.rs +0 -0
  331. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md044_test.rs +0 -0
  332. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md046_test.rs +0 -0
  333. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md047_test.rs +0 -0
  334. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md048_test.rs +0 -0
  335. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md049_test.rs +0 -0
  336. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md050_test.rs +0 -0
  337. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md051_test.rs +0 -0
  338. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md051_unicode_test.rs +0 -0
  339. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md052_test.rs +0 -0
  340. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md053_additional_test.rs +0 -0
  341. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md053_proptest.rs +0 -0
  342. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md053_test.rs +0 -0
  343. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md054_test.rs +0 -0
  344. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md054_unicode_test.rs +0 -0
  345. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md055_test.rs +0 -0
  346. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md056_test.rs +0 -0
  347. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md057_test.rs +0 -0
  348. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/md058_test.rs +0 -0
  349. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules/mod.rs +0 -0
  350. {rumdl-0.0.99 → rumdl-0.0.101}/tests/rules_mod_test.rs +0 -0
  351. {rumdl-0.0.99 → rumdl-0.0.101}/tests/thread_safety_tests.rs +0 -0
  352. {rumdl-0.0.99 → rumdl-0.0.101}/tests/unicode_edge_case_tests.rs +0 -0
  353. {rumdl-0.0.99 → rumdl-0.0.101}/tests/utils/blockquote_utils_test.rs +0 -0
  354. {rumdl-0.0.99 → rumdl-0.0.101}/tests/utils/code_block_utils_extended_test.rs +0 -0
  355. {rumdl-0.0.99 → rumdl-0.0.101}/tests/utils/code_block_utils_test.rs +0 -0
  356. {rumdl-0.0.99 → rumdl-0.0.101}/tests/utils/core_utils_test.rs +0 -0
  357. {rumdl-0.0.99 → rumdl-0.0.101}/tests/utils/front_matter_utils_test.rs +0 -0
  358. {rumdl-0.0.99 → rumdl-0.0.101}/tests/utils/line_index_test.rs +0 -0
  359. {rumdl-0.0.99 → rumdl-0.0.101}/tests/utils/mod.rs +0 -0
  360. {rumdl-0.0.99 → rumdl-0.0.101}/tests/utils_markdown_edge_cases.rs +0 -0
  361. {rumdl-0.0.99 → rumdl-0.0.101}/tests/utils_tests.rs +0 -0
  362. {rumdl-0.0.99 → rumdl-0.0.101}/tests/vscode_extension_fixes.rs +0 -0
  363. {rumdl-0.0.99 → rumdl-0.0.101}/tests/vscode_test.rs +0 -0
  364. {rumdl-0.0.99 → rumdl-0.0.101}/tests/vscode_tests.rs +0 -0
@@ -7,6 +7,28 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.0.101] - 2025-07-23
11
+
12
+ ## [0.0.100] - 2025-07-22
13
+
14
+ ### Performance Improvements
15
+ - **MD032**: Eliminated redundant DocumentStructure creation through optimization interface delegation
16
+ - Refactored check() method to delegate to check_with_structure() for shared parsing
17
+ - Added fix_with_structure() helper method for optimized fixing operations
18
+ - **List Processing**: Major refactoring of complex list block merging logic for better maintainability
19
+ - Extracted merge_adjacent_list_blocks into clean ListBlockMerger struct
20
+ - Introduced BlockSpacing enum for clear categorization of list spacing types
21
+ - Separated compatibility checking, spacing analysis, and merging logic into focused methods
22
+ - **Memory Management**: Added comprehensive performance stress tests for deeply nested lists
23
+ - Created benchmarks for up to 20 levels of nesting with measurable performance baselines
24
+ - Established performance thresholds: <3ms parsing, <4ms rule checking for extreme nesting
25
+ - Added memory stress testing to prevent performance regressions
26
+
27
+ ### Code Quality
28
+ - Improved separation of concerns in list processing logic
29
+ - Enhanced code maintainability through better structured algorithms
30
+ - Added comprehensive test coverage for pathological markdown structures
31
+
10
32
  ## [0.0.99] - 2025-07-22
11
33
 
12
34
  ### Fixed
@@ -223,7 +245,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
223
245
 
224
246
  - Initial implementation of remaining rules for markdownlint parity
225
247
 
226
- [Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.99...HEAD
248
+ [Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.101...HEAD
249
+ [0.0.101]: https://github.com/rvben/rumdl/compare/v0.0.100...v0.0.101
250
+ [0.0.100]: https://github.com/rvben/rumdl/compare/v0.0.99...v0.0.100
227
251
  [0.0.99]: https://github.com/rvben/rumdl/compare/v0.0.98...v0.0.99
228
252
  [0.0.98]: https://github.com/rvben/rumdl/compare/v0.0.97...v0.0.98
229
253
  [0.0.97]: https://github.com/rvben/rumdl/compare/v0.0.96...v0.0.97
@@ -859,9 +859,9 @@ checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd"
859
859
 
860
860
  [[package]]
861
861
  name = "io-uring"
862
- version = "0.7.8"
862
+ version = "0.7.9"
863
863
  source = "registry+https://github.com/rust-lang/crates.io-index"
864
- checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013"
864
+ checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4"
865
865
  dependencies = [
866
866
  "bitflags 2.9.1",
867
867
  "cfg-if",
@@ -1397,9 +1397,9 @@ checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
1397
1397
 
1398
1398
  [[package]]
1399
1399
  name = "rand"
1400
- version = "0.9.1"
1400
+ version = "0.9.2"
1401
1401
  source = "registry+https://github.com/rust-lang/crates.io-index"
1402
- checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97"
1402
+ checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
1403
1403
  dependencies = [
1404
1404
  "rand_chacha",
1405
1405
  "rand_core",
@@ -1455,9 +1455,9 @@ dependencies = [
1455
1455
 
1456
1456
  [[package]]
1457
1457
  name = "redox_syscall"
1458
- version = "0.5.13"
1458
+ version = "0.5.15"
1459
1459
  source = "registry+https://github.com/rust-lang/crates.io-index"
1460
- checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6"
1460
+ checksum = "7e8af0dde094006011e6a740d4879319439489813bd0bcdc7d821beaeeff48ec"
1461
1461
  dependencies = [
1462
1462
  "bitflags 2.9.1",
1463
1463
  ]
@@ -1493,7 +1493,7 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
1493
1493
 
1494
1494
  [[package]]
1495
1495
  name = "rumdl"
1496
- version = "0.0.99"
1496
+ version = "0.0.101"
1497
1497
  dependencies = [
1498
1498
  "anyhow",
1499
1499
  "assert_cmd",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "rumdl"
3
- version = "0.0.99"
3
+ version = "0.0.101"
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)"
@@ -124,6 +124,12 @@ update-readme-version:
124
124
  @rm -f README.md.bak
125
125
  @echo "README.md updated to rev $(NEW_TAG)"
126
126
 
127
+ update-all-docs-version:
128
+ @echo "Updating all documentation to use $(NEW_TAG)..."
129
+ @perl -i.bak -E 's/rev: v[0-9]+\.[0-9]+\.[0-9]+/rev: $(NEW_TAG)/g' README.md docs/global-settings.md ../rumdl-pre-commit/README.md 2>/dev/null || true
130
+ @rm -f README.md.bak docs/global-settings.md.bak ../rumdl-pre-commit/README.md.bak 2>/dev/null || true
131
+ @echo "All documentation updated to rev $(NEW_TAG)"
132
+
127
133
  update-changelog:
128
134
  @echo "Updating CHANGELOG.md for $(NEW_TAG)..."
129
135
  @if [ -f CHANGELOG.md ]; then \
@@ -145,9 +151,9 @@ version-major:
145
151
  $(eval VERSION_NO_V := $(NEW_MAJOR).0.0)
146
152
  @echo "Current: $(CURRENT) -> New: $(NEW_TAG)"
147
153
  @$(MAKE) update-cargo-version VERSION_NO_V=$(VERSION_NO_V)
148
- @$(MAKE) update-readme-version NEW_TAG=$(NEW_TAG)
154
+ @$(MAKE) update-all-docs-version NEW_TAG=$(NEW_TAG)
149
155
  @$(MAKE) update-changelog NEW_TAG=$(NEW_TAG) VERSION_NO_V=$(VERSION_NO_V) CURRENT=$(CURRENT)
150
- @git add Cargo.toml Cargo.lock README.md CHANGELOG.md
156
+ @git add Cargo.toml Cargo.lock README.md docs/global-settings.md CHANGELOG.md
151
157
  @git commit -m "Bump version to $(NEW_TAG)"
152
158
  @git tag -a $(NEW_TAG) -m "Release $(NEW_TAG)"
153
159
  @echo "Version $(NEW_TAG) created and committed. Run 'git push && git push origin $(NEW_TAG)' to trigger release workflow."
@@ -162,9 +168,9 @@ version-minor:
162
168
  $(eval VERSION_NO_V := $(MAJOR).$(NEW_MINOR).0)
163
169
  @echo "Current: $(CURRENT) -> New: $(NEW_TAG)"
164
170
  @$(MAKE) update-cargo-version VERSION_NO_V=$(VERSION_NO_V)
165
- @$(MAKE) update-readme-version NEW_TAG=$(NEW_TAG)
171
+ @$(MAKE) update-all-docs-version NEW_TAG=$(NEW_TAG)
166
172
  @$(MAKE) update-changelog NEW_TAG=$(NEW_TAG) VERSION_NO_V=$(VERSION_NO_V) CURRENT=$(CURRENT)
167
- @git add Cargo.toml Cargo.lock README.md CHANGELOG.md
173
+ @git add Cargo.toml Cargo.lock README.md docs/global-settings.md CHANGELOG.md
168
174
  @git commit -m "Bump version to $(NEW_TAG)"
169
175
  @git tag -a $(NEW_TAG) -m "Release $(NEW_TAG)"
170
176
  @echo "Version $(NEW_TAG) created and committed. Run 'git push && git push origin $(NEW_TAG)' to trigger release workflow."
@@ -180,9 +186,9 @@ version-patch:
180
186
  $(eval VERSION_NO_V := $(MAJOR).$(MINOR).$(NEW_PATCH))
181
187
  @echo "Current: $(CURRENT) -> New: $(NEW_TAG)"
182
188
  @$(MAKE) update-cargo-version VERSION_NO_V=$(VERSION_NO_V)
183
- @$(MAKE) update-readme-version NEW_TAG=$(NEW_TAG)
189
+ @$(MAKE) update-all-docs-version NEW_TAG=$(NEW_TAG)
184
190
  @$(MAKE) update-changelog NEW_TAG=$(NEW_TAG) VERSION_NO_V=$(VERSION_NO_V) CURRENT=$(CURRENT)
185
- @git add Cargo.toml Cargo.lock README.md CHANGELOG.md
191
+ @git add Cargo.toml Cargo.lock README.md docs/global-settings.md CHANGELOG.md
186
192
  @git commit -m "Bump version to $(NEW_TAG)"
187
193
  @git tag -a $(NEW_TAG) -m "Release $(NEW_TAG)"
188
194
  @echo "Version $(NEW_TAG) created and committed. Run 'git push && git push origin $(NEW_TAG)' to trigger release workflow."
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rumdl
3
- Version: 0.0.99
3
+ Version: 0.0.101
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -242,7 +242,7 @@ Add the following to your `.pre-commit-config.yaml`:
242
242
  ```yaml
243
243
  repos:
244
244
  - repo: https://github.com/rvben/rumdl-pre-commit
245
- rev: v0.0.45 # Use the latest release tag
245
+ rev: v0.0.99 # Use the latest release tag
246
246
  hooks:
247
247
  - id: rumdl
248
248
  # To only check (default):
@@ -211,7 +211,7 @@ Add the following to your `.pre-commit-config.yaml`:
211
211
  ```yaml
212
212
  repos:
213
213
  - repo: https://github.com/rvben/rumdl-pre-commit
214
- rev: v0.0.45 # Use the latest release tag
214
+ rev: v0.0.99 # Use the latest release tag
215
215
  hooks:
216
216
  - id: rumdl
217
217
  # To only check (default):
@@ -492,7 +492,7 @@ find . -name "*.md" -o -name "*.markdown" | head -10
492
492
 
493
493
  ```yaml
494
494
  - repo: https://github.com/rvben/rumdl-pre-commit
495
- rev: v0.0.45
495
+ rev: v0.0.99
496
496
  hooks:
497
497
  - id: rumdl
498
498
  args: [--config=.rumdl.toml]
@@ -0,0 +1,35 @@
1
+ #!/bin/bash
2
+ # Script to update rumdl-pre-commit version references in documentation
3
+
4
+ set -e
5
+
6
+ # Get the latest release version
7
+ LATEST_VERSION=$(gh release list --repo rvben/rumdl --limit 1 | awk '{print $1}')
8
+
9
+ if [ -z "$LATEST_VERSION" ]; then
10
+ echo "Error: Could not determine latest version"
11
+ exit 1
12
+ fi
13
+
14
+ echo "Latest rumdl version: $LATEST_VERSION"
15
+
16
+ # Update version in all documentation files
17
+ FILES=(
18
+ "README.md"
19
+ "docs/global-settings.md"
20
+ "../rumdl-pre-commit/README.md"
21
+ )
22
+
23
+ for file in "${FILES[@]}"; do
24
+ if [ -f "$file" ]; then
25
+ echo "Updating $file..."
26
+ # Update rev: vX.X.X patterns
27
+ sed -i.bak -E "s/rev: v[0-9]+\.[0-9]+\.[0-9]+/rev: $LATEST_VERSION/g" "$file"
28
+ # Clean up backup files
29
+ rm -f "${file}.bak"
30
+ else
31
+ echo "Warning: $file not found"
32
+ fi
33
+ done
34
+
35
+ echo "Documentation updated to use $LATEST_VERSION"
@@ -1263,52 +1263,130 @@ fn merge_adjacent_list_blocks(list_blocks: &mut Vec<ListBlock>, lines: &[LineInf
1263
1263
  return;
1264
1264
  }
1265
1265
 
1266
- let mut merged = Vec::new();
1267
- let mut current = list_blocks[0].clone();
1268
-
1269
- for next in list_blocks.iter().skip(1) {
1270
- // Check if blocks should be merged
1271
- // For MD032 purposes, consecutive unordered lists with different markers
1272
- // should be treated as one list block only if truly consecutive
1273
- let consecutive = next.start_line == current.end_line + 1;
1274
- let only_blank_between = next.start_line == current.end_line + 2;
1275
-
1276
- // For ordered lists, we need to be more careful about merging
1277
- let should_merge_condition = if current.is_ordered && next.is_ordered {
1278
- // Only merge ordered lists if there's meaningful content between them
1279
- // (like code blocks, continuation paragraphs) not just blank lines
1280
- consecutive || has_meaningful_content_between(&current, next, lines)
1281
- } else {
1282
- // For unordered lists, use original logic
1283
- consecutive || (only_blank_between && current.marker == next.marker)
1284
- };
1285
-
1286
- let should_merge = next.is_ordered == current.is_ordered
1287
- && next.blockquote_prefix == current.blockquote_prefix
1288
- && next.nesting_level == current.nesting_level
1289
- && should_merge_condition;
1290
-
1291
- if should_merge {
1292
- // Merge blocks
1293
- current.end_line = next.end_line;
1294
- current.item_lines.extend_from_slice(&next.item_lines);
1295
-
1296
- // Update marker consistency
1297
- if !current.is_ordered && current.marker.is_some() && next.marker.is_some() && current.marker != next.marker
1298
- {
1299
- current.marker = None; // Mixed markers
1266
+ let mut merger = ListBlockMerger::new(lines);
1267
+ *list_blocks = merger.merge(list_blocks);
1268
+ }
1269
+
1270
+ /// Helper struct to manage the complex logic of merging list blocks
1271
+ struct ListBlockMerger<'a> {
1272
+ lines: &'a [LineInfo],
1273
+ }
1274
+
1275
+ impl<'a> ListBlockMerger<'a> {
1276
+ fn new(lines: &'a [LineInfo]) -> Self {
1277
+ Self { lines }
1278
+ }
1279
+
1280
+ fn merge(&mut self, list_blocks: &[ListBlock]) -> Vec<ListBlock> {
1281
+ let mut merged = Vec::with_capacity(list_blocks.len());
1282
+ let mut current = list_blocks[0].clone();
1283
+
1284
+ for next in list_blocks.iter().skip(1) {
1285
+ if self.should_merge_blocks(&current, next) {
1286
+ current = self.merge_two_blocks(current, next);
1287
+ } else {
1288
+ merged.push(current);
1289
+ current = next.clone();
1300
1290
  }
1301
- } else {
1302
- // Save current and start new
1303
- merged.push(current);
1304
- current = next.clone();
1305
1291
  }
1292
+
1293
+ merged.push(current);
1294
+ merged
1295
+ }
1296
+
1297
+ /// Determine if two adjacent list blocks should be merged
1298
+ fn should_merge_blocks(&self, current: &ListBlock, next: &ListBlock) -> bool {
1299
+ // Basic compatibility checks
1300
+ if !self.blocks_are_compatible(current, next) {
1301
+ return false;
1302
+ }
1303
+
1304
+ // Check spacing and content between blocks
1305
+ let spacing = self.analyze_spacing_between(current, next);
1306
+ match spacing {
1307
+ BlockSpacing::Consecutive => true,
1308
+ BlockSpacing::SingleBlank => self.can_merge_with_blank_between(current, next),
1309
+ BlockSpacing::MultipleBlanks | BlockSpacing::ContentBetween => {
1310
+ self.can_merge_with_content_between(current, next)
1311
+ }
1312
+ }
1313
+ }
1314
+
1315
+ /// Check if blocks have compatible structure for merging
1316
+ fn blocks_are_compatible(&self, current: &ListBlock, next: &ListBlock) -> bool {
1317
+ current.is_ordered == next.is_ordered
1318
+ && current.blockquote_prefix == next.blockquote_prefix
1319
+ && current.nesting_level == next.nesting_level
1306
1320
  }
1307
1321
 
1308
- // Don't forget the last block
1309
- merged.push(current);
1322
+ /// Analyze the spacing between two list blocks
1323
+ fn analyze_spacing_between(&self, current: &ListBlock, next: &ListBlock) -> BlockSpacing {
1324
+ let gap = next.start_line - current.end_line;
1325
+
1326
+ match gap {
1327
+ 1 => BlockSpacing::Consecutive,
1328
+ 2 => BlockSpacing::SingleBlank,
1329
+ _ if gap > 2 => {
1330
+ if self.has_only_blank_lines_between(current, next) {
1331
+ BlockSpacing::MultipleBlanks
1332
+ } else {
1333
+ BlockSpacing::ContentBetween
1334
+ }
1335
+ }
1336
+ _ => BlockSpacing::Consecutive, // gap == 0, overlapping (shouldn't happen)
1337
+ }
1338
+ }
1339
+
1340
+ /// Check if unordered lists can be merged with a single blank line between
1341
+ fn can_merge_with_blank_between(&self, current: &ListBlock, next: &ListBlock) -> bool {
1342
+ // Only merge unordered lists with same marker across single blank
1343
+ !current.is_ordered && current.marker == next.marker
1344
+ }
1345
+
1346
+ /// Check if ordered lists can be merged when there's content between them
1347
+ fn can_merge_with_content_between(&self, current: &ListBlock, next: &ListBlock) -> bool {
1348
+ // Only consider merging ordered lists with meaningful content between
1349
+ current.is_ordered && next.is_ordered && has_meaningful_content_between(current, next, self.lines)
1350
+ }
1351
+
1352
+ /// Check if there are only blank lines between blocks
1353
+ fn has_only_blank_lines_between(&self, current: &ListBlock, next: &ListBlock) -> bool {
1354
+ for line_num in (current.end_line + 1)..next.start_line {
1355
+ if let Some(line_info) = self.lines.get(line_num - 1) {
1356
+ if !line_info.content.trim().is_empty() {
1357
+ return false;
1358
+ }
1359
+ }
1360
+ }
1361
+ true
1362
+ }
1363
+
1364
+ /// Merge two compatible list blocks into one
1365
+ fn merge_two_blocks(&self, mut current: ListBlock, next: &ListBlock) -> ListBlock {
1366
+ current.end_line = next.end_line;
1367
+ current.item_lines.extend_from_slice(&next.item_lines);
1368
+
1369
+ // Handle marker consistency for unordered lists
1370
+ if !current.is_ordered && self.markers_differ(&current, next) {
1371
+ current.marker = None; // Mixed markers
1372
+ }
1373
+
1374
+ current
1375
+ }
1376
+
1377
+ /// Check if two blocks have different markers
1378
+ fn markers_differ(&self, current: &ListBlock, next: &ListBlock) -> bool {
1379
+ current.marker.is_some() && next.marker.is_some() && current.marker != next.marker
1380
+ }
1381
+ }
1310
1382
 
1311
- *list_blocks = merged;
1383
+ /// Types of spacing between list blocks
1384
+ #[derive(Debug, PartialEq)]
1385
+ enum BlockSpacing {
1386
+ Consecutive, // No gap between blocks
1387
+ SingleBlank, // One blank line between blocks
1388
+ MultipleBlanks, // Multiple blank lines but no content
1389
+ ContentBetween, // Content exists between blocks
1312
1390
  }
1313
1391
 
1314
1392
  /// Check if there's meaningful content (not just blank lines) between two list blocks
@@ -609,6 +609,37 @@ fn find_markdown_files(
609
609
  // Add support for .markdownlintignore file
610
610
  walk_builder.add_custom_ignore_filename(".markdownlintignore");
611
611
 
612
+ // --- Pre-check for explicit file paths ---
613
+ // If not in discovery mode, validate that specified paths exist
614
+ if !is_discovery_mode {
615
+ for path_str in paths {
616
+ let path = Path::new(path_str);
617
+ if !path.exists() {
618
+ return Err(format!("File not found: {path_str}").into());
619
+ }
620
+ // If it's a file, check if it's a markdown file and add it directly
621
+ if path.is_file() {
622
+ if let Some(ext) = path.extension() {
623
+ if ext == "md" || ext == "markdown" {
624
+ let cleaned_path = if let Some(stripped) = path_str.strip_prefix("./") {
625
+ stripped.to_string()
626
+ } else {
627
+ path_str.clone()
628
+ };
629
+ file_paths.push(cleaned_path);
630
+ }
631
+ }
632
+ }
633
+ }
634
+
635
+ // If we found files directly, skip the walker
636
+ if !file_paths.is_empty() {
637
+ file_paths.sort();
638
+ file_paths.dedup();
639
+ return Ok(file_paths);
640
+ }
641
+ }
642
+
612
643
  // --- Execute Walk ---
613
644
 
614
645
  for result in walk_builder.build() {
@@ -628,7 +659,12 @@ fn find_markdown_files(
628
659
  file_paths.push(cleaned_path);
629
660
  }
630
661
  }
631
- Err(err) => eprintln!("Error walking directory: {err}"),
662
+ Err(err) => {
663
+ // Only show generic walking errors for directories, not for missing files
664
+ if is_discovery_mode {
665
+ eprintln!("Error walking directory: {err}");
666
+ }
667
+ }
632
668
  }
633
669
  }
634
670
 
@@ -7,16 +7,10 @@ use crate::utils::range_utils::{LineIndex, calculate_match_range};
7
7
 
8
8
  use crate::rule::{Fix, LintError, LintResult, LintWarning, Rule, RuleCategory, Severity};
9
9
  use crate::utils::document_structure::DocumentStructure;
10
- use lazy_static::lazy_static;
11
- use regex::Regex;
10
+ // No regex patterns needed for this rule
12
11
  use std::collections::HashMap;
13
12
  use toml;
14
13
 
15
- lazy_static! {
16
- // Regex to match blockquote prefixes (one or more '>' with optional spaces)
17
- static ref BLOCKQUOTE_PREFIX: Regex = Regex::new(r"^(\s*>\s*)+").unwrap();
18
- }
19
-
20
14
  /// Rule MD005: Inconsistent indentation for list items at the same level
21
15
  #[derive(Clone)]
22
16
  pub struct MD005ListIndent;
@@ -2,8 +2,7 @@ use crate::utils::range_utils::LineIndex;
2
2
 
3
3
  use crate::rule::{Fix, LintError, LintResult, LintWarning, Rule, RuleCategory, Severity};
4
4
  use crate::utils::document_structure::{DocumentStructure, DocumentStructureExtensions};
5
- use lazy_static::lazy_static;
6
- use regex::Regex;
5
+ use crate::utils::regex_cache::UNORDERED_LIST_MARKER_REGEX;
7
6
 
8
7
  /// Rule MD006: Consider starting bulleted lists at the leftmost column
9
8
  ///
@@ -16,14 +15,6 @@ use regex::Regex;
16
15
  #[derive(Clone)]
17
16
  pub struct MD006StartBullets;
18
17
 
19
- lazy_static! {
20
- // Pattern to match bullet list items: captures indentation, marker, and space after marker
21
- static ref BULLET_PATTERN: Regex = Regex::new(r"^(\s*)([*+-])(\s+)").unwrap();
22
-
23
- // Pattern to match code fence markers
24
- static ref CODE_FENCE_PATTERN: Regex = Regex::new(r"^(\s*)(```|~~~)").unwrap();
25
- }
26
-
27
18
  impl MD006StartBullets {
28
19
  /// Optimized check using centralized list blocks
29
20
  fn check_optimized(&self, ctx: &crate::lint_context::LintContext) -> LintResult {
@@ -84,7 +75,7 @@ impl MD006StartBullets {
84
75
 
85
76
  // For the fix, we need to replace the highlighted part with just the bullet marker
86
77
  let trimmed = line.trim_start();
87
- let bullet_part = if let Some(captures) = BULLET_PATTERN.captures(trimmed) {
78
+ let bullet_part = if let Some(captures) = UNORDERED_LIST_MARKER_REGEX.captures(trimmed) {
88
79
  let marker = captures.get(2).map_or("*", |m| m.as_str());
89
80
  format!("{marker} ")
90
81
  } else {
@@ -123,7 +114,7 @@ impl MD006StartBullets {
123
114
  }
124
115
  /// Checks if a line is a bullet list item and returns its indentation level
125
116
  fn is_bullet_list_item(line: &str) -> Option<usize> {
126
- if let Some(captures) = BULLET_PATTERN.captures(line) {
117
+ if let Some(captures) = UNORDERED_LIST_MARKER_REGEX.captures(line) {
127
118
  if let Some(indent) = captures.get(1) {
128
119
  return Some(indent.as_str().len());
129
120
  }
@@ -338,7 +329,7 @@ impl Rule for MD006StartBullets {
338
329
  let line = lines[line_idx];
339
330
  let trimmed = line.trim_start();
340
331
  // Extract just the bullet marker and normalize to single space
341
- let bullet_part = if let Some(captures) = BULLET_PATTERN.captures(trimmed) {
332
+ let bullet_part = if let Some(captures) = UNORDERED_LIST_MARKER_REGEX.captures(trimmed) {
342
333
  format!("{} ", captures.get(2).unwrap().as_str()) // Always use single space
343
334
  } else {
344
335
  "* ".to_string() // fallback
@@ -5,8 +5,7 @@ use crate::rule::{LintError, LintResult, LintWarning, Rule, RuleCategory, Severi
5
5
  use crate::rule_config_serde::RuleConfig;
6
6
  use crate::utils::document_structure::{DocumentStructure, DocumentStructureExtensions};
7
7
  use crate::utils::element_cache::{ElementCache, ListMarkerType};
8
- use lazy_static::lazy_static;
9
- use regex::Regex;
8
+ use crate::utils::regex_cache::{CODE_FENCE_REGEX, UNORDERED_LIST_MARKER_REGEX};
10
9
  use toml;
11
10
 
12
11
  mod md007_config;
@@ -17,10 +16,6 @@ pub struct MD007ULIndent {
17
16
  config: MD007Config,
18
17
  }
19
18
 
20
- lazy_static! {
21
- static ref LIST_ITEM_PATTERN: Regex = Regex::new(r"^(\s*)([*+-])(\s+)(.*)$").unwrap();
22
- }
23
-
24
19
  impl MD007ULIndent {
25
20
  pub fn new(indent: usize) -> Self {
26
21
  Self {
@@ -38,9 +33,7 @@ impl MD007ULIndent {
38
33
 
39
34
  #[allow(dead_code)]
40
35
  fn is_in_code_block(content: &str, line_idx: usize) -> bool {
41
- lazy_static! {
42
- static ref CODE_BLOCK_MARKER: Regex = Regex::new(r"^(```|~~~)").unwrap();
43
- }
36
+ // Use centralized code fence pattern
44
37
 
45
38
  let lines: Vec<&str> = content.lines().collect();
46
39
  let mut in_code_block = false;
@@ -50,7 +43,7 @@ impl MD007ULIndent {
50
43
  break;
51
44
  }
52
45
 
53
- if CODE_BLOCK_MARKER.is_match(line.trim_start()) {
46
+ if CODE_FENCE_REGEX.is_match(line.trim_start()) {
54
47
  in_code_block = !in_code_block;
55
48
  }
56
49
 
@@ -116,7 +109,7 @@ impl Rule for MD007ULIndent {
116
109
  let lines: Vec<&str> = content.lines().collect();
117
110
  if let Some(line) = lines.get(item.line_number - 1) {
118
111
  // Extract the marker and content
119
- if LIST_ITEM_PATTERN.captures(line).is_some() {
112
+ if UNORDERED_LIST_MARKER_REGEX.captures(line).is_some() {
120
113
  let correct_indent = " ".repeat(expected_indent);
121
114
 
122
115
  // Fix range should match warning range - only the problematic indentation
@@ -212,7 +205,7 @@ impl Rule for MD007ULIndent {
212
205
  let lines: Vec<&str> = content.lines().collect();
213
206
  if let Some(line) = lines.get(item.line_number - 1) {
214
207
  // Extract the marker and content
215
- if LIST_ITEM_PATTERN.captures(line).is_some() {
208
+ if UNORDERED_LIST_MARKER_REGEX.captures(line).is_some() {
216
209
  let correct_indent = " ".repeat(expected_indent);
217
210
 
218
211
  // Fix range should match warning range - only the problematic indentation
@@ -1,17 +1,12 @@
1
1
  use crate::rule::{Fix, LintError, LintResult, LintWarning, Rule, RuleCategory, Severity};
2
2
  use crate::rule_config_serde::RuleConfig;
3
3
  use crate::utils::range_utils::{LineIndex, calculate_trailing_range};
4
- use crate::utils::regex_cache::get_cached_regex;
5
- use lazy_static::lazy_static;
6
- use regex::Regex;
4
+ use crate::utils::regex_cache::{ORDERED_LIST_MARKER_REGEX, UNORDERED_LIST_MARKER_REGEX, get_cached_regex};
7
5
 
8
6
  mod md009_config;
9
7
  use md009_config::MD009Config;
10
8
 
11
- lazy_static! {
12
- // Optimized regex patterns for fix operations
13
- static ref TRAILING_SPACES_REGEX: std::sync::Arc<Regex> = get_cached_regex(r"(?m) +$").unwrap();
14
- }
9
+ // No need for lazy_static, we'll use get_cached_regex directly
15
10
 
16
11
  #[derive(Debug, Clone, Default)]
17
12
  pub struct MD009TrailingSpaces {
@@ -52,12 +47,7 @@ impl MD009TrailingSpaces {
52
47
 
53
48
  if let Some(prev) = prev_line {
54
49
  // Check for unordered list markers (*, -, +) with proper formatting
55
- lazy_static! {
56
- static ref LIST_MARKER_REGEX: Regex = Regex::new(r"^(\s*)[-*+]\s+").unwrap();
57
- static ref ORDERED_LIST_REGEX: Regex = Regex::new(r"^(\s*)\d+[.)]\s+").unwrap();
58
- }
59
-
60
- LIST_MARKER_REGEX.is_match(prev) || ORDERED_LIST_REGEX.is_match(prev)
50
+ UNORDERED_LIST_MARKER_REGEX.is_match(prev) || ORDERED_LIST_MARKER_REGEX.is_match(prev)
61
51
  } else {
62
52
  false
63
53
  }
@@ -204,7 +194,10 @@ impl Rule for MD009TrailingSpaces {
204
194
  // For simple cases (strict mode), use fast regex approach
205
195
  if self.config.strict {
206
196
  // In strict mode, remove ALL trailing spaces everywhere
207
- return Ok(TRAILING_SPACES_REGEX.replace_all(content, "").to_string());
197
+ return Ok(get_cached_regex(r"(?m) +$")
198
+ .unwrap()
199
+ .replace_all(content, "")
200
+ .to_string());
208
201
  }
209
202
 
210
203
  // For complex cases, we need line-by-line processing but with optimizations
@@ -4,17 +4,12 @@ use crate::rule_config_serde::RuleConfig;
4
4
  ///
5
5
  /// See [docs/md010.md](../../docs/md010.md) for full documentation, configuration, and examples.
6
6
  use crate::utils::range_utils::{LineIndex, calculate_match_range};
7
- use lazy_static::lazy_static;
8
- use regex::Regex;
7
+ use crate::utils::regex_cache::{HTML_COMMENT_END, HTML_COMMENT_START};
9
8
 
10
9
  mod md010_config;
11
10
  use md010_config::MD010Config;
12
11
 
13
- lazy_static! {
14
- // Pattern to detect HTML comments (start and end tags separately)
15
- static ref HTML_COMMENT_START: Regex = Regex::new(r"<!--").unwrap();
16
- static ref HTML_COMMENT_END: Regex = Regex::new(r"-->").unwrap();
17
- }
12
+ // HTML comment patterns are now imported from regex_cache
18
13
 
19
14
  /// Rule MD010: Hard tabs
20
15
  #[derive(Clone, Default)]
@@ -14,7 +14,6 @@ lazy_static! {
14
14
  static ref REVERSED_LINK_CHECK_REGEX: Regex = Regex::new(
15
15
  r"\(([^)]*(?:\([^)]*\)[^)]*)*)\)\[([^\]]+)\]"
16
16
  ).unwrap();
17
- static ref CODE_FENCE_REGEX: Regex = Regex::new(r"^(\s*)(```|~~~)").unwrap();
18
17
 
19
18
  // Pattern to detect escaped brackets and parentheses
20
19
  static ref ESCAPED_CHARS: Regex = Regex::new(r"\\[\[\]()]").unwrap();