rumdl 0.0.69__tar.gz → 0.0.70__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 (262) hide show
  1. {rumdl-0.0.69 → rumdl-0.0.70}/Cargo.lock +1 -1
  2. {rumdl-0.0.69 → rumdl-0.0.70}/Cargo.toml +1 -1
  3. {rumdl-0.0.69 → rumdl-0.0.70}/PKG-INFO +1 -1
  4. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md012_no_multiple_blanks.rs +55 -0
  5. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md012_test.rs +92 -0
  6. {rumdl-0.0.69 → rumdl-0.0.70}/.rumdl.toml +0 -0
  7. {rumdl-0.0.69 → rumdl-0.0.70}/MANIFEST.in +0 -0
  8. {rumdl-0.0.69 → rumdl-0.0.70}/Makefile +0 -0
  9. {rumdl-0.0.69 → rumdl-0.0.70}/README.md +0 -0
  10. {rumdl-0.0.69 → rumdl-0.0.70}/assets/logo.png +0 -0
  11. {rumdl-0.0.69 → rumdl-0.0.70}/benches/fix_performance.rs +0 -0
  12. {rumdl-0.0.69 → rumdl-0.0.70}/benches/range_performance.rs +0 -0
  13. {rumdl-0.0.69 → rumdl-0.0.70}/benches/range_utils_benchmark.rs +0 -0
  14. {rumdl-0.0.69 → rumdl-0.0.70}/benches/rule_performance.rs +0 -0
  15. {rumdl-0.0.69 → rumdl-0.0.70}/benches/simple_fix_bench.rs +0 -0
  16. {rumdl-0.0.69 → rumdl-0.0.70}/docs/RULES.md +0 -0
  17. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md001.md +0 -0
  18. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md002.md +0 -0
  19. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md003.md +0 -0
  20. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md004.md +0 -0
  21. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md005.md +0 -0
  22. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md006.md +0 -0
  23. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md007.md +0 -0
  24. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md009.md +0 -0
  25. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md010.md +0 -0
  26. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md011.md +0 -0
  27. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md012.md +0 -0
  28. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md013.md +0 -0
  29. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md014.md +0 -0
  30. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md018.md +0 -0
  31. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md019.md +0 -0
  32. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md020.md +0 -0
  33. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md021.md +0 -0
  34. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md022.md +0 -0
  35. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md023.md +0 -0
  36. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md024.md +0 -0
  37. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md025.md +0 -0
  38. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md026.md +0 -0
  39. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md027.md +0 -0
  40. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md028.md +0 -0
  41. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md029.md +0 -0
  42. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md030.md +0 -0
  43. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md031.md +0 -0
  44. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md032.md +0 -0
  45. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md033.md +0 -0
  46. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md034.md +0 -0
  47. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md035.md +0 -0
  48. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md036.md +0 -0
  49. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md037.md +0 -0
  50. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md038.md +0 -0
  51. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md039.md +0 -0
  52. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md040.md +0 -0
  53. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md041.md +0 -0
  54. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md042.md +0 -0
  55. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md043.md +0 -0
  56. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md044.md +0 -0
  57. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md045.md +0 -0
  58. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md046.md +0 -0
  59. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md047.md +0 -0
  60. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md048.md +0 -0
  61. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md049.md +0 -0
  62. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md050.md +0 -0
  63. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md051.md +0 -0
  64. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md052.md +0 -0
  65. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md053.md +0 -0
  66. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md054.md +0 -0
  67. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md055.md +0 -0
  68. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md056.md +0 -0
  69. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md057.md +0 -0
  70. {rumdl-0.0.69 → rumdl-0.0.70}/docs/md058.md +0 -0
  71. {rumdl-0.0.69 → rumdl-0.0.70}/issues/plan-rule-parity-with-markdownlint.md +0 -0
  72. {rumdl-0.0.69 → rumdl-0.0.70}/parity_check.py +0 -0
  73. {rumdl-0.0.69 → rumdl-0.0.70}/pyproject.toml +0 -0
  74. {rumdl-0.0.69 → rumdl-0.0.70}/python/MANIFEST.in +0 -0
  75. {rumdl-0.0.69 → rumdl-0.0.70}/python/PYTHON-README.md +0 -0
  76. {rumdl-0.0.69 → rumdl-0.0.70}/python/rumdl/__init__.py +0 -0
  77. {rumdl-0.0.69 → rumdl-0.0.70}/python/rumdl/__main__.py +0 -0
  78. {rumdl-0.0.69 → rumdl-0.0.70}/python/rumdl/py.typed +0 -0
  79. {rumdl-0.0.69 → rumdl-0.0.70}/rumdl.toml.example +0 -0
  80. {rumdl-0.0.69 → rumdl-0.0.70}/src/config.rs +0 -0
  81. {rumdl-0.0.69 → rumdl-0.0.70}/src/init.rs +0 -0
  82. {rumdl-0.0.69 → rumdl-0.0.70}/src/lib.rs +0 -0
  83. {rumdl-0.0.69 → rumdl-0.0.70}/src/lint_context.rs +0 -0
  84. {rumdl-0.0.69 → rumdl-0.0.70}/src/lsp/mod.rs +0 -0
  85. {rumdl-0.0.69 → rumdl-0.0.70}/src/lsp/server.rs +0 -0
  86. {rumdl-0.0.69 → rumdl-0.0.70}/src/lsp/types.rs +0 -0
  87. {rumdl-0.0.69 → rumdl-0.0.70}/src/main.rs +0 -0
  88. {rumdl-0.0.69 → rumdl-0.0.70}/src/markdownlint_config.rs +0 -0
  89. {rumdl-0.0.69 → rumdl-0.0.70}/src/parallel.rs +0 -0
  90. {rumdl-0.0.69 → rumdl-0.0.70}/src/performance.rs +0 -0
  91. {rumdl-0.0.69 → rumdl-0.0.70}/src/profiling.rs +0 -0
  92. {rumdl-0.0.69 → rumdl-0.0.70}/src/python.rs +0 -0
  93. {rumdl-0.0.69 → rumdl-0.0.70}/src/rule.rs +0 -0
  94. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/blockquote_utils.rs +0 -0
  95. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/code_block_utils.rs +0 -0
  96. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/code_fence_utils.rs +0 -0
  97. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/emphasis_style.rs +0 -0
  98. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/front_matter_utils.rs +0 -0
  99. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/heading_utils.rs +0 -0
  100. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/list_utils.rs +0 -0
  101. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md001_heading_increment.rs +0 -0
  102. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md002_first_heading_h1.rs +0 -0
  103. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md003_heading_style.rs +0 -0
  104. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md004_unordered_list_style.rs +0 -0
  105. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md005_list_indent.rs +0 -0
  106. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md006_start_bullets.rs +0 -0
  107. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md007_ul_indent.rs +0 -0
  108. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md009_trailing_spaces.rs +0 -0
  109. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md010_no_hard_tabs.rs +0 -0
  110. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md011_no_reversed_links.rs +0 -0
  111. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md013_line_length.rs +0 -0
  112. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md014_commands_show_output.rs +0 -0
  113. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md018_no_missing_space_atx.rs +0 -0
  114. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md019_no_multiple_space_atx.rs +0 -0
  115. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
  116. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
  117. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md022_blanks_around_headings.rs +0 -0
  118. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md023_heading_start_left.rs +0 -0
  119. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md024_no_duplicate_heading.rs +0 -0
  120. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md025_single_title.rs +0 -0
  121. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md026_no_trailing_punctuation.rs +0 -0
  122. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
  123. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md028_no_blanks_blockquote.rs +0 -0
  124. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md029_ordered_list_prefix.rs +0 -0
  125. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md030_list_marker_space.rs +0 -0
  126. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md031_blanks_around_fences.rs +0 -0
  127. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md032_blanks_around_lists.rs +0 -0
  128. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md033_no_inline_html.rs +0 -0
  129. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md034_no_bare_urls.rs +0 -0
  130. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md035_hr_style.rs +0 -0
  131. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md036_no_emphasis_only_first.rs +0 -0
  132. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md037_spaces_around_emphasis.rs +0 -0
  133. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md038_no_space_in_code.rs +0 -0
  134. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md039_no_space_in_links.rs +0 -0
  135. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md040_fenced_code_language.rs +0 -0
  136. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md041_first_line_heading.rs +0 -0
  137. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md042_no_empty_links.rs +0 -0
  138. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md043_required_headings.rs +0 -0
  139. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md044_proper_names.rs +0 -0
  140. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md045_no_alt_text.rs +0 -0
  141. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md046_code_block_style.rs +0 -0
  142. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md047_single_trailing_newline.rs +0 -0
  143. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md048_code_fence_style.rs +0 -0
  144. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md049_emphasis_style.rs +0 -0
  145. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md050_strong_style.rs +0 -0
  146. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md051_link_fragments.rs +0 -0
  147. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md052_reference_links_images.rs +0 -0
  148. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md053_link_image_reference_definitions.rs +0 -0
  149. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md054_link_image_style.rs +0 -0
  150. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md055_table_pipe_style.rs +0 -0
  151. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md056_table_column_count.rs +0 -0
  152. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md057_existing_relative_links.rs +0 -0
  153. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/md058_blanks_around_tables.rs +0 -0
  154. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/mod.rs +0 -0
  155. {rumdl-0.0.69 → rumdl-0.0.70}/src/rules/strong_style.rs +0 -0
  156. {rumdl-0.0.69 → rumdl-0.0.70}/src/utils/ast_utils.rs +0 -0
  157. {rumdl-0.0.69 → rumdl-0.0.70}/src/utils/code_block_utils.rs +0 -0
  158. {rumdl-0.0.69 → rumdl-0.0.70}/src/utils/document_structure.rs +0 -0
  159. {rumdl-0.0.69 → rumdl-0.0.70}/src/utils/early_returns.rs +0 -0
  160. {rumdl-0.0.69 → rumdl-0.0.70}/src/utils/element_cache.rs +0 -0
  161. {rumdl-0.0.69 → rumdl-0.0.70}/src/utils/markdown_elements.rs +0 -0
  162. {rumdl-0.0.69 → rumdl-0.0.70}/src/utils/mod.rs +0 -0
  163. {rumdl-0.0.69 → rumdl-0.0.70}/src/utils/range_utils.rs +0 -0
  164. {rumdl-0.0.69 → rumdl-0.0.70}/src/utils/regex_cache.rs +0 -0
  165. {rumdl-0.0.69 → rumdl-0.0.70}/src/utils/string_interner.rs +0 -0
  166. {rumdl-0.0.69 → rumdl-0.0.70}/src/utils/table_utils.rs +0 -0
  167. {rumdl-0.0.69 → rumdl-0.0.70}/tests/advanced_integration_tests.rs +0 -0
  168. {rumdl-0.0.69 → rumdl-0.0.70}/tests/character_ranges/additional_tests.rs +0 -0
  169. {rumdl-0.0.69 → rumdl-0.0.70}/tests/character_ranges/basic_tests.rs +0 -0
  170. {rumdl-0.0.69 → rumdl-0.0.70}/tests/character_ranges/comprehensive_tests.rs +0 -0
  171. {rumdl-0.0.69 → rumdl-0.0.70}/tests/character_ranges/extended_tests.rs +0 -0
  172. {rumdl-0.0.69 → rumdl-0.0.70}/tests/character_ranges/mod.rs +0 -0
  173. {rumdl-0.0.69 → rumdl-0.0.70}/tests/character_ranges/unicode_utils.rs +0 -0
  174. {rumdl-0.0.69 → rumdl-0.0.70}/tests/cli_duplication_test.rs +0 -0
  175. {rumdl-0.0.69 → rumdl-0.0.70}/tests/cli_integration_tests.rs +0 -0
  176. {rumdl-0.0.69 → rumdl-0.0.70}/tests/commonmark_compliance_tests.rs +0 -0
  177. {rumdl-0.0.69 → rumdl-0.0.70}/tests/comprehensive_integration_tests.rs +0 -0
  178. {rumdl-0.0.69 → rumdl-0.0.70}/tests/config_application_tests.rs +0 -0
  179. {rumdl-0.0.69 → rumdl-0.0.70}/tests/config_tests.rs +0 -0
  180. {rumdl-0.0.69 → rumdl-0.0.70}/tests/init_command_test.rs +0 -0
  181. {rumdl-0.0.69 → rumdl-0.0.70}/tests/init_tests.rs +0 -0
  182. {rumdl-0.0.69 → rumdl-0.0.70}/tests/integration_tests.rs +0 -0
  183. {rumdl-0.0.69 → rumdl-0.0.70}/tests/json_output_test.rs +0 -0
  184. {rumdl-0.0.69 → rumdl-0.0.70}/tests/lib.rs +0 -0
  185. {rumdl-0.0.69 → rumdl-0.0.70}/tests/lsp_integration_tests.rs +0 -0
  186. {rumdl-0.0.69 → rumdl-0.0.70}/tests/lsp_tests.rs +0 -0
  187. {rumdl-0.0.69 → rumdl-0.0.70}/tests/markdownlint_cli_integration.rs +0 -0
  188. {rumdl-0.0.69 → rumdl-0.0.70}/tests/markdownlint_config_test.rs +0 -0
  189. {rumdl-0.0.69 → rumdl-0.0.70}/tests/md030_edge_cases.md +0 -0
  190. {rumdl-0.0.69 → rumdl-0.0.70}/tests/output_format_tests.rs +0 -0
  191. {rumdl-0.0.69 → rumdl-0.0.70}/tests/perf_check.rs +0 -0
  192. {rumdl-0.0.69 → rumdl-0.0.70}/tests/pyproject_config_tests.rs +0 -0
  193. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md001_test.rs +0 -0
  194. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md001_unicode_test.rs +0 -0
  195. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md002_test.rs +0 -0
  196. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md003_test.rs +0 -0
  197. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md004_test.rs +0 -0
  198. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md005_test.rs +0 -0
  199. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md006_test.rs +0 -0
  200. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md006_unicode_test.rs +0 -0
  201. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md007_test.rs +0 -0
  202. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md009_test.rs +0 -0
  203. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md010_test.rs +0 -0
  204. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md011_test.rs +0 -0
  205. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md013_test.rs +0 -0
  206. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md014_test.rs +0 -0
  207. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md018_test.rs +0 -0
  208. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md019_test.rs +0 -0
  209. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md020_test.rs +0 -0
  210. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md021_test.rs +0 -0
  211. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md022_test.rs +0 -0
  212. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md023_extended_test.rs +0 -0
  213. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md023_test.rs +0 -0
  214. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md024_test.rs +0 -0
  215. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md025_test.rs +0 -0
  216. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md026_test.rs +0 -0
  217. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md027_test.rs +0 -0
  218. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md028_test.rs +0 -0
  219. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md029_test.rs +0 -0
  220. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md030_test.rs +0 -0
  221. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md031_test.rs +0 -0
  222. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md032_test.rs +0 -0
  223. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md033_extended_test.rs +0 -0
  224. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md033_test.rs +0 -0
  225. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md034_test.rs +0 -0
  226. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md035_test.rs +0 -0
  227. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md036_test.rs +0 -0
  228. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md037_test.rs +0 -0
  229. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md038_test.rs +0 -0
  230. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md039_test.rs +0 -0
  231. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md040_test.rs +0 -0
  232. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md041_test.rs +0 -0
  233. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md042_test.rs +0 -0
  234. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md043_test.rs +0 -0
  235. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md044_test.rs +0 -0
  236. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md045_test.rs +0 -0
  237. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md046_test.rs +0 -0
  238. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md047_test.rs +0 -0
  239. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md048_test.rs +0 -0
  240. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md049_test.rs +0 -0
  241. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md050_test.rs +0 -0
  242. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md051_test.rs +0 -0
  243. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md052_test.rs +0 -0
  244. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md053_additional_test.rs +0 -0
  245. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md053_proptest.rs +0 -0
  246. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md053_test.rs +0 -0
  247. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md054_test.rs +0 -0
  248. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md054_unicode_test.rs +0 -0
  249. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md055_test.rs +0 -0
  250. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md056_test.rs +0 -0
  251. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md057_test.rs +0 -0
  252. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/md058_test.rs +0 -0
  253. {rumdl-0.0.69 → rumdl-0.0.70}/tests/rules/mod.rs +0 -0
  254. {rumdl-0.0.69 → rumdl-0.0.70}/tests/utils/blockquote_utils_test.rs +0 -0
  255. {rumdl-0.0.69 → rumdl-0.0.70}/tests/utils/code_block_utils_extended_test.rs +0 -0
  256. {rumdl-0.0.69 → rumdl-0.0.70}/tests/utils/code_block_utils_test.rs +0 -0
  257. {rumdl-0.0.69 → rumdl-0.0.70}/tests/utils/core_utils_test.rs +0 -0
  258. {rumdl-0.0.69 → rumdl-0.0.70}/tests/utils/front_matter_utils_test.rs +0 -0
  259. {rumdl-0.0.69 → rumdl-0.0.70}/tests/utils/line_index_test.rs +0 -0
  260. {rumdl-0.0.69 → rumdl-0.0.70}/tests/utils/mod.rs +0 -0
  261. {rumdl-0.0.69 → rumdl-0.0.70}/tests/utils_markdown_edge_cases.rs +0 -0
  262. {rumdl-0.0.69 → rumdl-0.0.70}/tests/utils_tests.rs +0 -0
@@ -1789,7 +1789,7 @@ dependencies = [
1789
1789
 
1790
1790
  [[package]]
1791
1791
  name = "rumdl"
1792
- version = "0.0.69"
1792
+ version = "0.0.70"
1793
1793
  dependencies = [
1794
1794
  "anyhow",
1795
1795
  "assert_cmd",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "rumdl"
3
- version = "0.0.69"
3
+ version = "0.0.70"
4
4
  edition = "2021"
5
5
  description = "A fast Markdown linter written in Rust (Ru(st) MarkDown Linter)"
6
6
  authors = ["Ruben J. Jongejan <ruben.jongejan@gmail.com>"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rumdl
3
- Version: 0.0.69
3
+ Version: 0.0.70
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -23,6 +23,19 @@ impl MD012NoMultipleBlanks {
23
23
  Self { maximum }
24
24
  }
25
25
 
26
+ #[cfg(test)]
27
+ pub fn debug_regions(lines: &[&str]) -> (Vec<(usize, usize)>, Vec<(usize, usize)>) {
28
+ let code_regions = Self::compute_code_block_regions(lines);
29
+ let front_matter_regions = Self::compute_front_matter_regions(lines);
30
+ println!("Lines:");
31
+ for (i, line) in lines.iter().enumerate() {
32
+ println!(" {}: {:?}", i, line);
33
+ }
34
+ println!("Code block regions: {:?}", code_regions);
35
+ println!("Front matter regions: {:?}", front_matter_regions);
36
+ (code_regions, front_matter_regions)
37
+ }
38
+
26
39
  /// Pre-compute code block regions for efficient lookup
27
40
  fn compute_code_block_regions(lines: &[&str]) -> Vec<(usize, usize)> {
28
41
  let mut regions = Vec::new();
@@ -48,6 +61,43 @@ impl MD012NoMultipleBlanks {
48
61
  regions.push((start_line, lines.len() - 1));
49
62
  }
50
63
 
64
+ // Second pass: detect indented code blocks (4+ spaces)
65
+ let mut in_indented_block = false;
66
+ let mut indented_start = 0;
67
+
68
+ for (i, line) in lines.iter().enumerate() {
69
+ // Skip lines that are already in fenced code blocks
70
+ if Self::is_in_regions(i, &regions) {
71
+ continue;
72
+ }
73
+
74
+ let is_indented_code = line.len() >= 4 && line.starts_with(" ") && !line.trim().is_empty();
75
+ let is_blank = line.trim().is_empty();
76
+
77
+ if is_indented_code {
78
+ if !in_indented_block {
79
+ // Start of indented code block
80
+ indented_start = i;
81
+ in_indented_block = true;
82
+ }
83
+ } else if !is_blank {
84
+ // Non-blank, non-indented line ends the indented code block
85
+ if in_indented_block {
86
+ regions.push((indented_start, i - 1));
87
+ in_indented_block = false;
88
+ }
89
+ }
90
+ // Blank lines don't end indented code blocks, they're part of them
91
+ }
92
+
93
+ // Handle indented code block at end of file
94
+ if in_indented_block {
95
+ regions.push((indented_start, lines.len() - 1));
96
+ }
97
+
98
+ // Sort regions by start position
99
+ regions.sort_by(|a, b| a.0.cmp(&b.0));
100
+
51
101
  regions
52
102
  }
53
103
 
@@ -130,6 +180,11 @@ impl Rule for MD012NoMultipleBlanks {
130
180
  if Self::is_in_regions(line_num, &code_block_regions)
131
181
  || Self::is_in_regions(line_num, &front_matter_regions)
132
182
  {
183
+ // Reset blank line counting when entering a code block or front matter
184
+ // to prevent counting blank lines across block boundaries
185
+ if blank_count > 0 {
186
+ blank_count = 0;
187
+ }
133
188
  continue;
134
189
  }
135
190
 
@@ -131,3 +131,95 @@ fn test_md012_whitespace_lines() {
131
131
  "Multiple consecutive blank lines between content (Expected: 1; Actual: 2)"
132
132
  );
133
133
  }
134
+
135
+ #[test]
136
+ fn test_md012_indented_code_blocks() {
137
+ let rule = MD012NoMultipleBlanks::default();
138
+ let content = "Line 1\n\n code block\n\n more code\n\nLine 2\n";
139
+ let ctx = LintContext::new(content);
140
+ let result = rule.check(&ctx).unwrap();
141
+ assert!(result.is_empty()); // Multiple blank lines in indented code blocks are allowed
142
+ }
143
+
144
+ #[test]
145
+ fn test_md012_indented_fenced_code_blocks() {
146
+ let rule = MD012NoMultipleBlanks::default();
147
+ let content = "Text\n\n ```bash\n code\n ```\n\nMore text\n";
148
+ let ctx = LintContext::new(content);
149
+ let result = rule.check(&ctx).unwrap();
150
+ assert!(result.is_empty()); // Should not flag blank lines around indented fenced code blocks
151
+ }
152
+
153
+ #[test]
154
+ fn test_md012_debug_indented_fenced() {
155
+ let content = "Text\n\n ```bash\n code\n ```\n\nMore text\n";
156
+ let lines: Vec<&str> = content.lines().collect();
157
+
158
+ // Debug the regions
159
+ println!("Lines:");
160
+ for (i, line) in lines.iter().enumerate() {
161
+ println!(" {}: {:?}", i, line);
162
+ }
163
+
164
+ // Test the rule
165
+ let rule = MD012NoMultipleBlanks::default();
166
+ let ctx = LintContext::new(content);
167
+ let result = rule.check(&ctx).unwrap();
168
+
169
+ println!("Warnings: {:?}", result);
170
+ for warning in &result {
171
+ println!(" Line {}: {}", warning.line, warning.message);
172
+ }
173
+
174
+ // This should pass but currently fails
175
+ assert!(result.is_empty(), "Expected no warnings, got: {:?}", result);
176
+ }
177
+
178
+ #[test]
179
+ fn test_md012_contributing_pattern() {
180
+ // This reproduces the exact pattern from the CONTRIBUTING file that's causing false positives
181
+ let content = "To set up the MLflow repository, run the following commands:\n\n ```bash\n # Clone the repository\n git clone --recurse-submodules git@github.com:<username>/mlflow.git\n # The alternative way of cloning through https may cause permission error during branch push\n";
182
+
183
+ let rule = MD012NoMultipleBlanks::default();
184
+ let ctx = LintContext::new(content);
185
+ let result = rule.check(&ctx).unwrap();
186
+
187
+ println!("Content lines:");
188
+ for (i, line) in content.lines().enumerate() {
189
+ println!(" {}: {:?}", i, line);
190
+ }
191
+
192
+ println!("Warnings: {:?}", result);
193
+ for warning in &result {
194
+ println!(" Line {}: {}", warning.line, warning.message);
195
+ }
196
+
197
+ // This should pass - there's only 1 blank line before the indented fenced code block
198
+ assert!(result.is_empty(), "Expected no warnings, got: {:?}", result);
199
+ }
200
+
201
+ #[test]
202
+ fn test_md012_region_calculation() {
203
+ // Test with a simple fenced code block to debug region calculation
204
+ let content = "Text\n\n```bash\ncode\n```\n\nMore text\n";
205
+ let lines: Vec<&str> = content.lines().collect();
206
+
207
+ println!("Lines:");
208
+ for (i, line) in lines.iter().enumerate() {
209
+ println!(" {}: {:?}", i, line);
210
+ }
211
+
212
+ // We need to access the compute_code_block_regions function somehow
213
+ // For now, let's just test the rule behavior
214
+ let rule = MD012NoMultipleBlanks::default();
215
+ let ctx = LintContext::new(content);
216
+ let result = rule.check(&ctx).unwrap();
217
+
218
+ println!("Warnings: {:?}", result);
219
+ for warning in &result {
220
+ println!(" Line {}: {}", warning.line, warning.message);
221
+ }
222
+
223
+ // This should pass - there's only 1 blank line before and after the code block
224
+ assert!(result.is_empty(), "Expected no warnings, got: {:?}", result);
225
+ }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes