rumdl 0.0.63__tar.gz → 0.0.64__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 (252) hide show
  1. {rumdl-0.0.63 → rumdl-0.0.64}/Cargo.lock +1 -1
  2. {rumdl-0.0.63 → rumdl-0.0.64}/Cargo.toml +2 -2
  3. {rumdl-0.0.63 → rumdl-0.0.64}/PKG-INFO +8 -40
  4. {rumdl-0.0.63 → rumdl-0.0.64}/README.md +7 -39
  5. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md036.md +37 -5
  6. {rumdl-0.0.63 → rumdl-0.0.64}/src/main.rs +5 -4
  7. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/code_block_utils.rs +1 -4
  8. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/heading_utils.rs +2 -1
  9. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md004_unordered_list_style.rs +120 -174
  10. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md011_no_reversed_links.rs +10 -5
  11. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md032_blanks_around_lists.rs +336 -6
  12. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md036_no_emphasis_only_first.rs +35 -7
  13. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md045_no_alt_text.rs +7 -6
  14. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md051_link_fragments.rs +57 -9
  15. {rumdl-0.0.63 → rumdl-0.0.64}/src/utils/regex_cache.rs +1 -1
  16. {rumdl-0.0.63 → rumdl-0.0.64}/tests/integration_tests.rs +1 -1
  17. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md004_test.rs +14 -14
  18. rumdl-0.0.64/tests/rules/md036_test.rs +188 -0
  19. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md051_test.rs +31 -0
  20. rumdl-0.0.63/tests/rules/md036_test.rs +0 -97
  21. {rumdl-0.0.63 → rumdl-0.0.64}/.rumdl.toml +0 -0
  22. {rumdl-0.0.63 → rumdl-0.0.64}/MANIFEST.in +0 -0
  23. {rumdl-0.0.63 → rumdl-0.0.64}/Makefile +0 -0
  24. {rumdl-0.0.63 → rumdl-0.0.64}/assets/logo.png +0 -0
  25. {rumdl-0.0.63 → rumdl-0.0.64}/benches/range_performance.rs +0 -0
  26. {rumdl-0.0.63 → rumdl-0.0.64}/benches/range_utils_benchmark.rs +0 -0
  27. {rumdl-0.0.63 → rumdl-0.0.64}/benches/rule_performance.rs +0 -0
  28. {rumdl-0.0.63 → rumdl-0.0.64}/docs/RULES.md +0 -0
  29. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md001.md +0 -0
  30. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md002.md +0 -0
  31. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md003.md +0 -0
  32. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md004.md +0 -0
  33. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md005.md +0 -0
  34. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md006.md +0 -0
  35. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md007.md +0 -0
  36. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md009.md +0 -0
  37. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md010.md +0 -0
  38. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md011.md +0 -0
  39. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md012.md +0 -0
  40. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md013.md +0 -0
  41. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md014.md +0 -0
  42. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md018.md +0 -0
  43. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md019.md +0 -0
  44. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md020.md +0 -0
  45. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md021.md +0 -0
  46. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md022.md +0 -0
  47. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md023.md +0 -0
  48. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md024.md +0 -0
  49. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md025.md +0 -0
  50. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md026.md +0 -0
  51. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md027.md +0 -0
  52. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md028.md +0 -0
  53. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md029.md +0 -0
  54. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md030.md +0 -0
  55. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md031.md +0 -0
  56. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md032.md +0 -0
  57. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md033.md +0 -0
  58. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md034.md +0 -0
  59. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md035.md +0 -0
  60. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md037.md +0 -0
  61. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md038.md +0 -0
  62. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md039.md +0 -0
  63. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md040.md +0 -0
  64. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md041.md +0 -0
  65. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md042.md +0 -0
  66. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md043.md +0 -0
  67. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md044.md +0 -0
  68. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md045.md +0 -0
  69. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md046.md +0 -0
  70. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md047.md +0 -0
  71. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md048.md +0 -0
  72. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md049.md +0 -0
  73. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md050.md +0 -0
  74. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md051.md +0 -0
  75. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md052.md +0 -0
  76. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md053.md +0 -0
  77. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md054.md +0 -0
  78. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md055.md +0 -0
  79. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md056.md +0 -0
  80. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md057.md +0 -0
  81. {rumdl-0.0.63 → rumdl-0.0.64}/docs/md058.md +0 -0
  82. {rumdl-0.0.63 → rumdl-0.0.64}/issues/plan-rule-parity-with-markdownlint.md +0 -0
  83. {rumdl-0.0.63 → rumdl-0.0.64}/parity_check.py +0 -0
  84. {rumdl-0.0.63 → rumdl-0.0.64}/pyproject.toml +0 -0
  85. {rumdl-0.0.63 → rumdl-0.0.64}/python/MANIFEST.in +0 -0
  86. {rumdl-0.0.63 → rumdl-0.0.64}/python/PYTHON-README.md +0 -0
  87. {rumdl-0.0.63 → rumdl-0.0.64}/python/rumdl/__init__.py +0 -0
  88. {rumdl-0.0.63 → rumdl-0.0.64}/python/rumdl/__main__.py +0 -0
  89. {rumdl-0.0.63 → rumdl-0.0.64}/python/rumdl/py.typed +0 -0
  90. {rumdl-0.0.63 → rumdl-0.0.64}/rumdl.toml.example +0 -0
  91. {rumdl-0.0.63 → rumdl-0.0.64}/src/config.rs +0 -0
  92. {rumdl-0.0.63 → rumdl-0.0.64}/src/init.rs +0 -0
  93. {rumdl-0.0.63 → rumdl-0.0.64}/src/lib.rs +0 -0
  94. {rumdl-0.0.63 → rumdl-0.0.64}/src/lint_context.rs +0 -0
  95. {rumdl-0.0.63 → rumdl-0.0.64}/src/lsp/mod.rs +0 -0
  96. {rumdl-0.0.63 → rumdl-0.0.64}/src/lsp/server.rs +0 -0
  97. {rumdl-0.0.63 → rumdl-0.0.64}/src/lsp/types.rs +0 -0
  98. {rumdl-0.0.63 → rumdl-0.0.64}/src/markdownlint_config.rs +0 -0
  99. {rumdl-0.0.63 → rumdl-0.0.64}/src/profiling.rs +0 -0
  100. {rumdl-0.0.63 → rumdl-0.0.64}/src/python.rs +0 -0
  101. {rumdl-0.0.63 → rumdl-0.0.64}/src/rule.rs +0 -0
  102. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/blockquote_utils.rs +0 -0
  103. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/code_fence_utils.rs +0 -0
  104. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/emphasis_style.rs +0 -0
  105. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/front_matter_utils.rs +0 -0
  106. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/list_utils.rs +0 -0
  107. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md001_heading_increment.rs +0 -0
  108. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md002_first_heading_h1.rs +0 -0
  109. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md003_heading_style.rs +0 -0
  110. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md005_list_indent.rs +0 -0
  111. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md006_start_bullets.rs +0 -0
  112. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md007_ul_indent.rs +0 -0
  113. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md009_trailing_spaces.rs +0 -0
  114. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md010_no_hard_tabs.rs +0 -0
  115. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md012_no_multiple_blanks.rs +0 -0
  116. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md013_line_length.rs +0 -0
  117. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md014_commands_show_output.rs +0 -0
  118. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md018_no_missing_space_atx.rs +0 -0
  119. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md019_no_multiple_space_atx.rs +0 -0
  120. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
  121. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
  122. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md022_blanks_around_headings.rs +0 -0
  123. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md023_heading_start_left.rs +0 -0
  124. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md024_no_duplicate_heading.rs +0 -0
  125. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md025_single_title.rs +0 -0
  126. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md026_no_trailing_punctuation.rs +0 -0
  127. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
  128. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md028_no_blanks_blockquote.rs +0 -0
  129. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md029_ordered_list_prefix.rs +0 -0
  130. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md030_list_marker_space.rs +0 -0
  131. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md031_blanks_around_fences.rs +0 -0
  132. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md033_no_inline_html.rs +0 -0
  133. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md034_no_bare_urls.rs +0 -0
  134. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md035_hr_style.rs +0 -0
  135. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md037_spaces_around_emphasis.rs +0 -0
  136. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md038_no_space_in_code.rs +0 -0
  137. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md039_no_space_in_links.rs +0 -0
  138. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md040_fenced_code_language.rs +0 -0
  139. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md041_first_line_heading.rs +0 -0
  140. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md042_no_empty_links.rs +0 -0
  141. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md043_required_headings.rs +0 -0
  142. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md044_proper_names.rs +0 -0
  143. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md046_code_block_style.rs +0 -0
  144. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md047_single_trailing_newline.rs +0 -0
  145. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md048_code_fence_style.rs +0 -0
  146. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md049_emphasis_style.rs +0 -0
  147. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md050_strong_style.rs +0 -0
  148. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md052_reference_links_images.rs +0 -0
  149. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md053_link_image_reference_definitions.rs +0 -0
  150. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md054_link_image_style.rs +0 -0
  151. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md055_table_pipe_style.rs +0 -0
  152. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md056_table_column_count.rs +0 -0
  153. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md057_existing_relative_links.rs +0 -0
  154. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/md058_blanks_around_tables.rs +0 -0
  155. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/mod.rs +0 -0
  156. {rumdl-0.0.63 → rumdl-0.0.64}/src/rules/strong_style.rs +0 -0
  157. {rumdl-0.0.63 → rumdl-0.0.64}/src/utils/ast_utils.rs +0 -0
  158. {rumdl-0.0.63 → rumdl-0.0.64}/src/utils/code_block_utils.rs +0 -0
  159. {rumdl-0.0.63 → rumdl-0.0.64}/src/utils/document_structure.rs +0 -0
  160. {rumdl-0.0.63 → rumdl-0.0.64}/src/utils/early_returns.rs +0 -0
  161. {rumdl-0.0.63 → rumdl-0.0.64}/src/utils/element_cache.rs +0 -0
  162. {rumdl-0.0.63 → rumdl-0.0.64}/src/utils/markdown_elements.rs +0 -0
  163. {rumdl-0.0.63 → rumdl-0.0.64}/src/utils/mod.rs +0 -0
  164. {rumdl-0.0.63 → rumdl-0.0.64}/src/utils/range_utils.rs +0 -0
  165. {rumdl-0.0.63 → rumdl-0.0.64}/src/utils/string_interner.rs +0 -0
  166. {rumdl-0.0.63 → rumdl-0.0.64}/tests/advanced_integration_tests.rs +0 -0
  167. {rumdl-0.0.63 → rumdl-0.0.64}/tests/cli_duplication_test.rs +0 -0
  168. {rumdl-0.0.63 → rumdl-0.0.64}/tests/cli_integration_tests.rs +0 -0
  169. {rumdl-0.0.63 → rumdl-0.0.64}/tests/commonmark_compliance_tests.rs +0 -0
  170. {rumdl-0.0.63 → rumdl-0.0.64}/tests/comprehensive_integration_tests.rs +0 -0
  171. {rumdl-0.0.63 → rumdl-0.0.64}/tests/config_application_tests.rs +0 -0
  172. {rumdl-0.0.63 → rumdl-0.0.64}/tests/config_tests.rs +0 -0
  173. {rumdl-0.0.63 → rumdl-0.0.64}/tests/init_command_test.rs +0 -0
  174. {rumdl-0.0.63 → rumdl-0.0.64}/tests/init_tests.rs +0 -0
  175. {rumdl-0.0.63 → rumdl-0.0.64}/tests/json_output_test.rs +0 -0
  176. {rumdl-0.0.63 → rumdl-0.0.64}/tests/lib.rs +0 -0
  177. {rumdl-0.0.63 → rumdl-0.0.64}/tests/lsp_integration_tests.rs +0 -0
  178. {rumdl-0.0.63 → rumdl-0.0.64}/tests/lsp_tests.rs +0 -0
  179. {rumdl-0.0.63 → rumdl-0.0.64}/tests/markdownlint_cli_integration.rs +0 -0
  180. {rumdl-0.0.63 → rumdl-0.0.64}/tests/markdownlint_config_test.rs +0 -0
  181. {rumdl-0.0.63 → rumdl-0.0.64}/tests/md030_edge_cases.md +0 -0
  182. {rumdl-0.0.63 → rumdl-0.0.64}/tests/output_format_tests.rs +0 -0
  183. {rumdl-0.0.63 → rumdl-0.0.64}/tests/perf_check.rs +0 -0
  184. {rumdl-0.0.63 → rumdl-0.0.64}/tests/pyproject_config_tests.rs +0 -0
  185. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md001_test.rs +0 -0
  186. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md001_unicode_test.rs +0 -0
  187. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md002_test.rs +0 -0
  188. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md003_test.rs +0 -0
  189. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md005_test.rs +0 -0
  190. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md006_test.rs +0 -0
  191. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md006_unicode_test.rs +0 -0
  192. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md007_test.rs +0 -0
  193. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md009_test.rs +0 -0
  194. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md010_test.rs +0 -0
  195. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md011_test.rs +0 -0
  196. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md012_test.rs +0 -0
  197. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md013_test.rs +0 -0
  198. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md014_test.rs +0 -0
  199. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md018_test.rs +0 -0
  200. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md019_test.rs +0 -0
  201. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md020_test.rs +0 -0
  202. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md021_test.rs +0 -0
  203. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md022_test.rs +0 -0
  204. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md023_extended_test.rs +0 -0
  205. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md023_test.rs +0 -0
  206. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md024_test.rs +0 -0
  207. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md025_test.rs +0 -0
  208. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md026_test.rs +0 -0
  209. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md027_test.rs +0 -0
  210. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md028_test.rs +0 -0
  211. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md029_test.rs +0 -0
  212. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md030_test.rs +0 -0
  213. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md031_test.rs +0 -0
  214. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md032_test.rs +0 -0
  215. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md033_extended_test.rs +0 -0
  216. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md033_test.rs +0 -0
  217. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md034_test.rs +0 -0
  218. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md035_test.rs +0 -0
  219. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md037_test.rs +0 -0
  220. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md038_test.rs +0 -0
  221. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md039_test.rs +0 -0
  222. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md040_test.rs +0 -0
  223. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md041_test.rs +0 -0
  224. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md042_test.rs +0 -0
  225. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md043_test.rs +0 -0
  226. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md044_test.rs +0 -0
  227. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md045_test.rs +0 -0
  228. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md046_test.rs +0 -0
  229. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md047_test.rs +0 -0
  230. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md048_test.rs +0 -0
  231. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md049_test.rs +0 -0
  232. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md050_test.rs +0 -0
  233. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md052_test.rs +0 -0
  234. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md053_additional_test.rs +0 -0
  235. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md053_proptest.rs +0 -0
  236. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md053_test.rs +0 -0
  237. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md054_test.rs +0 -0
  238. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md054_unicode_test.rs +0 -0
  239. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md055_test.rs +0 -0
  240. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md056_test.rs +0 -0
  241. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md057_test.rs +0 -0
  242. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/md058_test.rs +0 -0
  243. {rumdl-0.0.63 → rumdl-0.0.64}/tests/rules/mod.rs +0 -0
  244. {rumdl-0.0.63 → rumdl-0.0.64}/tests/utils/blockquote_utils_test.rs +0 -0
  245. {rumdl-0.0.63 → rumdl-0.0.64}/tests/utils/code_block_utils_extended_test.rs +0 -0
  246. {rumdl-0.0.63 → rumdl-0.0.64}/tests/utils/code_block_utils_test.rs +0 -0
  247. {rumdl-0.0.63 → rumdl-0.0.64}/tests/utils/core_utils_test.rs +0 -0
  248. {rumdl-0.0.63 → rumdl-0.0.64}/tests/utils/front_matter_utils_test.rs +0 -0
  249. {rumdl-0.0.63 → rumdl-0.0.64}/tests/utils/line_index_test.rs +0 -0
  250. {rumdl-0.0.63 → rumdl-0.0.64}/tests/utils/mod.rs +0 -0
  251. {rumdl-0.0.63 → rumdl-0.0.64}/tests/utils_markdown_edge_cases.rs +0 -0
  252. {rumdl-0.0.63 → rumdl-0.0.64}/tests/utils_tests.rs +0 -0
@@ -1704,7 +1704,7 @@ dependencies = [
1704
1704
 
1705
1705
  [[package]]
1706
1706
  name = "rumdl"
1707
- version = "0.0.63"
1707
+ version = "0.0.64"
1708
1708
  dependencies = [
1709
1709
  "anyhow",
1710
1710
  "assert_cmd",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "rumdl"
3
- version = "0.0.63"
3
+ version = "0.0.64"
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>"]
@@ -65,7 +65,7 @@ tower-service = "0.3"
65
65
  env_logger = "0.11"
66
66
 
67
67
  [features]
68
- default = ["parallel", "profiling"]
68
+ default = ["parallel"]
69
69
  parallel = ["rayon"]
70
70
  profiling = []
71
71
  python = ["pyo3"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rumdl
3
- Version: 0.0.63
3
+ Version: 0.0.64
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -70,8 +70,8 @@ Project-URL: Repository, https://github.com/rvben/rumdl.git
70
70
  - [Configuration in pyproject.toml](#configuration-in-pyprojecttoml)
71
71
  - [Configuration Output](#configuration-output)
72
72
  - [Effective Configuration (`rumdl config`)](#effective-configuration-rumdl-config)
73
- - [Defaults Only (`rumdl config --defaults`)](#defaults-only-rumdl-config---defaults)
74
- - [Editor Integration (LSP)](#editor-integration-lsp)
73
+ - [Example output](#example-output)
74
+ - [Defaults Only (`rumdl config --defaults`)](#defaults-only-rumdl-config---defaults)
75
75
  - [Output Style](#output-style)
76
76
  - [Output Format](#output-format)
77
77
  - [Development](#development)
@@ -377,9 +377,10 @@ Both kebab-case (`line-length`, `ignore-gitignore`) and snake_case (`line_length
377
377
 
378
378
  #### Effective Configuration (`rumdl config`)
379
379
 
380
- The `rumdl config` command prints the **full effective configuration** (defaults + all overrides), showing every key and its value, annotated with the source of each value. The output is colorized and the `[from ...]` annotation is globally aligned for easy scanning.
380
+ The `rumdl config` command prints the **full effective configuration** (defaults + all overrides), showing every key and its value, annotated with the source of each value.
381
+ The output is colorized and the `[from ...]` annotation is globally aligned for easy scanning.
381
382
 
382
- **Example output:**
383
+ #### Example output
383
384
 
384
385
  ```text
385
386
  [global]
@@ -393,6 +394,7 @@ The `rumdl config` command prints the **full effective configuration** (defaults
393
394
  code_blocks = true [from .rumdl.toml]
394
395
  ...
395
396
  ```
397
+
396
398
  - **Keys** are cyan, **values** are yellow, and the `[from ...]` annotation is colored by source:
397
399
  - Green: CLI
398
400
  - Blue: `.rumdl.toml`
@@ -400,7 +402,7 @@ The `rumdl config` command prints the **full effective configuration** (defaults
400
402
  - Yellow: default
401
403
  - The `[from ...]` column is aligned across all sections.
402
404
 
403
- #### Defaults Only (`rumdl config --defaults`)
405
+ ### Defaults Only (`rumdl config --defaults`)
404
406
 
405
407
  The `--defaults` flag prints only the default configuration as TOML, suitable for copy-paste or reference:
406
408
 
@@ -418,40 +420,6 @@ code_blocks = true
418
420
  ...
419
421
  ```
420
422
 
421
- ## Editor Integration (LSP)
422
-
423
- rumdl includes a built-in Language Server Protocol (LSP) implementation for real-time markdown linting in your favorite editor. Following [Ruff's approach](https://docs.astral.sh/ruff/editors/), the LSP server is built directly into the main `rumdl` binary.
424
-
425
- ### Starting the LSP Server
426
-
427
- ```bash
428
- # Standard mode (stdio) - default
429
- rumdl server
430
-
431
- # Explicit stdio mode
432
- rumdl server --stdio
433
-
434
- # Debug mode (TCP)
435
- rumdl server --port 8080 --verbose
436
- ```
437
-
438
- ### Supported Editors
439
-
440
- - **VS Code**: Use the official rumdl extension (coming soon)
441
- - **Neovim**: Configure with nvim-lspconfig
442
- - **Emacs**: Use with lsp-mode
443
- - **Sublime Text**: Use with LSP package
444
- - **Any LSP-compatible editor**
445
-
446
- For detailed setup instructions, see our [LSP Setup Guide](docs/lsp-setup.md).
447
-
448
- ### LSP Features
449
-
450
- - **Real-time diagnostics** - See markdown linting errors as you type
451
- - **Code actions** - One-click fixes for violations (where available)
452
- - **Configuration support** - Respects your `.rumdl.toml` configuration
453
- - **Performance optimized** - Built in Rust with all our performance optimizations
454
-
455
423
  ## Output Style
456
424
 
457
425
  rumdl produces clean, colorized output similar to modern linting tools:
@@ -40,8 +40,8 @@
40
40
  - [Configuration in pyproject.toml](#configuration-in-pyprojecttoml)
41
41
  - [Configuration Output](#configuration-output)
42
42
  - [Effective Configuration (`rumdl config`)](#effective-configuration-rumdl-config)
43
- - [Defaults Only (`rumdl config --defaults`)](#defaults-only-rumdl-config---defaults)
44
- - [Editor Integration (LSP)](#editor-integration-lsp)
43
+ - [Example output](#example-output)
44
+ - [Defaults Only (`rumdl config --defaults`)](#defaults-only-rumdl-config---defaults)
45
45
  - [Output Style](#output-style)
46
46
  - [Output Format](#output-format)
47
47
  - [Development](#development)
@@ -347,9 +347,10 @@ Both kebab-case (`line-length`, `ignore-gitignore`) and snake_case (`line_length
347
347
 
348
348
  #### Effective Configuration (`rumdl config`)
349
349
 
350
- The `rumdl config` command prints the **full effective configuration** (defaults + all overrides), showing every key and its value, annotated with the source of each value. The output is colorized and the `[from ...]` annotation is globally aligned for easy scanning.
350
+ The `rumdl config` command prints the **full effective configuration** (defaults + all overrides), showing every key and its value, annotated with the source of each value.
351
+ The output is colorized and the `[from ...]` annotation is globally aligned for easy scanning.
351
352
 
352
- **Example output:**
353
+ #### Example output
353
354
 
354
355
  ```text
355
356
  [global]
@@ -363,6 +364,7 @@ The `rumdl config` command prints the **full effective configuration** (defaults
363
364
  code_blocks = true [from .rumdl.toml]
364
365
  ...
365
366
  ```
367
+
366
368
  - **Keys** are cyan, **values** are yellow, and the `[from ...]` annotation is colored by source:
367
369
  - Green: CLI
368
370
  - Blue: `.rumdl.toml`
@@ -370,7 +372,7 @@ The `rumdl config` command prints the **full effective configuration** (defaults
370
372
  - Yellow: default
371
373
  - The `[from ...]` column is aligned across all sections.
372
374
 
373
- #### Defaults Only (`rumdl config --defaults`)
375
+ ### Defaults Only (`rumdl config --defaults`)
374
376
 
375
377
  The `--defaults` flag prints only the default configuration as TOML, suitable for copy-paste or reference:
376
378
 
@@ -388,40 +390,6 @@ code_blocks = true
388
390
  ...
389
391
  ```
390
392
 
391
- ## Editor Integration (LSP)
392
-
393
- rumdl includes a built-in Language Server Protocol (LSP) implementation for real-time markdown linting in your favorite editor. Following [Ruff's approach](https://docs.astral.sh/ruff/editors/), the LSP server is built directly into the main `rumdl` binary.
394
-
395
- ### Starting the LSP Server
396
-
397
- ```bash
398
- # Standard mode (stdio) - default
399
- rumdl server
400
-
401
- # Explicit stdio mode
402
- rumdl server --stdio
403
-
404
- # Debug mode (TCP)
405
- rumdl server --port 8080 --verbose
406
- ```
407
-
408
- ### Supported Editors
409
-
410
- - **VS Code**: Use the official rumdl extension (coming soon)
411
- - **Neovim**: Configure with nvim-lspconfig
412
- - **Emacs**: Use with lsp-mode
413
- - **Sublime Text**: Use with LSP package
414
- - **Any LSP-compatible editor**
415
-
416
- For detailed setup instructions, see our [LSP Setup Guide](docs/lsp-setup.md).
417
-
418
- ### LSP Features
419
-
420
- - **Real-time diagnostics** - See markdown linting errors as you type
421
- - **Code actions** - One-click fixes for violations (where available)
422
- - **Configuration support** - Respects your `.rumdl.toml` configuration
423
- - **Performance optimized** - Built in Rust with all our performance optimizations
424
-
425
393
  ## Output Style
426
394
 
427
395
  rumdl produces clean, colorized output similar to modern linting tools:
@@ -2,10 +2,10 @@
2
2
 
3
3
  ## Description
4
4
 
5
- This rule ensures that emphasis (bold or italic) is not used as a substitute for proper headings.
5
+ This rule ensures that emphasis (bold or italic) is not used as a substitute for proper headings.
6
6
  Using emphasis to create headings can lead to inconsistent document structure and accessibility issues.
7
7
 
8
- Proper headings provide better document structure, are more accessible, and enable automatic
8
+ Proper headings provide better document structure, are more accessible, and enable automatic
9
9
  generation of tables of contents.
10
10
 
11
11
  <!-- markdownlint-disable -->
@@ -40,13 +40,45 @@ This is a paragraph with **bold** and *italic* text within it.
40
40
 
41
41
  ### This is definitely not a proper heading
42
42
  ```
43
+
44
+ ### Punctuation Removal
45
+
46
+ When converting emphasis to headings, trailing punctuation is automatically removed:
47
+
48
+ ```markdown
49
+ **Example output:**
50
+ *Configuration:*
51
+ **Title with period.**
52
+ ```
53
+
54
+ Becomes:
55
+
56
+ ```markdown
57
+ ## Example output
58
+ # Configuration
59
+ ## Title with period
60
+ ```
43
61
  <!-- markdownlint-enable -->
44
62
 
45
63
  ## Configuration
46
64
 
47
- This rule has the following configuration options:
65
+ This rule supports the following configuration option:
66
+
67
+ - `punctuation` (string, default: `".,;:!?"`): Punctuation characters to remove from the end of headings when converting from emphasis
68
+ - Set to a string of characters to remove those specific punctuation marks
69
+ - Set to empty string (`""`) to preserve all punctuation
70
+ - Default removes common trailing punctuation: period, comma, semicolon, colon, exclamation mark, question mark
48
71
 
49
- - `punctuation`: A string containing the punctuation characters that are allowed at the end of emphasized text without triggering this rule. Default is `".,;:!?"`.
72
+ ### Example Configuration
73
+
74
+ ```toml
75
+ [MD036]
76
+ punctuation = "" # Preserve all punctuation in headings
77
+
78
+ # Or specify custom punctuation to remove
79
+ [MD036]
80
+ punctuation = ".!?" # Only remove periods, exclamation marks, and question marks
81
+ ```
50
82
 
51
83
  ## Special Cases
52
84
 
@@ -54,7 +86,7 @@ This rule has the following configuration options:
54
86
  - Emphasis within other content is not affected
55
87
  - Both single emphasis (*italic*) and double emphasis (**bold**) are checked
56
88
  - Triple emphasis (***bold italic***) is also checked
57
- - The rule can be configured to allow certain punctuation at the end of emphasized text
89
+ - Trailing punctuation (`.`, `:`, `;`, `!`, `?`) is automatically removed when converting to headings
58
90
 
59
91
  ## Related Rules
60
92
 
@@ -19,6 +19,7 @@ use rumdl::rule::Rule;
19
19
  use rumdl::rules::code_block_utils::CodeBlockStyle;
20
20
  use rumdl::rules::code_fence_utils::CodeFenceStyle;
21
21
  use rumdl::rules::strong_style::StrongStyle;
22
+
22
23
  use rumdl_config::normalize_key;
23
24
  use rumdl_config::ConfigSource;
24
25
 
@@ -338,9 +339,9 @@ fn find_markdown_files(
338
339
  walk_builder.types(types);
339
340
  // -----------------------------------------
340
341
 
341
- // Determine if running in discovery mode (e.g., "rumdl ." or "rumdl check .")
342
+ // Determine if running in discovery mode (e.g., "rumdl ." or "rumdl check ." or "rumdl check")
342
343
  // Adjusted to handle both legacy and subcommand paths
343
- let is_discovery_mode = paths == ["."];
344
+ let is_discovery_mode = paths.is_empty() || paths == ["."];
344
345
 
345
346
  // --- Determine Effective Include/Exclude Patterns ---
346
347
 
@@ -628,7 +629,7 @@ fn print_config_with_provenance(sourced: &rumdl_config::SourcedConfig) {
628
629
  Box::new(MD033NoInlineHtml::default()),
629
630
  Box::new(MD034NoBareUrls {}),
630
631
  Box::new(MD035HRStyle::default()),
631
- Box::new(MD036NoEmphasisAsHeading {}),
632
+ Box::new(MD036NoEmphasisAsHeading::new(".,;:!?".to_string())),
632
633
  Box::new(MD037NoSpaceInEmphasis),
633
634
  Box::new(MD038NoSpaceInCode::default()),
634
635
  Box::new(MD039NoSpaceInLinks),
@@ -890,7 +891,7 @@ build-backend = \"setuptools.build_meta\"
890
891
  Box::new(MD033NoInlineHtml::default()),
891
892
  Box::new(MD034NoBareUrls {}),
892
893
  Box::new(MD035HRStyle::default()),
893
- Box::new(MD036NoEmphasisAsHeading {}),
894
+ Box::new(MD036NoEmphasisAsHeading::new(".,;:!?".to_string())),
894
895
  Box::new(MD037NoSpaceInEmphasis),
895
896
  Box::new(MD038NoSpaceInCode::default()),
896
897
  Box::new(MD039NoSpaceInLinks),
@@ -9,6 +9,7 @@ lazy_static! {
9
9
  static ref ALTERNATE_FENCED_CODE_BLOCK_START: Regex = Regex::new(r"^(\s*)~~~(?:[^~\r\n]*)$").unwrap();
10
10
  static ref ALTERNATE_FENCED_CODE_BLOCK_END: Regex = Regex::new(r"^(\s*)~~~\s*$").unwrap();
11
11
  static ref INDENTED_CODE_BLOCK: Regex = Regex::new(r"^(\s{4,})").unwrap();
12
+ static ref LIST_ITEM_RE: Regex = Regex::new(r"^(\s*)([*+-]|\d+[.)])(\s*)(.*)$").unwrap();
12
13
  }
13
14
 
14
15
  /// Utility functions for detecting and handling code blocks in Markdown documents
@@ -174,10 +175,6 @@ impl CodeBlockUtils {
174
175
  } else if !in_code_block[i] {
175
176
  // Check for indented code blocks only if not already marked
176
177
  // Do not mark as code block if the line is a list item
177
- lazy_static! {
178
- static ref LIST_ITEM_RE: Regex =
179
- Regex::new(r"^(\s*)([*+-]|\d+[.)])(\s*)(.*)$").unwrap();
180
- }
181
178
  if (line.starts_with(" ") || INDENTED_CODE_BLOCK.is_match(line))
182
179
  && !LIST_ITEM_RE.is_match(line)
183
180
  {
@@ -12,6 +12,7 @@ lazy_static! {
12
12
  static ref FENCED_CODE_BLOCK_END: Regex = Regex::new(r"^(\s*)(`{3,}|~{3,})\s*$").unwrap();
13
13
  static ref FRONT_MATTER_DELIMITER: Regex = Regex::new(r"^---\s*$").unwrap();
14
14
  static ref INDENTED_CODE_BLOCK_PATTERN: Regex = Regex::new(r"^(\s{4,})").unwrap();
15
+ static ref HTML_TAG_REGEX: Regex = Regex::new(r"<[^>]*>").unwrap();
15
16
 
16
17
  // Single line emphasis patterns
17
18
  static ref SINGLE_LINE_ASTERISK_EMPHASIS: Regex = Regex::new(r"^\s*\*([^*\n]+)\*\s*$").unwrap();
@@ -367,7 +368,7 @@ impl HeadingUtils {
367
368
  /// Convert a heading text to a valid ID for fragment links
368
369
  pub fn heading_to_fragment(text: &str) -> String {
369
370
  // Remove any HTML tags
370
- let text_no_html = regex::Regex::new(r"<[^>]*>").unwrap().replace_all(text, "");
371
+ let text_no_html = HTML_TAG_REGEX.replace_all(text, "");
371
372
 
372
373
  // Convert to lowercase and trim
373
374
  let text_lower = text_no_html.trim().to_lowercase();