rumdl 0.0.51__tar.gz → 0.0.52__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 (253) hide show
  1. {rumdl-0.0.51 → rumdl-0.0.52}/Cargo.lock +8 -7
  2. {rumdl-0.0.51 → rumdl-0.0.52}/Cargo.toml +2 -1
  3. {rumdl-0.0.51 → rumdl-0.0.52}/Makefile +7 -1
  4. {rumdl-0.0.51 → rumdl-0.0.52}/PKG-INFO +2 -2
  5. {rumdl-0.0.51 → rumdl-0.0.52}/pyproject.toml +2 -2
  6. {rumdl-0.0.51 → rumdl-0.0.52}/src/config.rs +125 -15
  7. {rumdl-0.0.51 → rumdl-0.0.52}/src/init.rs +3 -0
  8. {rumdl-0.0.51 → rumdl-0.0.52}/src/lib.rs +1 -0
  9. {rumdl-0.0.51 → rumdl-0.0.52}/src/main.rs +235 -390
  10. rumdl-0.0.52/src/markdownlint_config.rs +152 -0
  11. {rumdl-0.0.51 → rumdl-0.0.52}/src/profiling.rs +5 -2
  12. {rumdl-0.0.51 → rumdl-0.0.52}/src/python.rs +3 -0
  13. {rumdl-0.0.51 → rumdl-0.0.52}/src/rule.rs +4 -0
  14. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md001_heading_increment.rs +2 -0
  15. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md002_first_heading_h1.rs +2 -0
  16. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md003_heading_style.rs +5 -0
  17. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md004_unordered_list_style.rs +50 -0
  18. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md005_list_indent.rs +5 -0
  19. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md006_start_bullets.rs +3 -1
  20. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md007_ul_indent.rs +3 -0
  21. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md008_ul_style.rs +4 -1
  22. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md009_trailing_spaces.rs +4 -0
  23. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md010_no_hard_tabs.rs +3 -0
  24. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md011_no_reversed_links.rs +3 -0
  25. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md012_no_multiple_blanks.rs +4 -0
  26. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md013_line_length.rs +3 -0
  27. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md014_commands_show_output.rs +5 -0
  28. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md015_no_missing_space_after_list_marker.rs +3 -0
  29. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md016_no_multiple_space_after_list_marker.rs +3 -0
  30. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md018_no_missing_space_atx.rs +3 -0
  31. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md019_no_multiple_space_atx.rs +3 -0
  32. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md020_no_missing_space_closed_atx.rs +3 -0
  33. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md021_no_multiple_space_closed_atx.rs +3 -0
  34. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md022_blanks_around_headings.rs +3 -1
  35. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md023_heading_start_left.rs +3 -0
  36. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md024_no_duplicate_heading.rs +3 -0
  37. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md025_single_title.rs +3 -0
  38. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md026_no_trailing_punctuation.rs +3 -0
  39. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md027_multiple_spaces_blockquote.rs +4 -0
  40. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md028_no_blanks_blockquote.rs +3 -0
  41. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md029_ordered_list_prefix.rs +3 -0
  42. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md030_list_marker_space.rs +5 -0
  43. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md031_blanks_around_fences.rs +3 -0
  44. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md033_no_inline_html.rs +5 -0
  45. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md034_no_bare_urls.rs +4 -1
  46. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md035_hr_style.rs +5 -0
  47. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md036_no_emphasis_only_first.rs +5 -0
  48. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md037_spaces_around_emphasis.rs +3 -0
  49. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md038_no_space_in_code.rs +4 -0
  50. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md039_no_space_in_links.rs +3 -1
  51. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md040_fenced_code_language.rs +4 -0
  52. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md041_first_line_heading.rs +4 -0
  53. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md042_no_empty_links.rs +2 -0
  54. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md043_required_headings.rs +2 -2
  55. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md044_proper_names.rs +3 -1
  56. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md045_no_alt_text.rs +3 -1
  57. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md046_code_block_style.rs +2 -0
  58. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md047_single_trailing_newline.rs +4 -0
  59. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md048_code_fence_style.rs +3 -1
  60. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md049_emphasis_style.rs +3 -1
  61. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md050_strong_style.rs +3 -1
  62. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md051_link_fragments.rs +3 -1
  63. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md052_reference_links_images.rs +3 -1
  64. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md053_link_image_reference_definitions.rs +3 -12
  65. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md054_link_image_style.rs +16 -12
  66. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md055_table_pipe_style.rs +12 -11
  67. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md056_table_column_count.rs +3 -0
  68. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md057_existing_relative_links.rs +11 -7
  69. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md058_blanks_around_tables.rs +5 -0
  70. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/mod.rs +0 -3
  71. {rumdl-0.0.51 → rumdl-0.0.52}/src/utils/code_block_utils.rs +3 -0
  72. {rumdl-0.0.51 → rumdl-0.0.52}/src/utils/document_structure.rs +1 -1
  73. {rumdl-0.0.51 → rumdl-0.0.52}/src/utils/early_returns.rs +4 -0
  74. {rumdl-0.0.51 → rumdl-0.0.52}/src/utils/element_cache.rs +1 -1
  75. {rumdl-0.0.51 → rumdl-0.0.52}/src/utils/mod.rs +4 -0
  76. {rumdl-0.0.51 → rumdl-0.0.52}/src/utils/regex_cache.rs +29 -2
  77. {rumdl-0.0.51 → rumdl-0.0.52}/tests/cli_integration_tests.rs +75 -21
  78. {rumdl-0.0.51 → rumdl-0.0.52}/tests/config_application_tests.rs +9 -9
  79. rumdl-0.0.52/tests/markdownlint_cli_integration.rs +154 -0
  80. rumdl-0.0.52/tests/markdownlint_config_test.rs +209 -0
  81. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/mod.rs +1 -1
  82. rumdl-0.0.51/.pre-commit-config.yaml +0 -42
  83. rumdl-0.0.51/docs/md017.md +0 -57
  84. rumdl-0.0.51/src/rules/md017_no_emphasis_as_heading.rs +0 -183
  85. rumdl-0.0.51/tests/rules/md017_test.rs +0 -116
  86. {rumdl-0.0.51 → rumdl-0.0.52}/.rumdl.toml +0 -0
  87. {rumdl-0.0.51 → rumdl-0.0.52}/MANIFEST.in +0 -0
  88. {rumdl-0.0.51 → rumdl-0.0.52}/README.md +0 -0
  89. {rumdl-0.0.51 → rumdl-0.0.52}/assets/logo.png +0 -0
  90. {rumdl-0.0.51 → rumdl-0.0.52}/benches/range_performance.rs +0 -0
  91. {rumdl-0.0.51 → rumdl-0.0.52}/benches/range_utils_benchmark.rs +0 -0
  92. {rumdl-0.0.51 → rumdl-0.0.52}/benches/rule_performance.rs +0 -0
  93. {rumdl-0.0.51 → rumdl-0.0.52}/docs/RULES.md +0 -0
  94. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md001.md +0 -0
  95. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md002.md +0 -0
  96. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md003.md +0 -0
  97. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md004.md +0 -0
  98. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md005.md +0 -0
  99. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md006.md +0 -0
  100. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md007.md +0 -0
  101. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md008.md +0 -0
  102. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md009.md +0 -0
  103. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md010.md +0 -0
  104. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md011.md +0 -0
  105. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md012.md +0 -0
  106. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md013.md +0 -0
  107. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md014.md +0 -0
  108. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md015.md +0 -0
  109. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md016.md +0 -0
  110. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md018.md +0 -0
  111. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md019.md +0 -0
  112. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md020.md +0 -0
  113. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md021.md +0 -0
  114. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md022.md +0 -0
  115. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md023.md +0 -0
  116. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md024.md +0 -0
  117. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md025.md +0 -0
  118. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md026.md +0 -0
  119. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md027.md +0 -0
  120. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md028.md +0 -0
  121. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md029.md +0 -0
  122. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md030.md +0 -0
  123. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md031.md +0 -0
  124. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md032.md +0 -0
  125. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md033.md +0 -0
  126. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md034.md +0 -0
  127. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md035.md +0 -0
  128. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md036.md +0 -0
  129. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md037.md +0 -0
  130. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md038.md +0 -0
  131. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md039.md +0 -0
  132. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md040.md +0 -0
  133. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md041.md +0 -0
  134. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md042.md +0 -0
  135. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md043.md +0 -0
  136. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md044.md +0 -0
  137. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md045.md +0 -0
  138. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md046.md +0 -0
  139. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md047.md +0 -0
  140. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md048.md +0 -0
  141. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md049.md +0 -0
  142. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md050.md +0 -0
  143. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md051.md +0 -0
  144. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md052.md +0 -0
  145. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md053.md +0 -0
  146. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md054.md +0 -0
  147. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md055.md +0 -0
  148. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md056.md +0 -0
  149. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md057.md +0 -0
  150. {rumdl-0.0.51 → rumdl-0.0.52}/docs/md058.md +0 -0
  151. {rumdl-0.0.51 → rumdl-0.0.52}/python/MANIFEST.in +0 -0
  152. {rumdl-0.0.51 → rumdl-0.0.52}/python/PYTHON-README.md +0 -0
  153. {rumdl-0.0.51 → rumdl-0.0.52}/python/rumdl/__init__.py +0 -0
  154. {rumdl-0.0.51 → rumdl-0.0.52}/python/rumdl/__main__.py +0 -0
  155. {rumdl-0.0.51 → rumdl-0.0.52}/python/rumdl/py.typed +0 -0
  156. {rumdl-0.0.51 → rumdl-0.0.52}/rumdl.toml.example +0 -0
  157. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/blockquote_utils.rs +0 -0
  158. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/code_block_utils.rs +0 -0
  159. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/code_fence_utils.rs +0 -0
  160. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/emphasis_style.rs +0 -0
  161. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/front_matter_utils.rs +0 -0
  162. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/heading_utils.rs +0 -0
  163. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/list_utils.rs +0 -0
  164. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/md032_blanks_around_lists.rs +0 -0
  165. {rumdl-0.0.51 → rumdl-0.0.52}/src/rules/strong_style.rs +0 -0
  166. {rumdl-0.0.51 → rumdl-0.0.52}/src/utils/markdown_elements.rs +0 -0
  167. {rumdl-0.0.51 → rumdl-0.0.52}/src/utils/range_utils.rs +0 -0
  168. {rumdl-0.0.51 → rumdl-0.0.52}/tests/advanced_integration_tests.rs +0 -0
  169. {rumdl-0.0.51 → rumdl-0.0.52}/tests/cli_duplication_test.rs +0 -0
  170. {rumdl-0.0.51 → rumdl-0.0.52}/tests/commonmark_compliance_tests.rs +0 -0
  171. {rumdl-0.0.51 → rumdl-0.0.52}/tests/comprehensive_integration_tests.rs +0 -0
  172. {rumdl-0.0.51 → rumdl-0.0.52}/tests/config_tests.rs +0 -0
  173. {rumdl-0.0.51 → rumdl-0.0.52}/tests/init_command_test.rs +0 -0
  174. {rumdl-0.0.51 → rumdl-0.0.52}/tests/init_tests.rs +0 -0
  175. {rumdl-0.0.51 → rumdl-0.0.52}/tests/integration_tests.rs +0 -0
  176. {rumdl-0.0.51 → rumdl-0.0.52}/tests/lib.rs +0 -0
  177. {rumdl-0.0.51 → rumdl-0.0.52}/tests/output_format_tests.rs +0 -0
  178. {rumdl-0.0.51 → rumdl-0.0.52}/tests/perf_check.rs +0 -0
  179. {rumdl-0.0.51 → rumdl-0.0.52}/tests/pyproject_config_tests.rs +0 -0
  180. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md001_test.rs +0 -0
  181. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md001_unicode_test.rs +0 -0
  182. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md002_test.rs +0 -0
  183. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md003_test.rs +0 -0
  184. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md004_test.rs +0 -0
  185. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md005_test.rs +0 -0
  186. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md006_test.rs +0 -0
  187. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md006_unicode_test.rs +0 -0
  188. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md007_test.rs +0 -0
  189. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md008_test.rs +0 -0
  190. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md009_test.rs +0 -0
  191. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md010_test.rs +0 -0
  192. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md011_test.rs +0 -0
  193. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md012_test.rs +0 -0
  194. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md013_test.rs +0 -0
  195. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md014_test.rs +0 -0
  196. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md015_proptest.rs +0 -0
  197. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md015_test.rs +0 -0
  198. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md016_test.rs +0 -0
  199. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md018_test.rs +0 -0
  200. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md019_test.rs +0 -0
  201. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md020_test.rs +0 -0
  202. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md021_test.rs +0 -0
  203. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md022_test.rs +0 -0
  204. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md023_extended_test.rs +0 -0
  205. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md023_test.rs +0 -0
  206. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md024_test.rs +0 -0
  207. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md025_test.rs +0 -0
  208. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md026_test.rs +0 -0
  209. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md027_test.rs +0 -0
  210. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md028_test.rs +0 -0
  211. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md029_test.rs +0 -0
  212. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md030_test.rs +0 -0
  213. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md031_test.rs +0 -0
  214. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md032_test.rs +0 -0
  215. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md033_extended_test.rs +0 -0
  216. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md033_test.rs +0 -0
  217. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md034_test.rs +0 -0
  218. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md035_test.rs +0 -0
  219. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md036_test.rs +0 -0
  220. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md037_test.rs +0 -0
  221. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md038_test.rs +0 -0
  222. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md039_test.rs +0 -0
  223. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md040_test.rs +0 -0
  224. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md041_test.rs +0 -0
  225. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md042_test.rs +0 -0
  226. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md043_test.rs +0 -0
  227. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md044_test.rs +0 -0
  228. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md045_test.rs +0 -0
  229. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md046_test.rs +0 -0
  230. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md047_test.rs +0 -0
  231. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md048_test.rs +0 -0
  232. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md049_test.rs +0 -0
  233. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md050_test.rs +0 -0
  234. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md051_test.rs +0 -0
  235. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md052_test.rs +0 -0
  236. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md053_additional_test.rs +0 -0
  237. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md053_proptest.rs +0 -0
  238. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md053_test.rs +0 -0
  239. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md054_test.rs +0 -0
  240. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md054_unicode_test.rs +0 -0
  241. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md055_test.rs +0 -0
  242. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md056_test.rs +0 -0
  243. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md057_test.rs +0 -0
  244. {rumdl-0.0.51 → rumdl-0.0.52}/tests/rules/md058_test.rs +0 -0
  245. {rumdl-0.0.51 → rumdl-0.0.52}/tests/utils/blockquote_utils_test.rs +0 -0
  246. {rumdl-0.0.51 → rumdl-0.0.52}/tests/utils/code_block_utils_extended_test.rs +0 -0
  247. {rumdl-0.0.51 → rumdl-0.0.52}/tests/utils/code_block_utils_test.rs +0 -0
  248. {rumdl-0.0.51 → rumdl-0.0.52}/tests/utils/core_utils_test.rs +0 -0
  249. {rumdl-0.0.51 → rumdl-0.0.52}/tests/utils/front_matter_utils_test.rs +0 -0
  250. {rumdl-0.0.51 → rumdl-0.0.52}/tests/utils/line_index_test.rs +0 -0
  251. {rumdl-0.0.51 → rumdl-0.0.52}/tests/utils/mod.rs +0 -0
  252. {rumdl-0.0.51 → rumdl-0.0.52}/tests/utils_markdown_edge_cases.rs +0 -0
  253. {rumdl-0.0.51 → rumdl-0.0.52}/tests/utils_tests.rs +0 -0
@@ -1208,7 +1208,7 @@ dependencies = [
1208
1208
 
1209
1209
  [[package]]
1210
1210
  name = "rumdl"
1211
- version = "0.0.51"
1211
+ version = "0.0.52"
1212
1212
  dependencies = [
1213
1213
  "anyhow",
1214
1214
  "assert_cmd",
@@ -1236,6 +1236,7 @@ dependencies = [
1236
1236
  "rayon",
1237
1237
  "regex",
1238
1238
  "serde",
1239
+ "serde_json",
1239
1240
  "serde_yaml",
1240
1241
  "strsim",
1241
1242
  "tempfile",
@@ -1475,9 +1476,9 @@ dependencies = [
1475
1476
 
1476
1477
  [[package]]
1477
1478
  name = "toml"
1478
- version = "0.8.21"
1479
+ version = "0.8.22"
1479
1480
  source = "registry+https://github.com/rust-lang/crates.io-index"
1480
- checksum = "900f6c86a685850b1bc9f6223b20125115ee3f31e01207d81655bbcc0aea9231"
1481
+ checksum = "05ae329d1f08c4d17a59bed7ff5b5a769d062e64a62d34a3261b219e62cd5aae"
1481
1482
  dependencies = [
1482
1483
  "serde",
1483
1484
  "serde_spanned",
@@ -1496,9 +1497,9 @@ dependencies = [
1496
1497
 
1497
1498
  [[package]]
1498
1499
  name = "toml_edit"
1499
- version = "0.22.25"
1500
+ version = "0.22.26"
1500
1501
  source = "registry+https://github.com/rust-lang/crates.io-index"
1501
- checksum = "10558ed0bd2a1562e630926a2d1f0b98c827da99fabd3fe20920a59642504485"
1502
+ checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e"
1502
1503
  dependencies = [
1503
1504
  "indexmap",
1504
1505
  "serde",
@@ -1510,9 +1511,9 @@ dependencies = [
1510
1511
 
1511
1512
  [[package]]
1512
1513
  name = "toml_write"
1513
- version = "0.1.0"
1514
+ version = "0.1.1"
1514
1515
  source = "registry+https://github.com/rust-lang/crates.io-index"
1515
- checksum = "28391a4201ba7eb1984cfeb6862c0b3ea2cfe23332298967c749dddc0d6cd976"
1516
+ checksum = "bfb942dfe1d8e29a7ee7fcbde5bd2b9a25fb89aa70caea2eba3bee836ff41076"
1516
1517
 
1517
1518
  [[package]]
1518
1519
  name = "trim-in-place"
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "rumdl"
3
- version = "0.0.51"
3
+ version = "0.0.52"
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>"]
@@ -32,6 +32,7 @@ lazy_static = "1.5.0"
32
32
  rayon = { version = "1.10.0", optional = true }
33
33
  serde = { version = "1.0", features = ["derive"] }
34
34
  serde_yaml = "0.9.34"
35
+ serde_json = "1.0"
35
36
  toml = "0.8.20"
36
37
  walkdir = "2.5.0"
37
38
  strsim = "0.11"
@@ -117,4 +117,10 @@ version-push:
117
117
  # Combined targets for one-step release
118
118
  release-major: version-major version-push
119
119
  release-minor: version-minor version-push
120
- release-patch: version-patch version-push
120
+ release-patch: version-patch version-push
121
+
122
+ maturin-build:
123
+ uv run --with pip,maturin[zig],cffi maturin build --release
124
+
125
+ maturin-sdist:
126
+ uv run --with pip,maturin[zig],cffi maturin sdist
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rumdl
3
- Version: 0.0.51
3
+ Version: 0.0.52
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -17,7 +17,7 @@ Classifier: Programming Language :: Rust
17
17
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
18
18
  Classifier: Topic :: Software Development :: Quality Assurance
19
19
  Classifier: Topic :: Text Processing :: Markup :: Markdown
20
- Summary: An extremely fast Markdown linter written in Rust
20
+ Summary: A fast Markdown linter written in Rust
21
21
  Keywords: markdown,linter,markdown-linter,static-analysis,documentation
22
22
  Home-Page: https://github.com/rvben/rumdl
23
23
  Author: Ruben J. Jongejan <ruben.jongejan@gmail.com>
@@ -5,7 +5,7 @@ build-backend = "maturin"
5
5
  [project]
6
6
  name = "rumdl"
7
7
  dynamic = ["version"]
8
- description = "An extremely fast Markdown linter written in Rust"
8
+ description = "A fast Markdown linter written in Rust"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.7"
11
11
  license = { text = "MIT" }
@@ -60,4 +60,4 @@ disallow_incomplete_defs = true
60
60
  [dependency-groups]
61
61
  dev = [
62
62
  "pre-commit>=2.21.0",
63
- ]
63
+ ]
@@ -1,19 +1,23 @@
1
+ //!
2
+ //! This module defines configuration structures, loading logic, and provenance tracking for rumdl.
3
+ //! Supports TOML, pyproject.toml, and markdownlint config formats, and provides merging and override logic.
4
+
1
5
  use serde::{Deserialize, Serialize};
2
- use std::collections::HashMap;
6
+ use std::collections::BTreeMap;
3
7
  use std::fs;
4
8
  use std::io;
5
9
  use std::path::Path;
6
10
 
7
11
  /// Represents a rule-specific configuration
8
- #[derive(Debug, Serialize, Deserialize, Default)]
12
+ #[derive(Debug, Serialize, Deserialize, Default, PartialEq)]
9
13
  pub struct RuleConfig {
10
14
  /// Configuration values for the rule
11
15
  #[serde(flatten)]
12
- pub values: HashMap<String, toml::Value>,
16
+ pub values: BTreeMap<String, toml::Value>,
13
17
  }
14
18
 
15
19
  /// Represents the complete configuration loaded from rumdl.toml
16
- #[derive(Debug, Serialize, Deserialize, Default)]
20
+ #[derive(Debug, Serialize, Deserialize, Default, PartialEq)]
17
21
  pub struct Config {
18
22
  /// Global configuration options
19
23
  #[serde(default)]
@@ -21,11 +25,11 @@ pub struct Config {
21
25
 
22
26
  /// Rule-specific configurations
23
27
  #[serde(flatten)]
24
- pub rules: HashMap<String, RuleConfig>,
28
+ pub rules: BTreeMap<String, RuleConfig>,
25
29
  }
26
30
 
27
31
  /// Global configuration options
28
- #[derive(Debug, Serialize, Deserialize)]
32
+ #[derive(Debug, Serialize, Deserialize, PartialEq)]
29
33
  #[serde(default)]
30
34
  pub struct GlobalConfig {
31
35
  /// Enabled rules
@@ -66,6 +70,17 @@ impl Default for GlobalConfig {
66
70
  }
67
71
  }
68
72
 
73
+ const MARKDOWNLINT_CONFIG_FILES: &[&str] = &[
74
+ ".markdownlint.json",
75
+ ".markdownlint.jsonc",
76
+ ".markdownlint.yaml",
77
+ ".markdownlint.yml",
78
+ "markdownlint.json",
79
+ "markdownlint.jsonc",
80
+ "markdownlint.yaml",
81
+ "markdownlint.yml",
82
+ ];
83
+
69
84
  /// Load configuration from the specified file or search for a default config file
70
85
  pub fn load_config(config_path: Option<&str>) -> Result<Config, ConfigError> {
71
86
  // If a specific config file is provided, use it
@@ -444,6 +459,8 @@ pub enum ConfigSource {
444
459
  RumdlToml,
445
460
  PyprojectToml,
446
461
  Cli,
462
+ /// Value was loaded from a markdownlint config file (e.g. .markdownlint.json, .markdownlint.yaml)
463
+ Markdownlint,
447
464
  }
448
465
 
449
466
  #[derive(Debug, Clone)]
@@ -515,13 +532,13 @@ impl Default for SourcedGlobalConfig {
515
532
 
516
533
  #[derive(Debug, Default)]
517
534
  pub struct SourcedRuleConfig {
518
- pub values: std::collections::HashMap<String, SourcedValue<toml::Value>>,
535
+ pub values: BTreeMap<String, SourcedValue<toml::Value>>,
519
536
  }
520
537
 
521
538
  #[derive(Debug, Default)]
522
539
  pub struct SourcedConfig {
523
540
  pub global: SourcedGlobalConfig,
524
- pub rules: std::collections::HashMap<String, SourcedRuleConfig>,
541
+ pub rules: BTreeMap<String, SourcedRuleConfig>,
525
542
  pub loaded_files: Vec<String>,
526
543
  pub unknown_keys: Vec<(String, String)>, // (section, key)
527
544
  }
@@ -541,8 +558,7 @@ impl SourcedConfig {
541
558
  include: SourcedValue::new(Vec::new(), Default),
542
559
  respect_gitignore: SourcedValue::new(true, Default),
543
560
  };
544
- let mut rules: std::collections::HashMap<String, SourcedRuleConfig> =
545
- std::collections::HashMap::new();
561
+ let mut rules: BTreeMap<String, SourcedRuleConfig> = BTreeMap::new();
546
562
 
547
563
  // Helper to update a sourced value if the new source has higher precedence
548
564
  let update_vec = |current: &mut SourcedValue<Vec<String>>,
@@ -564,17 +580,21 @@ impl SourcedConfig {
564
580
  match src {
565
581
  ConfigSource::Default => 0,
566
582
  ConfigSource::PyprojectToml => 1,
567
- ConfigSource::RumdlToml => 2,
568
- ConfigSource::Cli => 3,
583
+ ConfigSource::Markdownlint => 2,
584
+ ConfigSource::RumdlToml => 3,
585
+ ConfigSource::Cli => 4,
569
586
  }
570
587
  }
571
588
 
589
+ // Track if any TOML/pyproject config was loaded
590
+ let mut loaded_toml_or_pyproject = false;
572
591
  // 1. Load pyproject.toml if present
573
592
  if config_path.is_none() && std::path::Path::new("pyproject.toml").exists() {
574
- loaded_files.push("pyproject.toml".to_string());
575
593
  if let Ok(content) = std::fs::read_to_string("pyproject.toml") {
576
594
  if let Ok(pyproject) = toml::from_str::<toml::Value>(&content) {
577
595
  if let Some(rumdl_config) = pyproject.get("tool").and_then(|t| t.get("rumdl")) {
596
+ loaded_files.push("pyproject.toml".to_string());
597
+ loaded_toml_or_pyproject = true;
578
598
  if let Some(rumdl_table) = rumdl_config.as_table() {
579
599
  for (key, value) in rumdl_table {
580
600
  match key.as_str() {
@@ -673,12 +693,12 @@ impl SourcedConfig {
673
693
  }
674
694
  }
675
695
  }
676
-
677
696
  // 2. Load .rumdl.toml or rumdl.toml if present (higher precedence)
678
697
  if config_path.is_none() {
679
698
  for filename in [".rumdl.toml", "rumdl.toml"] {
680
699
  if std::path::Path::new(filename).exists() {
681
700
  loaded_files.push(filename.to_string());
701
+ loaded_toml_or_pyproject = true;
682
702
  if let Ok(content) = std::fs::read_to_string(filename) {
683
703
  if let Ok(toml_val) = toml::from_str::<toml::Value>(&content) {
684
704
  if let Some(global_table) =
@@ -786,6 +806,7 @@ impl SourcedConfig {
786
806
  // 3. If explicit config path is given, load it (highest precedence except CLI)
787
807
  if let Some(path) = config_path {
788
808
  loaded_files.push(path.to_string());
809
+ loaded_toml_or_pyproject = true;
789
810
  if let Ok(content) = std::fs::read_to_string(path) {
790
811
  if let Ok(toml_val) = toml::from_str::<toml::Value>(&content) {
791
812
  if let Some(global_table) = toml_val.get("global").and_then(|v| v.as_table()) {
@@ -874,7 +895,75 @@ impl SourcedConfig {
874
895
  }
875
896
  }
876
897
  }
877
- // 4. CLI overrides (if provided)
898
+ // 4. Markdownlint config fallback if no TOML/pyproject config was loaded
899
+ if !loaded_toml_or_pyproject {
900
+ for filename in MARKDOWNLINT_CONFIG_FILES {
901
+ if std::path::Path::new(filename).exists() {
902
+ let result = crate::markdownlint_config::load_markdownlint_config(filename);
903
+ if let Ok(ml_config) = result {
904
+ let sourced = ml_config.map_to_sourced_rumdl_config(Some(filename));
905
+ // Merge rule configs
906
+ for (rule, rule_cfg) in sourced.rules {
907
+ rules.insert(rule, rule_cfg);
908
+ }
909
+ // Set provenance for global config values to Markdownlint
910
+ global.enable = SourcedValue {
911
+ value: Vec::new(),
912
+ source: ConfigSource::Markdownlint,
913
+ overrides: vec![ConfigOverride {
914
+ value: Vec::new(),
915
+ source: ConfigSource::Markdownlint,
916
+ file: Some(filename.to_string()),
917
+ line: None,
918
+ }],
919
+ };
920
+ global.disable = SourcedValue {
921
+ value: Vec::new(),
922
+ source: ConfigSource::Markdownlint,
923
+ overrides: vec![ConfigOverride {
924
+ value: Vec::new(),
925
+ source: ConfigSource::Markdownlint,
926
+ file: Some(filename.to_string()),
927
+ line: None,
928
+ }],
929
+ };
930
+ global.exclude = SourcedValue {
931
+ value: Vec::new(),
932
+ source: ConfigSource::Markdownlint,
933
+ overrides: vec![ConfigOverride {
934
+ value: Vec::new(),
935
+ source: ConfigSource::Markdownlint,
936
+ file: Some(filename.to_string()),
937
+ line: None,
938
+ }],
939
+ };
940
+ global.include = SourcedValue {
941
+ value: Vec::new(),
942
+ source: ConfigSource::Markdownlint,
943
+ overrides: vec![ConfigOverride {
944
+ value: Vec::new(),
945
+ source: ConfigSource::Markdownlint,
946
+ file: Some(filename.to_string()),
947
+ line: None,
948
+ }],
949
+ };
950
+ global.respect_gitignore = SourcedValue {
951
+ value: true,
952
+ source: ConfigSource::Markdownlint,
953
+ overrides: vec![ConfigOverride {
954
+ value: true,
955
+ source: ConfigSource::Markdownlint,
956
+ file: Some(filename.to_string()),
957
+ line: None,
958
+ }],
959
+ };
960
+ loaded_files.push(filename.to_string());
961
+ }
962
+ break;
963
+ }
964
+ }
965
+ }
966
+ // 5. CLI overrides (if provided)
878
967
  if let Some(cli) = cli_overrides {
879
968
  update_vec(&mut global.enable, cli.enable.value.clone(), Cli, None);
880
969
  update_vec(&mut global.disable, cli.disable.value.clone(), Cli, None);
@@ -896,3 +985,24 @@ impl SourcedConfig {
896
985
  }
897
986
  }
898
987
  }
988
+
989
+ impl From<SourcedConfig> for Config {
990
+ fn from(sourced: SourcedConfig) -> Self {
991
+ let global = GlobalConfig {
992
+ enable: sourced.global.enable.value,
993
+ disable: sourced.global.disable.value,
994
+ exclude: sourced.global.exclude.value,
995
+ include: sourced.global.include.value,
996
+ respect_gitignore: sourced.global.respect_gitignore.value,
997
+ };
998
+ let mut rules = BTreeMap::new();
999
+ for (rule_name, sourced_rule) in sourced.rules {
1000
+ let mut rule_config = RuleConfig::default();
1001
+ for (k, v) in sourced_rule.values {
1002
+ rule_config.values.insert(k, v.value);
1003
+ }
1004
+ rules.insert(rule_name, rule_config);
1005
+ }
1006
+ Config { global, rules }
1007
+ }
1008
+ }
@@ -1,3 +1,6 @@
1
+ //!
2
+ //! This module provides initialization utilities for rumdl, such as creating default configuration files.
3
+
1
4
  use std::fs;
2
5
  use std::io;
3
6
  use std::path::Path;
@@ -4,6 +4,7 @@ pub mod profiling;
4
4
  pub mod rule;
5
5
  pub mod rules;
6
6
  pub mod utils;
7
+ pub mod markdownlint_config;
7
8
 
8
9
  #[cfg(feature = "python")]
9
10
  pub mod python;