rumdl 0.0.75__tar.gz → 0.0.76__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 (263) hide show
  1. {rumdl-0.0.75 → rumdl-0.0.76}/Cargo.lock +1 -1
  2. {rumdl-0.0.75 → rumdl-0.0.76}/Cargo.toml +1 -1
  3. {rumdl-0.0.75 → rumdl-0.0.76}/PKG-INFO +1 -1
  4. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md005_list_indent.rs +6 -0
  5. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md006_start_bullets.rs +14 -13
  6. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md011_no_reversed_links.rs +6 -0
  7. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md019_no_multiple_space_atx.rs +8 -5
  8. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md021_no_multiple_space_closed_atx.rs +12 -34
  9. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md023_heading_start_left.rs +16 -20
  10. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md027_multiple_spaces_blockquote.rs +2 -2
  11. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md028_no_blanks_blockquote.rs +6 -0
  12. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md030_list_marker_space.rs +13 -25
  13. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md031_blanks_around_fences.rs +6 -0
  14. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md037_spaces_around_emphasis.rs +6 -0
  15. {rumdl-0.0.75 → rumdl-0.0.76}/tests/character_ranges/basic_tests.rs +1 -1
  16. {rumdl-0.0.75 → rumdl-0.0.76}/tests/character_ranges/extended_tests.rs +2 -2
  17. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md019_test.rs +1 -1
  18. rumdl-0.0.76/tests/vscode_extension_fixes.rs +375 -0
  19. {rumdl-0.0.75 → rumdl-0.0.76}/.rumdl.toml +0 -0
  20. {rumdl-0.0.75 → rumdl-0.0.76}/MANIFEST.in +0 -0
  21. {rumdl-0.0.75 → rumdl-0.0.76}/Makefile +0 -0
  22. {rumdl-0.0.75 → rumdl-0.0.76}/README.md +0 -0
  23. {rumdl-0.0.75 → rumdl-0.0.76}/assets/logo.png +0 -0
  24. {rumdl-0.0.75 → rumdl-0.0.76}/benches/fix_performance.rs +0 -0
  25. {rumdl-0.0.75 → rumdl-0.0.76}/benches/range_performance.rs +0 -0
  26. {rumdl-0.0.75 → rumdl-0.0.76}/benches/range_utils_benchmark.rs +0 -0
  27. {rumdl-0.0.75 → rumdl-0.0.76}/benches/rule_performance.rs +0 -0
  28. {rumdl-0.0.75 → rumdl-0.0.76}/benches/simple_fix_bench.rs +0 -0
  29. {rumdl-0.0.75 → rumdl-0.0.76}/docs/RULES.md +0 -0
  30. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md001.md +0 -0
  31. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md002.md +0 -0
  32. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md003.md +0 -0
  33. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md004.md +0 -0
  34. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md005.md +0 -0
  35. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md006.md +0 -0
  36. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md007.md +0 -0
  37. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md009.md +0 -0
  38. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md010.md +0 -0
  39. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md011.md +0 -0
  40. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md012.md +0 -0
  41. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md013.md +0 -0
  42. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md014.md +0 -0
  43. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md018.md +0 -0
  44. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md019.md +0 -0
  45. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md020.md +0 -0
  46. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md021.md +0 -0
  47. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md022.md +0 -0
  48. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md023.md +0 -0
  49. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md024.md +0 -0
  50. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md025.md +0 -0
  51. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md026.md +0 -0
  52. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md027.md +0 -0
  53. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md028.md +0 -0
  54. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md029.md +0 -0
  55. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md030.md +0 -0
  56. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md031.md +0 -0
  57. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md032.md +0 -0
  58. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md033.md +0 -0
  59. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md034.md +0 -0
  60. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md035.md +0 -0
  61. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md036.md +0 -0
  62. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md037.md +0 -0
  63. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md038.md +0 -0
  64. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md039.md +0 -0
  65. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md040.md +0 -0
  66. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md041.md +0 -0
  67. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md042.md +0 -0
  68. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md043.md +0 -0
  69. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md044.md +0 -0
  70. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md045.md +0 -0
  71. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md046.md +0 -0
  72. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md047.md +0 -0
  73. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md048.md +0 -0
  74. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md049.md +0 -0
  75. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md050.md +0 -0
  76. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md051.md +0 -0
  77. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md052.md +0 -0
  78. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md053.md +0 -0
  79. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md054.md +0 -0
  80. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md055.md +0 -0
  81. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md056.md +0 -0
  82. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md057.md +0 -0
  83. {rumdl-0.0.75 → rumdl-0.0.76}/docs/md058.md +0 -0
  84. {rumdl-0.0.75 → rumdl-0.0.76}/issues/plan-rule-parity-with-markdownlint.md +0 -0
  85. {rumdl-0.0.75 → rumdl-0.0.76}/parity_check.py +0 -0
  86. {rumdl-0.0.75 → rumdl-0.0.76}/pyproject.toml +0 -0
  87. {rumdl-0.0.75 → rumdl-0.0.76}/python/MANIFEST.in +0 -0
  88. {rumdl-0.0.75 → rumdl-0.0.76}/python/PYTHON-README.md +0 -0
  89. {rumdl-0.0.75 → rumdl-0.0.76}/python/rumdl/__init__.py +0 -0
  90. {rumdl-0.0.75 → rumdl-0.0.76}/python/rumdl/__main__.py +0 -0
  91. {rumdl-0.0.75 → rumdl-0.0.76}/python/rumdl/py.typed +0 -0
  92. {rumdl-0.0.75 → rumdl-0.0.76}/rumdl.toml.example +0 -0
  93. {rumdl-0.0.75 → rumdl-0.0.76}/src/config.rs +0 -0
  94. {rumdl-0.0.75 → rumdl-0.0.76}/src/init.rs +0 -0
  95. {rumdl-0.0.75 → rumdl-0.0.76}/src/lib.rs +0 -0
  96. {rumdl-0.0.75 → rumdl-0.0.76}/src/lint_context.rs +0 -0
  97. {rumdl-0.0.75 → rumdl-0.0.76}/src/lsp/mod.rs +0 -0
  98. {rumdl-0.0.75 → rumdl-0.0.76}/src/lsp/server.rs +0 -0
  99. {rumdl-0.0.75 → rumdl-0.0.76}/src/lsp/types.rs +0 -0
  100. {rumdl-0.0.75 → rumdl-0.0.76}/src/main.rs +0 -0
  101. {rumdl-0.0.75 → rumdl-0.0.76}/src/markdownlint_config.rs +0 -0
  102. {rumdl-0.0.75 → rumdl-0.0.76}/src/parallel.rs +0 -0
  103. {rumdl-0.0.75 → rumdl-0.0.76}/src/performance.rs +0 -0
  104. {rumdl-0.0.75 → rumdl-0.0.76}/src/profiling.rs +0 -0
  105. {rumdl-0.0.75 → rumdl-0.0.76}/src/python.rs +0 -0
  106. {rumdl-0.0.75 → rumdl-0.0.76}/src/rule.rs +0 -0
  107. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/blockquote_utils.rs +0 -0
  108. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/code_block_utils.rs +0 -0
  109. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/code_fence_utils.rs +0 -0
  110. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/emphasis_style.rs +0 -0
  111. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/front_matter_utils.rs +0 -0
  112. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/heading_utils.rs +0 -0
  113. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/list_utils.rs +0 -0
  114. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md001_heading_increment.rs +0 -0
  115. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md002_first_heading_h1.rs +0 -0
  116. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md003_heading_style.rs +0 -0
  117. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md004_unordered_list_style.rs +0 -0
  118. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md007_ul_indent.rs +0 -0
  119. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md009_trailing_spaces.rs +0 -0
  120. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md010_no_hard_tabs.rs +0 -0
  121. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md012_no_multiple_blanks.rs +0 -0
  122. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md013_line_length.rs +0 -0
  123. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md014_commands_show_output.rs +0 -0
  124. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md018_no_missing_space_atx.rs +0 -0
  125. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
  126. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md022_blanks_around_headings.rs +0 -0
  127. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md024_no_duplicate_heading.rs +0 -0
  128. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md025_single_title.rs +0 -0
  129. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md026_no_trailing_punctuation.rs +0 -0
  130. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md029_ordered_list_prefix.rs +0 -0
  131. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md032_blanks_around_lists.rs +0 -0
  132. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md033_no_inline_html.rs +0 -0
  133. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md034_no_bare_urls.rs +0 -0
  134. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md035_hr_style.rs +0 -0
  135. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md036_no_emphasis_only_first.rs +0 -0
  136. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md038_no_space_in_code.rs +0 -0
  137. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md039_no_space_in_links.rs +0 -0
  138. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md040_fenced_code_language.rs +0 -0
  139. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md041_first_line_heading.rs +0 -0
  140. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md042_no_empty_links.rs +0 -0
  141. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md043_required_headings.rs +0 -0
  142. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md044_proper_names.rs +0 -0
  143. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md045_no_alt_text.rs +0 -0
  144. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md046_code_block_style.rs +0 -0
  145. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md047_single_trailing_newline.rs +0 -0
  146. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md048_code_fence_style.rs +0 -0
  147. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md049_emphasis_style.rs +0 -0
  148. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md050_strong_style.rs +0 -0
  149. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md051_link_fragments.rs +0 -0
  150. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md052_reference_links_images.rs +0 -0
  151. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md053_link_image_reference_definitions.rs +0 -0
  152. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md054_link_image_style.rs +0 -0
  153. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md055_table_pipe_style.rs +0 -0
  154. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md056_table_column_count.rs +0 -0
  155. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md057_existing_relative_links.rs +0 -0
  156. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/md058_blanks_around_tables.rs +0 -0
  157. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/mod.rs +0 -0
  158. {rumdl-0.0.75 → rumdl-0.0.76}/src/rules/strong_style.rs +0 -0
  159. {rumdl-0.0.75 → rumdl-0.0.76}/src/utils/ast_utils.rs +0 -0
  160. {rumdl-0.0.75 → rumdl-0.0.76}/src/utils/code_block_utils.rs +0 -0
  161. {rumdl-0.0.75 → rumdl-0.0.76}/src/utils/document_structure.rs +0 -0
  162. {rumdl-0.0.75 → rumdl-0.0.76}/src/utils/early_returns.rs +0 -0
  163. {rumdl-0.0.75 → rumdl-0.0.76}/src/utils/element_cache.rs +0 -0
  164. {rumdl-0.0.75 → rumdl-0.0.76}/src/utils/markdown_elements.rs +0 -0
  165. {rumdl-0.0.75 → rumdl-0.0.76}/src/utils/mod.rs +0 -0
  166. {rumdl-0.0.75 → rumdl-0.0.76}/src/utils/range_utils.rs +0 -0
  167. {rumdl-0.0.75 → rumdl-0.0.76}/src/utils/regex_cache.rs +0 -0
  168. {rumdl-0.0.75 → rumdl-0.0.76}/src/utils/string_interner.rs +0 -0
  169. {rumdl-0.0.75 → rumdl-0.0.76}/src/utils/table_utils.rs +0 -0
  170. {rumdl-0.0.75 → rumdl-0.0.76}/tests/advanced_integration_tests.rs +0 -0
  171. {rumdl-0.0.75 → rumdl-0.0.76}/tests/character_ranges/additional_tests.rs +0 -0
  172. {rumdl-0.0.75 → rumdl-0.0.76}/tests/character_ranges/comprehensive_tests.rs +0 -0
  173. {rumdl-0.0.75 → rumdl-0.0.76}/tests/character_ranges/mod.rs +0 -0
  174. {rumdl-0.0.75 → rumdl-0.0.76}/tests/character_ranges/unicode_utils.rs +0 -0
  175. {rumdl-0.0.75 → rumdl-0.0.76}/tests/cli_duplication_test.rs +0 -0
  176. {rumdl-0.0.75 → rumdl-0.0.76}/tests/cli_integration_tests.rs +0 -0
  177. {rumdl-0.0.75 → rumdl-0.0.76}/tests/commonmark_compliance_tests.rs +0 -0
  178. {rumdl-0.0.75 → rumdl-0.0.76}/tests/comprehensive_integration_tests.rs +0 -0
  179. {rumdl-0.0.75 → rumdl-0.0.76}/tests/config_application_tests.rs +0 -0
  180. {rumdl-0.0.75 → rumdl-0.0.76}/tests/config_tests.rs +0 -0
  181. {rumdl-0.0.75 → rumdl-0.0.76}/tests/init_command_test.rs +0 -0
  182. {rumdl-0.0.75 → rumdl-0.0.76}/tests/init_tests.rs +0 -0
  183. {rumdl-0.0.75 → rumdl-0.0.76}/tests/integration_tests.rs +0 -0
  184. {rumdl-0.0.75 → rumdl-0.0.76}/tests/json_output_test.rs +0 -0
  185. {rumdl-0.0.75 → rumdl-0.0.76}/tests/lib.rs +0 -0
  186. {rumdl-0.0.75 → rumdl-0.0.76}/tests/lsp_integration_tests.rs +0 -0
  187. {rumdl-0.0.75 → rumdl-0.0.76}/tests/lsp_tests.rs +0 -0
  188. {rumdl-0.0.75 → rumdl-0.0.76}/tests/markdownlint_cli_integration.rs +0 -0
  189. {rumdl-0.0.75 → rumdl-0.0.76}/tests/markdownlint_config_test.rs +0 -0
  190. {rumdl-0.0.75 → rumdl-0.0.76}/tests/md030_edge_cases.md +0 -0
  191. {rumdl-0.0.75 → rumdl-0.0.76}/tests/output_format_tests.rs +0 -0
  192. {rumdl-0.0.75 → rumdl-0.0.76}/tests/perf_check.rs +0 -0
  193. {rumdl-0.0.75 → rumdl-0.0.76}/tests/pyproject_config_tests.rs +0 -0
  194. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md001_test.rs +0 -0
  195. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md001_unicode_test.rs +0 -0
  196. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md002_test.rs +0 -0
  197. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md003_test.rs +0 -0
  198. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md004_test.rs +0 -0
  199. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md005_test.rs +0 -0
  200. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md006_test.rs +0 -0
  201. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md006_unicode_test.rs +0 -0
  202. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md007_test.rs +0 -0
  203. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md009_test.rs +0 -0
  204. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md010_test.rs +0 -0
  205. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md011_test.rs +0 -0
  206. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md012_test.rs +0 -0
  207. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md013_test.rs +0 -0
  208. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md014_test.rs +0 -0
  209. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md018_test.rs +0 -0
  210. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md020_test.rs +0 -0
  211. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md021_test.rs +0 -0
  212. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md022_test.rs +0 -0
  213. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md023_extended_test.rs +0 -0
  214. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md023_test.rs +0 -0
  215. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md024_test.rs +0 -0
  216. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md025_test.rs +0 -0
  217. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md026_test.rs +0 -0
  218. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md027_test.rs +0 -0
  219. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md028_test.rs +0 -0
  220. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md029_test.rs +0 -0
  221. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md030_test.rs +0 -0
  222. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md031_test.rs +0 -0
  223. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md032_test.rs +0 -0
  224. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md033_extended_test.rs +0 -0
  225. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md033_test.rs +0 -0
  226. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md034_test.rs +0 -0
  227. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md035_test.rs +0 -0
  228. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md036_test.rs +0 -0
  229. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md037_test.rs +0 -0
  230. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md038_test.rs +0 -0
  231. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md039_test.rs +0 -0
  232. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md040_test.rs +0 -0
  233. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md041_test.rs +0 -0
  234. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md042_test.rs +0 -0
  235. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md043_test.rs +0 -0
  236. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md044_test.rs +0 -0
  237. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md045_test.rs +0 -0
  238. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md046_test.rs +0 -0
  239. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md047_test.rs +0 -0
  240. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md048_test.rs +0 -0
  241. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md049_test.rs +0 -0
  242. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md050_test.rs +0 -0
  243. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md051_test.rs +0 -0
  244. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md052_test.rs +0 -0
  245. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md053_additional_test.rs +0 -0
  246. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md053_proptest.rs +0 -0
  247. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md053_test.rs +0 -0
  248. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md054_test.rs +0 -0
  249. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md054_unicode_test.rs +0 -0
  250. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md055_test.rs +0 -0
  251. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md056_test.rs +0 -0
  252. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md057_test.rs +0 -0
  253. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/md058_test.rs +0 -0
  254. {rumdl-0.0.75 → rumdl-0.0.76}/tests/rules/mod.rs +0 -0
  255. {rumdl-0.0.75 → rumdl-0.0.76}/tests/utils/blockquote_utils_test.rs +0 -0
  256. {rumdl-0.0.75 → rumdl-0.0.76}/tests/utils/code_block_utils_extended_test.rs +0 -0
  257. {rumdl-0.0.75 → rumdl-0.0.76}/tests/utils/code_block_utils_test.rs +0 -0
  258. {rumdl-0.0.75 → rumdl-0.0.76}/tests/utils/core_utils_test.rs +0 -0
  259. {rumdl-0.0.75 → rumdl-0.0.76}/tests/utils/front_matter_utils_test.rs +0 -0
  260. {rumdl-0.0.75 → rumdl-0.0.76}/tests/utils/line_index_test.rs +0 -0
  261. {rumdl-0.0.75 → rumdl-0.0.76}/tests/utils/mod.rs +0 -0
  262. {rumdl-0.0.75 → rumdl-0.0.76}/tests/utils_markdown_edge_cases.rs +0 -0
  263. {rumdl-0.0.75 → rumdl-0.0.76}/tests/utils_tests.rs +0 -0
@@ -1789,7 +1789,7 @@ dependencies = [
1789
1789
 
1790
1790
  [[package]]
1791
1791
  name = "rumdl"
1792
- version = "0.0.75"
1792
+ version = "0.0.76"
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.75"
3
+ version = "0.0.76"
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.75
3
+ Version: 0.0.76
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -96,6 +96,12 @@ impl MD005ListIndent {
96
96
  }
97
97
  }
98
98
 
99
+ impl Default for MD005ListIndent {
100
+ fn default() -> Self {
101
+ Self
102
+ }
103
+ }
104
+
99
105
  impl Rule for MD005ListIndent {
100
106
  fn name(&self) -> &'static str {
101
107
  "MD005"
@@ -237,20 +237,21 @@ impl Rule for MD006StartBullets {
237
237
  valid_bullet_lines[line_idx] = is_valid;
238
238
 
239
239
  if !is_valid {
240
- let fixed_line = line.trim_start();
241
- let needs_blank_line = line_idx > 0
242
- && !Self::is_blank_line(lines[line_idx - 1])
243
- && Self::is_bullet_list_item(lines[line_idx - 1]).is_none();
244
- let replacement = if needs_blank_line {
245
- format!("\n{}", fixed_line)
240
+ // Calculate the precise range for the indentation that needs to be removed
241
+ // For " * Indented bullet", we want to highlight just the indentation and marker " *" (columns 1-3)
242
+ let start_col = 1; // Start from beginning of line
243
+ let end_col = indent + 2; // Include the marker (indent + 1 for marker position + 1 for inclusive range)
244
+
245
+ // For the fix, we need to replace the highlighted part (" *") with just the bullet marker ("* ")
246
+ let line = lines[line_idx];
247
+ let trimmed = line.trim_start();
248
+ // Extract just the bullet marker and normalize to single space
249
+ let bullet_part = if let Some(captures) = BULLET_PATTERN.captures(trimmed) {
250
+ format!("{} ", captures.get(2).unwrap().as_str()) // Always use single space
246
251
  } else {
247
- fixed_line.to_string()
252
+ "* ".to_string() // fallback
248
253
  };
249
-
250
- // Calculate the range to highlight: from first indentation character to end of list marker
251
- let start_col = if indent > 0 { 2 } else { 1 }; // Start from first indentation space if indented
252
- let marker_pos = line.find(|c: char| c == '*' || c == '-' || c == '+').unwrap_or(0);
253
- let end_col = marker_pos + 3; // +1 for the marker itself, +1 for 1-based indexing, +1 for space after marker
254
+ let replacement = bullet_part;
254
255
 
255
256
  result.push(LintWarning {
256
257
  rule_name: Some(self.name()),
@@ -261,7 +262,7 @@ impl Rule for MD006StartBullets {
261
262
  end_column: end_col,
262
263
  message: "List item indentation".to_string(),
263
264
  fix: Some(Fix {
264
- range: line_index.line_col_to_byte_range(line_num, 1),
265
+ range: line_index.line_col_to_byte_range(line_num, start_col),
265
266
  replacement,
266
267
  }),
267
268
  });
@@ -169,6 +169,12 @@ impl MD011NoReversedLinks {
169
169
  }
170
170
  }
171
171
 
172
+ impl Default for MD011NoReversedLinks {
173
+ fn default() -> Self {
174
+ Self
175
+ }
176
+ }
177
+
172
178
  impl Rule for MD011NoReversedLinks {
173
179
  fn name(&self) -> &'static str {
174
180
  "MD011"
@@ -132,11 +132,14 @@ impl Rule for MD019NoMultipleSpaceAtx {
132
132
 
133
133
  // Calculate precise range: highlight the extra spaces (all spaces after the first one)
134
134
  let hash_end_col = hashes.end() + 1; // 1-indexed, position after hashes
135
- let extra_spaces_start = hash_end_col + 1; // Skip the first (correct) space
136
- let extra_spaces_len = spaces - 1; // Number of extra spaces
135
+ let spaces_start_col = hash_end_col; // Start of all spaces after hashes
136
+ let spaces_len = spaces; // Length of all spaces
137
137
 
138
138
  let (start_line, start_col, end_line, end_col) =
139
- calculate_single_line_range(line_num, extra_spaces_start, extra_spaces_len);
139
+ calculate_single_line_range(line_num, spaces_start_col, spaces_len);
140
+
141
+ // Generate the correct replacement text (just one space)
142
+ let correct_spacing = " ";
140
143
 
141
144
  warnings.push(LintWarning {
142
145
  rule_name: Some(self.name()),
@@ -151,8 +154,8 @@ impl Rule for MD019NoMultipleSpaceAtx {
151
154
  end_column: end_col,
152
155
  severity: Severity::Warning,
153
156
  fix: Some(Fix {
154
- range: line_index.line_col_to_byte_range(line_num, 1),
155
- replacement: self.fix_atx_heading(line),
157
+ range: line_index.line_col_to_byte_range(line_num, start_col),
158
+ replacement: correct_spacing.to_string(),
156
159
  }),
157
160
  });
158
161
  }
@@ -3,7 +3,7 @@
3
3
  /// See [docs/md021.md](../../docs/md021.md) for full documentation, configuration, and examples.
4
4
  use crate::rule::{Fix, LintError, LintResult, LintWarning, Rule, RuleCategory, Severity};
5
5
  use crate::utils::document_structure::{DocumentStructure, DocumentStructureExtensions};
6
- use crate::utils::range_utils::calculate_single_line_range;
6
+ use crate::utils::range_utils::{calculate_single_line_range, LineIndex};
7
7
  use lazy_static::lazy_static;
8
8
  use regex::Regex;
9
9
 
@@ -69,31 +69,6 @@ impl MD021NoMultipleSpaceClosedAtx {
69
69
  (0, 0)
70
70
  }
71
71
  }
72
-
73
- // Calculate the byte range for a specific line in the content
74
- fn get_line_byte_range(&self, content: &str, line_num: usize) -> std::ops::Range<usize> {
75
- let mut current_line = 1;
76
- let mut start_byte = 0;
77
-
78
- for (i, c) in content.char_indices() {
79
- if current_line == line_num && c == '\n' {
80
- return start_byte..i;
81
- } else if c == '\n' {
82
- current_line += 1;
83
- if current_line == line_num {
84
- start_byte = i + 1;
85
- }
86
- }
87
- }
88
-
89
- // If we're looking for the last line and it doesn't end with a newline
90
- if current_line == line_num {
91
- return start_byte..content.len();
92
- }
93
-
94
- // Fallback if line not found (shouldn't happen)
95
- 0..0
96
- }
97
72
  }
98
73
 
99
74
  impl Rule for MD021NoMultipleSpaceClosedAtx {
@@ -149,6 +124,7 @@ impl Rule for MD021NoMultipleSpaceClosedAtx {
149
124
  return Ok(Vec::new());
150
125
  }
151
126
 
127
+ let line_index = LineIndex::new(ctx.content.to_string());
152
128
  let mut warnings = Vec::new();
153
129
  let lines: Vec<&str> = ctx.content.lines().collect();
154
130
 
@@ -191,28 +167,30 @@ impl Rule for MD021NoMultipleSpaceClosedAtx {
191
167
  )
192
168
  };
193
169
 
194
- let line_range = self.get_line_byte_range(ctx.content, line_num);
195
-
196
170
  // Calculate precise character range for the extra spaces
197
171
  let start_col;
198
172
  let length;
173
+ let replacement;
199
174
 
200
175
  if start_spaces > 1 && end_spaces > 1 {
201
- // Highlight the extra spaces at the start (after opening hashes)
176
+ // Fix the extra spaces at the start (after opening hashes)
202
177
  let opening_hashes = captures.get(2).unwrap();
203
178
  start_col = opening_hashes.end() + 2; // After hash + first space
204
179
  length = start_spaces - 1; // Extra spaces only
180
+ replacement = String::new(); // Remove extra spaces
205
181
  } else if start_spaces > 1 {
206
- // Highlight the extra spaces after opening hashes
182
+ // Fix the extra spaces after opening hashes
207
183
  let opening_hashes = captures.get(2).unwrap();
208
184
  start_col = opening_hashes.end() + 2; // After hash + first space
209
185
  length = start_spaces - 1; // Extra spaces only
186
+ replacement = String::new(); // Remove extra spaces
210
187
  } else {
211
- // Highlight the extra spaces before closing hashes
188
+ // Fix the extra spaces before closing hashes
212
189
  let content = captures.get(4).unwrap();
213
190
  start_col = content.end() + 2; // After content + first space
214
191
  length = end_spaces - 1; // Extra spaces only
215
- }
192
+ replacement = String::new(); // Remove extra spaces
193
+ };
216
194
 
217
195
  let (start_line, start_col_calc, end_line, end_col) =
218
196
  calculate_single_line_range(line_num, start_col, length);
@@ -226,8 +204,8 @@ impl Rule for MD021NoMultipleSpaceClosedAtx {
226
204
  end_column: end_col,
227
205
  severity: Severity::Warning,
228
206
  fix: Some(Fix {
229
- range: line_range,
230
- replacement: self.fix_closed_atx_heading(line),
207
+ range: line_index.line_col_to_byte_range(start_line, start_col_calc),
208
+ replacement,
231
209
  }),
232
210
  });
233
211
  }
@@ -81,13 +81,12 @@ impl Rule for MD023HeadingStartLeft {
81
81
  end_column: end_col,
82
82
  severity: Severity::Warning,
83
83
  message: format!(
84
- "Setext heading should not be indented by {
85
- } spaces",
84
+ "Setext heading should not be indented by {} spaces",
86
85
  indentation
87
86
  ),
88
87
  fix: Some(Fix {
89
- range: line_index.line_col_to_byte_range(start_line + 1, 1),
90
- replacement: heading_text.to_string(),
88
+ range: line_index.line_col_to_byte_range(start_line + 1, start_col),
89
+ replacement: String::new(), // Remove the indentation
91
90
  }),
92
91
  });
93
92
 
@@ -117,8 +116,8 @@ impl Rule for MD023HeadingStartLeft {
117
116
  message: "Setext heading underline should not be indented"
118
117
  .to_string(),
119
118
  fix: Some(Fix {
120
- range: line_index.line_col_to_byte_range(underline_line + 1, 1),
121
- replacement: underline_text.to_string(),
119
+ range: line_index.line_col_to_byte_range(underline_line + 1, underline_start_col),
120
+ replacement: String::new(), // Remove the indentation
122
121
  }),
123
122
  });
124
123
  }
@@ -168,13 +167,12 @@ impl Rule for MD023HeadingStartLeft {
168
167
  end_column: atx_end_col,
169
168
  severity: Severity::Warning,
170
169
  message: format!(
171
- "Heading should not be indented by {
172
- } spaces",
170
+ "Heading should not be indented by {} spaces",
173
171
  indentation
174
172
  ),
175
173
  fix: Some(Fix {
176
- range: line_index.line_col_to_byte_range(start_line + 1, 1),
177
- replacement: fixed_heading,
174
+ range: line_index.line_col_to_byte_range(start_line + 1, atx_start_col),
175
+ replacement: String::new(), // Remove the indentation
178
176
  }),
179
177
  });
180
178
  }
@@ -350,13 +348,12 @@ impl Rule for MD023HeadingStartLeft {
350
348
  end_column: setext_end_col,
351
349
  severity: Severity::Warning,
352
350
  message: format!(
353
- "Setext heading should not be indented by {
354
- } spaces",
351
+ "Setext heading should not be indented by {} spaces",
355
352
  indentation
356
353
  ),
357
354
  fix: Some(Fix {
358
- range: line_index.line_col_to_byte_range(line_num, 1),
359
- replacement: heading_text.to_string(),
355
+ range: line_index.line_col_to_byte_range(line_num, setext_start_col),
356
+ replacement: String::new(), // Remove the indentation
360
357
  }),
361
358
  });
362
359
 
@@ -387,8 +384,8 @@ impl Rule for MD023HeadingStartLeft {
387
384
  .to_string(),
388
385
  fix: Some(Fix {
389
386
  range: line_index
390
- .line_col_to_byte_range(underline_line_idx + 1, 1),
391
- replacement: underline_text.to_string(),
387
+ .line_col_to_byte_range(underline_line_idx + 1, underline_start_col_struct),
388
+ replacement: String::new(), // Remove the indentation
392
389
  }),
393
390
  });
394
391
  }
@@ -450,13 +447,12 @@ impl Rule for MD023HeadingStartLeft {
450
447
  end_column: atx_end_col_struct,
451
448
  severity: Severity::Warning,
452
449
  message: format!(
453
- "Heading should not be indented by {
454
- } spaces",
450
+ "Heading should not be indented by {} spaces",
455
451
  indentation
456
452
  ),
457
453
  fix: Some(Fix {
458
- range: line_index.line_col_to_byte_range(line_num, 1),
459
- replacement: fixed_heading,
454
+ range: line_index.line_col_to_byte_range(line_num, atx_start_col_struct),
455
+ replacement: String::new(), // Remove the indentation
460
456
  }),
461
457
  });
462
458
  }
@@ -83,8 +83,8 @@ impl Rule for MD027MultipleSpacesBlockquote {
83
83
  message: "Multiple spaces after blockquote symbol".to_string(),
84
84
  severity: Severity::Warning,
85
85
  fix: Some(Fix {
86
- range: _line_index.line_col_to_byte_range(i + 1, indentation.len() + 1),
87
- replacement: format!("> {}", actual_content.trim_start()),
86
+ range: _line_index.line_col_to_byte_range(i + 1, start_col),
87
+ replacement: " ".to_string(), // Just one space
88
88
  }),
89
89
  });
90
90
  line_processed = true;
@@ -25,6 +25,12 @@ impl MD028NoBlanksBlockquote {
25
25
  }
26
26
  }
27
27
 
28
+ impl Default for MD028NoBlanksBlockquote {
29
+ fn default() -> Self {
30
+ Self
31
+ }
32
+ }
33
+
28
34
  impl Rule for MD028NoBlanksBlockquote {
29
35
  fn name(&self) -> &'static str {
30
36
  "MD028"
@@ -114,33 +114,21 @@ impl Rule for MD030ListMarkerSpace {
114
114
  // Calculate precise character range for the problematic spacing
115
115
  let marker_end_pos = cap.get(2).map_or(0, |m| m.end());
116
116
  let whitespace_start_pos = marker_end_pos;
117
- let _whitespace_len = whitespace.len();
118
-
119
- // If we have expected spaces, highlight only the extra ones
120
- let extra_spaces_start = if whitespace.len() > expected_spaces {
121
- whitespace_start_pos + expected_spaces
122
- } else {
123
- whitespace_start_pos
124
- };
125
- let extra_spaces_len = if whitespace.len() > expected_spaces {
126
- whitespace.len() - expected_spaces
127
- } else {
128
- whitespace.len()
129
- };
117
+ let whitespace_len = whitespace.len();
130
118
 
119
+ // Calculate the range that needs to be replaced (the entire whitespace after marker)
131
120
  let (start_line, start_col, end_line, end_col) =
132
- calculate_match_range(line_num, line, extra_spaces_start, extra_spaces_len);
133
-
134
- // Generate the fix text
135
- let fix =
136
- self.try_fix_list_marker_spacing(line)
137
- .map(|fixed_line| crate::rule::Fix {
138
- range: crate::utils::range_utils::LineIndex::new(
139
- ctx.content.to_string(),
140
- )
141
- .line_col_to_byte_range(line_num, 1),
142
- replacement: fixed_line,
143
- });
121
+ calculate_match_range(line_num, line, whitespace_start_pos, whitespace_len);
122
+
123
+ // Generate the correct replacement text (just the correct spacing)
124
+ let correct_spaces = " ".repeat(expected_spaces);
125
+ let fix = Some(crate::rule::Fix {
126
+ range: crate::utils::range_utils::LineIndex::new(
127
+ ctx.content.to_string(),
128
+ )
129
+ .line_col_to_byte_range(line_num, start_col),
130
+ replacement: correct_spaces,
131
+ });
144
132
 
145
133
  warnings.push(LintWarning {
146
134
  rule_name: Some(self.name()),
@@ -25,6 +25,12 @@ impl MD031BlanksAroundFences {
25
25
  }
26
26
  }
27
27
 
28
+ impl Default for MD031BlanksAroundFences {
29
+ fn default() -> Self {
30
+ Self
31
+ }
32
+ }
33
+
28
34
  impl Rule for MD031BlanksAroundFences {
29
35
  fn name(&self) -> &'static str {
30
36
  "MD031"
@@ -231,6 +231,12 @@ fn has_spacing_issues(span: &EmphasisSpan) -> bool {
231
231
  #[derive(Clone)]
232
232
  pub struct MD037NoSpaceInEmphasis;
233
233
 
234
+ impl Default for MD037NoSpaceInEmphasis {
235
+ fn default() -> Self {
236
+ Self
237
+ }
238
+ }
239
+
234
240
  impl Rule for MD037NoSpaceInEmphasis {
235
241
  fn name(&self) -> &'static str {
236
242
  "MD037"
@@ -40,7 +40,7 @@ fn test_md019_multiple_spaces_atx() {
40
40
  let test = simple_test(
41
41
  "MD019",
42
42
  "## Heading with multiple spaces",
43
- ExpectedWarning::new(1, 4, 1, 5, " "),
43
+ ExpectedWarning::new(1, 3, 1, 5, " "),
44
44
  );
45
45
  test_character_ranges(test);
46
46
  }
@@ -11,7 +11,7 @@ fn test_md006_start_bullets() {
11
11
  let test = simple_test(
12
12
  "MD006",
13
13
  " - Indented bullet",
14
- ExpectedWarning::new(1, 2, 1, 5, " - "),
14
+ ExpectedWarning::new(1, 1, 1, 4, " -"),
15
15
  );
16
16
  test_character_ranges(test);
17
17
  }
@@ -121,7 +121,7 @@ fn test_md030_list_marker_space() {
121
121
  let test = simple_test(
122
122
  "MD030",
123
123
  "- Two spaces",
124
- ExpectedWarning::new(1, 3, 1, 4, " "),
124
+ ExpectedWarning::new(1, 2, 1, 4, " "),
125
125
  );
126
126
  test_character_ranges(test);
127
127
  }
@@ -19,7 +19,7 @@ fn test_invalid_atx_headings() {
19
19
  let result = rule.check(&ctx).unwrap();
20
20
  assert_eq!(result.len(), 3);
21
21
  assert_eq!(result[0].line, 1);
22
- assert_eq!(result[0].column, 3);
22
+ assert_eq!(result[0].column, 2);
23
23
  assert_eq!(
24
24
  result[0].message,
25
25
  "Multiple spaces (2) after # in ATX style heading"