rumdl 0.0.55__tar.gz → 0.0.57__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 (265) hide show
  1. {rumdl-0.0.55 → rumdl-0.0.57}/Cargo.lock +1 -1
  2. {rumdl-0.0.55 → rumdl-0.0.57}/Cargo.toml +1 -1
  3. {rumdl-0.0.55 → rumdl-0.0.57}/PKG-INFO +1 -1
  4. {rumdl-0.0.55 → rumdl-0.0.57}/benches/rule_performance.rs +14 -24
  5. {rumdl-0.0.55 → rumdl-0.0.57}/docs/RULES.md +1 -2
  6. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md030.md +4 -2
  7. rumdl-0.0.57/parity_check.py +211 -0
  8. {rumdl-0.0.55 → rumdl-0.0.57}/src/config.rs +85 -44
  9. {rumdl-0.0.55 → rumdl-0.0.57}/src/lib.rs +4 -5
  10. {rumdl-0.0.55 → rumdl-0.0.57}/src/main.rs +88 -24
  11. {rumdl-0.0.55 → rumdl-0.0.57}/src/markdownlint_config.rs +1 -5
  12. {rumdl-0.0.55 → rumdl-0.0.57}/src/rule.rs +4 -3
  13. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/emphasis_style.rs +1 -1
  14. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md003_heading_style.rs +16 -25
  15. rumdl-0.0.57/src/rules/md004_unordered_list_style.rs +445 -0
  16. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md007_ul_indent.rs +90 -28
  17. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md012_no_multiple_blanks.rs +38 -29
  18. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md013_line_length.rs +57 -42
  19. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md025_single_title.rs +26 -19
  20. rumdl-0.0.57/src/rules/md030_list_marker_space.rs +226 -0
  21. rumdl-0.0.57/src/rules/md032_blanks_around_lists.rs +588 -0
  22. rumdl-0.0.57/src/rules/md033_no_inline_html.rs +469 -0
  23. rumdl-0.0.57/src/rules/md034_no_bare_urls.rs +469 -0
  24. rumdl-0.0.57/src/rules/md039_no_space_in_links.rs +466 -0
  25. rumdl-0.0.57/src/rules/md049_emphasis_style.rs +303 -0
  26. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md055_table_pipe_style.rs +2 -2
  27. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/mod.rs +1 -15
  28. {rumdl-0.0.55 → rumdl-0.0.57}/src/utils/document_structure.rs +214 -16
  29. {rumdl-0.0.55 → rumdl-0.0.57}/tests/advanced_integration_tests.rs +33 -29
  30. {rumdl-0.0.55 → rumdl-0.0.57}/tests/config_application_tests.rs +8 -7
  31. rumdl-0.0.57/tests/config_tests.rs +859 -0
  32. rumdl-0.0.57/tests/integration_tests.rs +18 -0
  33. rumdl-0.0.57/tests/json_output_test.rs +34 -0
  34. {rumdl-0.0.55 → rumdl-0.0.57}/tests/perf_check.rs +5 -1
  35. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md004_test.rs +167 -119
  36. rumdl-0.0.57/tests/rules/md007_test.rs +292 -0
  37. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md012_test.rs +27 -12
  38. rumdl-0.0.57/tests/rules/md013_test.rs +263 -0
  39. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md025_test.rs +4 -3
  40. rumdl-0.0.57/tests/rules/md030_test.rs +194 -0
  41. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md032_test.rs +104 -1
  42. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md033_test.rs +27 -25
  43. rumdl-0.0.57/tests/rules/md034_test.rs +486 -0
  44. rumdl-0.0.57/tests/rules/md039_test.rs +296 -0
  45. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/mod.rs +0 -2
  46. rumdl-0.0.55/docs/md008.md +0 -119
  47. rumdl-0.0.55/docs/md015.md +0 -93
  48. rumdl-0.0.55/src/rules/md004_unordered_list_style.rs +0 -361
  49. rumdl-0.0.55/src/rules/md008_ul_style.rs +0 -520
  50. rumdl-0.0.55/src/rules/md015_no_missing_space_after_list_marker.rs +0 -157
  51. rumdl-0.0.55/src/rules/md030_list_marker_space.rs +0 -428
  52. rumdl-0.0.55/src/rules/md032_blanks_around_lists.rs +0 -418
  53. rumdl-0.0.55/src/rules/md033_no_inline_html.rs +0 -400
  54. rumdl-0.0.55/src/rules/md034_no_bare_urls.rs +0 -328
  55. rumdl-0.0.55/src/rules/md039_no_space_in_links.rs +0 -365
  56. rumdl-0.0.55/src/rules/md049_emphasis_style.rs +0 -375
  57. rumdl-0.0.55/tests/config_tests.rs +0 -472
  58. rumdl-0.0.55/tests/integration_tests.rs +0 -40
  59. rumdl-0.0.55/tests/rules/md007_test.rs +0 -127
  60. rumdl-0.0.55/tests/rules/md008_test.rs +0 -318
  61. rumdl-0.0.55/tests/rules/md013_test.rs +0 -128
  62. rumdl-0.0.55/tests/rules/md015_proptest.rs +0 -23
  63. rumdl-0.0.55/tests/rules/md015_test.rs +0 -243
  64. rumdl-0.0.55/tests/rules/md030_test.rs +0 -48
  65. rumdl-0.0.55/tests/rules/md034_test.rs +0 -255
  66. rumdl-0.0.55/tests/rules/md039_test.rs +0 -89
  67. {rumdl-0.0.55 → rumdl-0.0.57}/.rumdl.toml +0 -0
  68. {rumdl-0.0.55 → rumdl-0.0.57}/MANIFEST.in +0 -0
  69. {rumdl-0.0.55 → rumdl-0.0.57}/Makefile +0 -0
  70. {rumdl-0.0.55 → rumdl-0.0.57}/README.md +0 -0
  71. {rumdl-0.0.55 → rumdl-0.0.57}/assets/logo.png +0 -0
  72. {rumdl-0.0.55 → rumdl-0.0.57}/benches/range_performance.rs +0 -0
  73. {rumdl-0.0.55 → rumdl-0.0.57}/benches/range_utils_benchmark.rs +0 -0
  74. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md001.md +0 -0
  75. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md002.md +0 -0
  76. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md003.md +0 -0
  77. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md004.md +0 -0
  78. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md005.md +0 -0
  79. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md006.md +0 -0
  80. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md007.md +0 -0
  81. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md009.md +0 -0
  82. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md010.md +0 -0
  83. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md011.md +0 -0
  84. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md012.md +0 -0
  85. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md013.md +0 -0
  86. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md014.md +0 -0
  87. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md018.md +0 -0
  88. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md019.md +0 -0
  89. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md020.md +0 -0
  90. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md021.md +0 -0
  91. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md022.md +0 -0
  92. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md023.md +0 -0
  93. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md024.md +0 -0
  94. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md025.md +0 -0
  95. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md026.md +0 -0
  96. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md027.md +0 -0
  97. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md028.md +0 -0
  98. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md029.md +0 -0
  99. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md031.md +0 -0
  100. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md032.md +0 -0
  101. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md033.md +0 -0
  102. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md034.md +0 -0
  103. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md035.md +0 -0
  104. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md036.md +0 -0
  105. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md037.md +0 -0
  106. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md038.md +0 -0
  107. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md039.md +0 -0
  108. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md040.md +0 -0
  109. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md041.md +0 -0
  110. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md042.md +0 -0
  111. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md043.md +0 -0
  112. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md044.md +0 -0
  113. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md045.md +0 -0
  114. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md046.md +0 -0
  115. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md047.md +0 -0
  116. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md048.md +0 -0
  117. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md049.md +0 -0
  118. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md050.md +0 -0
  119. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md051.md +0 -0
  120. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md052.md +0 -0
  121. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md053.md +0 -0
  122. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md054.md +0 -0
  123. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md055.md +0 -0
  124. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md056.md +0 -0
  125. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md057.md +0 -0
  126. {rumdl-0.0.55 → rumdl-0.0.57}/docs/md058.md +0 -0
  127. {rumdl-0.0.55 → rumdl-0.0.57}/issues/plan-rule-parity-with-markdownlint.md +0 -0
  128. {rumdl-0.0.55 → rumdl-0.0.57}/pyproject.toml +0 -0
  129. {rumdl-0.0.55 → rumdl-0.0.57}/python/MANIFEST.in +0 -0
  130. {rumdl-0.0.55 → rumdl-0.0.57}/python/PYTHON-README.md +0 -0
  131. {rumdl-0.0.55 → rumdl-0.0.57}/python/rumdl/__init__.py +0 -0
  132. {rumdl-0.0.55 → rumdl-0.0.57}/python/rumdl/__main__.py +0 -0
  133. {rumdl-0.0.55 → rumdl-0.0.57}/python/rumdl/py.typed +0 -0
  134. {rumdl-0.0.55 → rumdl-0.0.57}/rumdl.toml.example +0 -0
  135. {rumdl-0.0.55 → rumdl-0.0.57}/src/init.rs +0 -0
  136. {rumdl-0.0.55 → rumdl-0.0.57}/src/lint_context.rs +0 -0
  137. {rumdl-0.0.55 → rumdl-0.0.57}/src/profiling.rs +0 -0
  138. {rumdl-0.0.55 → rumdl-0.0.57}/src/python.rs +0 -0
  139. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/blockquote_utils.rs +0 -0
  140. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/code_block_utils.rs +0 -0
  141. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/code_fence_utils.rs +0 -0
  142. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/front_matter_utils.rs +0 -0
  143. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/heading_utils.rs +0 -0
  144. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/list_utils.rs +0 -0
  145. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md001_heading_increment.rs +0 -0
  146. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md002_first_heading_h1.rs +0 -0
  147. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md005_list_indent.rs +0 -0
  148. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md006_start_bullets.rs +0 -0
  149. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md009_trailing_spaces.rs +0 -0
  150. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md010_no_hard_tabs.rs +0 -0
  151. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md011_no_reversed_links.rs +0 -0
  152. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md014_commands_show_output.rs +0 -0
  153. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md018_no_missing_space_atx.rs +0 -0
  154. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md019_no_multiple_space_atx.rs +0 -0
  155. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
  156. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
  157. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md022_blanks_around_headings.rs +0 -0
  158. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md023_heading_start_left.rs +0 -0
  159. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md024_no_duplicate_heading.rs +0 -0
  160. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md026_no_trailing_punctuation.rs +0 -0
  161. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
  162. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md028_no_blanks_blockquote.rs +0 -0
  163. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md029_ordered_list_prefix.rs +0 -0
  164. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md031_blanks_around_fences.rs +0 -0
  165. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md035_hr_style.rs +0 -0
  166. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md036_no_emphasis_only_first.rs +0 -0
  167. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md037_spaces_around_emphasis.rs +0 -0
  168. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md038_no_space_in_code.rs +0 -0
  169. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md040_fenced_code_language.rs +0 -0
  170. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md041_first_line_heading.rs +0 -0
  171. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md042_no_empty_links.rs +0 -0
  172. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md043_required_headings.rs +0 -0
  173. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md044_proper_names.rs +0 -0
  174. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md045_no_alt_text.rs +0 -0
  175. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md046_code_block_style.rs +0 -0
  176. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md047_single_trailing_newline.rs +0 -0
  177. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md048_code_fence_style.rs +0 -0
  178. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md050_strong_style.rs +0 -0
  179. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md051_link_fragments.rs +0 -0
  180. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md052_reference_links_images.rs +0 -0
  181. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md053_link_image_reference_definitions.rs +0 -0
  182. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md054_link_image_style.rs +0 -0
  183. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md056_table_column_count.rs +0 -0
  184. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md057_existing_relative_links.rs +0 -0
  185. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/md058_blanks_around_tables.rs +0 -0
  186. {rumdl-0.0.55 → rumdl-0.0.57}/src/rules/strong_style.rs +0 -0
  187. {rumdl-0.0.55 → rumdl-0.0.57}/src/utils/code_block_utils.rs +0 -0
  188. {rumdl-0.0.55 → rumdl-0.0.57}/src/utils/early_returns.rs +0 -0
  189. {rumdl-0.0.55 → rumdl-0.0.57}/src/utils/element_cache.rs +0 -0
  190. {rumdl-0.0.55 → rumdl-0.0.57}/src/utils/markdown_elements.rs +0 -0
  191. {rumdl-0.0.55 → rumdl-0.0.57}/src/utils/mod.rs +0 -0
  192. {rumdl-0.0.55 → rumdl-0.0.57}/src/utils/range_utils.rs +0 -0
  193. {rumdl-0.0.55 → rumdl-0.0.57}/src/utils/regex_cache.rs +0 -0
  194. {rumdl-0.0.55 → rumdl-0.0.57}/tests/cli_duplication_test.rs +0 -0
  195. {rumdl-0.0.55 → rumdl-0.0.57}/tests/cli_integration_tests.rs +0 -0
  196. {rumdl-0.0.55 → rumdl-0.0.57}/tests/commonmark_compliance_tests.rs +0 -0
  197. {rumdl-0.0.55 → rumdl-0.0.57}/tests/comprehensive_integration_tests.rs +0 -0
  198. {rumdl-0.0.55 → rumdl-0.0.57}/tests/init_command_test.rs +0 -0
  199. {rumdl-0.0.55 → rumdl-0.0.57}/tests/init_tests.rs +0 -0
  200. {rumdl-0.0.55 → rumdl-0.0.57}/tests/lib.rs +0 -0
  201. {rumdl-0.0.55 → rumdl-0.0.57}/tests/markdownlint_cli_integration.rs +0 -0
  202. {rumdl-0.0.55 → rumdl-0.0.57}/tests/markdownlint_config_test.rs +0 -0
  203. {rumdl-0.0.55 → rumdl-0.0.57}/tests/md030_edge_cases.md +0 -0
  204. {rumdl-0.0.55 → rumdl-0.0.57}/tests/output_format_tests.rs +0 -0
  205. {rumdl-0.0.55 → rumdl-0.0.57}/tests/pyproject_config_tests.rs +0 -0
  206. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md001_test.rs +0 -0
  207. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md001_unicode_test.rs +0 -0
  208. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md002_test.rs +0 -0
  209. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md003_test.rs +0 -0
  210. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md005_test.rs +0 -0
  211. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md006_test.rs +0 -0
  212. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md006_unicode_test.rs +0 -0
  213. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md009_test.rs +0 -0
  214. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md010_test.rs +0 -0
  215. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md011_test.rs +0 -0
  216. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md014_test.rs +0 -0
  217. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md018_test.rs +0 -0
  218. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md019_test.rs +0 -0
  219. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md020_test.rs +0 -0
  220. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md021_test.rs +0 -0
  221. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md022_test.rs +0 -0
  222. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md023_extended_test.rs +0 -0
  223. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md023_test.rs +0 -0
  224. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md024_test.rs +0 -0
  225. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md026_test.rs +0 -0
  226. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md027_test.rs +0 -0
  227. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md028_test.rs +0 -0
  228. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md029_test.rs +0 -0
  229. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md031_test.rs +0 -0
  230. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md033_extended_test.rs +0 -0
  231. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md035_test.rs +0 -0
  232. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md036_test.rs +0 -0
  233. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md037_test.rs +0 -0
  234. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md038_test.rs +0 -0
  235. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md040_test.rs +0 -0
  236. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md041_test.rs +0 -0
  237. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md042_test.rs +0 -0
  238. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md043_test.rs +0 -0
  239. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md044_test.rs +0 -0
  240. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md045_test.rs +0 -0
  241. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md046_test.rs +0 -0
  242. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md047_test.rs +0 -0
  243. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md048_test.rs +0 -0
  244. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md049_test.rs +0 -0
  245. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md050_test.rs +0 -0
  246. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md051_test.rs +0 -0
  247. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md052_test.rs +0 -0
  248. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md053_additional_test.rs +0 -0
  249. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md053_proptest.rs +0 -0
  250. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md053_test.rs +0 -0
  251. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md054_test.rs +0 -0
  252. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md054_unicode_test.rs +0 -0
  253. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md055_test.rs +0 -0
  254. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md056_test.rs +0 -0
  255. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md057_test.rs +0 -0
  256. {rumdl-0.0.55 → rumdl-0.0.57}/tests/rules/md058_test.rs +0 -0
  257. {rumdl-0.0.55 → rumdl-0.0.57}/tests/utils/blockquote_utils_test.rs +0 -0
  258. {rumdl-0.0.55 → rumdl-0.0.57}/tests/utils/code_block_utils_extended_test.rs +0 -0
  259. {rumdl-0.0.55 → rumdl-0.0.57}/tests/utils/code_block_utils_test.rs +0 -0
  260. {rumdl-0.0.55 → rumdl-0.0.57}/tests/utils/core_utils_test.rs +0 -0
  261. {rumdl-0.0.55 → rumdl-0.0.57}/tests/utils/front_matter_utils_test.rs +0 -0
  262. {rumdl-0.0.55 → rumdl-0.0.57}/tests/utils/line_index_test.rs +0 -0
  263. {rumdl-0.0.55 → rumdl-0.0.57}/tests/utils/mod.rs +0 -0
  264. {rumdl-0.0.55 → rumdl-0.0.57}/tests/utils_markdown_edge_cases.rs +0 -0
  265. {rumdl-0.0.55 → rumdl-0.0.57}/tests/utils_tests.rs +0 -0
@@ -1385,7 +1385,7 @@ dependencies = [
1385
1385
 
1386
1386
  [[package]]
1387
1387
  name = "rumdl"
1388
- version = "0.0.55"
1388
+ version = "0.0.57"
1389
1389
  dependencies = [
1390
1390
  "anyhow",
1391
1391
  "assert_cmd",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "rumdl"
3
- version = "0.0.55"
3
+ version = "0.0.57"
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.55
3
+ Version: 0.0.57
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -1,8 +1,8 @@
1
1
  use criterion::{black_box, criterion_group, criterion_main, Criterion};
2
2
  use rumdl::rule::Rule;
3
3
  use rumdl::rules::{
4
- MD013LineLength, MD015NoMissingSpaceAfterListMarker, MD033NoInlineHtml, MD037NoSpaceInEmphasis,
5
- MD044ProperNames, MD051LinkFragments, MD053LinkImageReferenceDefinitions,
4
+ MD013LineLength, MD033NoInlineHtml, MD037NoSpaceInEmphasis, MD044ProperNames, MD051LinkFragments,
5
+ MD053LinkImageReferenceDefinitions,
6
6
  };
7
7
 
8
8
  /// Benchmark MD013 rule on a large content with long lines
@@ -16,20 +16,11 @@ fn bench_md013(c: &mut Criterion) {
16
16
  let rule = MD013LineLength::default();
17
17
 
18
18
  c.bench_function("MD013 check 100 long lines", |b| {
19
- b.iter(|| rule.check(black_box(&content)))
19
+ b.iter(|| rule.check(&rumdl::lint_context::LintContext::new(&content)))
20
20
  });
21
21
 
22
22
  c.bench_function("MD013 fix 100 long lines", |b| {
23
- b.iter(|| rule.fix(black_box(&content)))
24
- });
25
- }
26
-
27
- /// Benchmark MD015 rule on a large content with list items
28
- fn bench_md015(c: &mut Criterion) {
29
- let rule = MD015NoMissingSpaceAfterListMarker::new();
30
- let content = "-Item 1\n*Item 2\n+Item 3".repeat(1000);
31
- c.bench_function("MD015 fix 1000 items", |b| {
32
- b.iter(|| rule.fix(black_box(&content)))
23
+ b.iter(|| rule.fix(&rumdl::lint_context::LintContext::new(&content)))
33
24
  });
34
25
  }
35
26
 
@@ -44,7 +35,7 @@ fn bench_md033(c: &mut Criterion) {
44
35
  let rule = MD033NoInlineHtml::default();
45
36
 
46
37
  c.bench_function("MD033 check 500 HTML tags", |b| {
47
- b.iter(|| rule.check(black_box(&content)))
38
+ b.iter(|| rule.check(&rumdl::lint_context::LintContext::new(&content)))
48
39
  });
49
40
  }
50
41
 
@@ -68,11 +59,11 @@ fn bench_md037(c: &mut Criterion) {
68
59
  let rule = MD037NoSpaceInEmphasis;
69
60
 
70
61
  c.bench_function("MD037 check 500 emphasis markers", |b| {
71
- b.iter(|| rule.check(black_box(&content)))
62
+ b.iter(|| rule.check(&rumdl::lint_context::LintContext::new(&content)))
72
63
  });
73
64
 
74
65
  c.bench_function("MD037 fix 500 emphasis markers", |b| {
75
- b.iter(|| rule.fix(black_box(&content)))
66
+ b.iter(|| rule.fix(&rumdl::lint_context::LintContext::new(&content)))
76
67
  });
77
68
  }
78
69
 
@@ -117,11 +108,11 @@ fn bench_md044(c: &mut Criterion) {
117
108
  let rule = MD044ProperNames::new(proper_names, true); // true = exclude code blocks
118
109
 
119
110
  c.bench_function("MD044 check 500 proper name occurrences", |b| {
120
- b.iter(|| rule.check(black_box(&content)))
111
+ b.iter(|| rule.check(&rumdl::lint_context::LintContext::new(&content)))
121
112
  });
122
113
 
123
114
  c.bench_function("MD044 fix 500 proper name occurrences", |b| {
124
- b.iter(|| rule.fix(black_box(&content)))
115
+ b.iter(|| rule.fix(&rumdl::lint_context::LintContext::new(&content)))
125
116
  });
126
117
  }
127
118
 
@@ -155,7 +146,7 @@ fn bench_md051(c: &mut Criterion) {
155
146
  let rule = MD051LinkFragments::new();
156
147
 
157
148
  c.bench_function("MD051 check 500 link fragments", |b| {
158
- b.iter(|| rule.check(black_box(&content)))
149
+ b.iter(|| rule.check(&rumdl::lint_context::LintContext::new(&content)))
159
150
  });
160
151
  }
161
152
 
@@ -190,7 +181,7 @@ fn bench_md053(c: &mut Criterion) {
190
181
  c.bench_function("MD053 check cold cache", |b| {
191
182
  b.iter_with_setup(
192
183
  MD053LinkImageReferenceDefinitions::default, // Create a new instance for each iteration
193
- |r| r.check(black_box(&content)),
184
+ |r| r.check(&rumdl::lint_context::LintContext::new(&content)),
194
185
  )
195
186
  });
196
187
 
@@ -198,21 +189,20 @@ fn bench_md053(c: &mut Criterion) {
198
189
  c.bench_function("MD053 check warm cache", |b| {
199
190
  // First, prime the cache
200
191
  let primed_rule = rule.clone();
201
- let _ = primed_rule.check(&content);
192
+ let _ = primed_rule.check(&rumdl::lint_context::LintContext::new(&content));
202
193
 
203
194
  // Then benchmark with warm cache
204
- b.iter(|| primed_rule.check(black_box(&content)))
195
+ b.iter(|| primed_rule.check(&rumdl::lint_context::LintContext::new(&content)))
205
196
  });
206
197
 
207
198
  c.bench_function("MD053 fix unused references", |b| {
208
- b.iter(|| rule.fix(black_box(&content)))
199
+ b.iter(|| rule.fix(&rumdl::lint_context::LintContext::new(&content)))
209
200
  });
210
201
  }
211
202
 
212
203
  criterion_group!(
213
204
  benches,
214
205
  bench_md013,
215
- bench_md015,
216
206
  bench_md033,
217
207
  bench_md037,
218
208
  bench_md044,
@@ -82,7 +82,7 @@ Each rule has a brief description and a link to its detailed documentation.
82
82
 
83
83
  | Rule ID | Rule Name | Description |
84
84
  |---------|-----------|-------------|
85
- | [MD014](md014.md) | Commands show output | Dollar signs used before commands without showing output |
85
+ | [MD014](md014.md) | Commands show output | Code blocks should show output when appropriate |
86
86
  | [MD040](md040.md) | Fenced code language | Fenced code blocks should have a language specified |
87
87
  | [MD046](md046.md) | Code block style | Code block style |
88
88
  | [MD048](md048.md) | Code fence style | Code fence style |
@@ -111,7 +111,6 @@ Each rule has a brief description and a link to its detailed documentation.
111
111
 
112
112
  | Rule ID | Rule Name | Description |
113
113
  |---------|-----------|-------------|
114
- | [MD015](md015.md) | No multiple space list | Multiple spaces after list marker |
115
114
  | [MD057](md057.md) | Relative links | Relative links should exist |
116
115
 
117
116
  ## Using Rules
@@ -2,10 +2,12 @@
2
2
 
3
3
  ## Description
4
4
 
5
- This rule ensures that there is a consistent number of spaces between list markers and the list content.
6
- By default, ordered lists should have one space after the list marker, and unordered lists should have
5
+ This rule ensures that there is a consistent number of spaces between list markers and the list content.
6
+ By default, ordered lists should have one space after the list marker, and unordered lists should have
7
7
  one space after the list marker.
8
8
 
9
+ **Note:** This rule covers multiple spaces (e.g., `* Item`) after list markers, but does **not** warn for missing space (e.g., `*Item`) after the marker. Lines like `*Item` are not considered valid list items per CommonMark and markdownlint, and are ignored.
10
+
9
11
  Consistent spacing improves readability and ensures proper rendering across different Markdown processors.
10
12
 
11
13
  <!-- markdownlint-disable -->
@@ -0,0 +1,211 @@
1
+ #!/usr/bin/env python3
2
+ import subprocess
3
+ import json
4
+ import sys
5
+ from pathlib import Path
6
+ import os
7
+
8
+ PARITY_CORPUS = Path(__file__).parent / "parity_corpus"
9
+ RUMDL_BIN = "cargo run --bin rumdl --"
10
+ MARKDOWNLINT_BIN = "markdownlint"
11
+
12
+
13
+ def run_rumdl(md_file):
14
+ # Use --no-config to ensure no config is loaded (use built-in defaults only)
15
+ cmd = f"{RUMDL_BIN} check '{md_file}' -o json --no-config"
16
+ result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
17
+ if result.returncode != 0 and not result.stdout.strip():
18
+ print(f"[rumdl] Error running on {md_file}: {result.stderr}")
19
+ return []
20
+ try:
21
+ return json.loads(result.stdout)
22
+ except Exception as e:
23
+ print(f"[rumdl] Failed to parse JSON for {md_file}: {e}")
24
+ return []
25
+
26
+ def run_markdownlint(md_file):
27
+ cmd = ["npx", MARKDOWNLINT_BIN, str(md_file), "--json"]
28
+ result = subprocess.run(cmd, capture_output=True, text=True)
29
+ if result.returncode not in (0, 1):
30
+ print(f"[markdownlint] Error running on {md_file}: {result.stderr}")
31
+ return []
32
+
33
+ # markdownlint outputs JSON to stderr when using --json flag
34
+ output = result.stderr.strip() if result.stderr.strip() else result.stdout.strip()
35
+ if output:
36
+ try:
37
+ return json.loads(output)
38
+ except Exception as e:
39
+ print(f"[markdownlint] Failed to parse JSON for {md_file}: {e}")
40
+ print(f"[markdownlint] output for {md_file}:")
41
+ print(output)
42
+ return []
43
+
44
+ def normalize_rumdl(warning, file):
45
+ """Normalize rumdl warning to common format"""
46
+ return {
47
+ "file": str(file.relative_to(Path.cwd())), # Convert to relative path
48
+ "line": warning.get("line"),
49
+ "column": warning.get("column", 1),
50
+ "rule": warning.get("rule_name"),
51
+ "message": warning.get("message"),
52
+ "fix": warning.get("fix"),
53
+ }
54
+
55
+ def normalize_markdownlint(warning):
56
+ """Normalize markdownlint warning to common format"""
57
+ file_path = warning.get("fileName")
58
+ # Convert absolute paths to relative if possible
59
+ if file_path and file_path.startswith('/'):
60
+ try:
61
+ file_path = str(Path(file_path).relative_to(Path.cwd()))
62
+ except ValueError:
63
+ # If the path is not relative to cwd, keep it as is
64
+ pass
65
+
66
+ return {
67
+ "file": file_path,
68
+ "line": warning.get("lineNumber"),
69
+ "column": (warning.get("errorRange") or [1])[0] if warning.get("errorRange") else 1,
70
+ "rule": warning.get("ruleNames", [None])[0],
71
+ "message": warning.get("ruleDescription"),
72
+ "fix": warning.get("fixInfo"),
73
+ }
74
+
75
+ def compare_warnings(rumdl_warnings, markdownlint_warnings):
76
+ # Sort by (line, rule) for comparison - ignore column and message differences
77
+ def key(w):
78
+ return (
79
+ w.get("line", 0),
80
+ w.get("rule", "")
81
+ )
82
+ r_sorted = sorted(rumdl_warnings, key=key)
83
+ m_sorted = sorted(markdownlint_warnings, key=key)
84
+
85
+ # Compare based on file, line, and rule only
86
+ def warning_key(w):
87
+ return (w.get("file"), w.get("line"), w.get("rule"))
88
+
89
+ r_set = set(warning_key(w) for w in r_sorted)
90
+ m_set = set(warning_key(w) for w in m_sorted)
91
+
92
+ only_in_rumdl = r_set - m_set
93
+ only_in_markdownlint = m_set - r_set
94
+ common = r_set & m_set
95
+
96
+ if not only_in_rumdl and not only_in_markdownlint:
97
+ print("All warnings match!")
98
+ return True
99
+
100
+ if only_in_rumdl:
101
+ print(f" Warnings only in rumdl ({len(only_in_rumdl)}):")
102
+ for key in list(only_in_rumdl)[:3]: # Show fewer to reduce noise
103
+ file, line, rule = key
104
+ # Find the actual warning for context
105
+ warning = next((w for w in rumdl_warnings if w.get('file') == file and w.get('line') == line and w.get('rule') == rule), None)
106
+ message = warning.get('message', 'No message') if warning else 'No message'
107
+ print(f" Line {line}: {rule} - {message}")
108
+ if len(only_in_rumdl) > 3:
109
+ print(f" ...and {len(only_in_rumdl) - 3} more.")
110
+ if only_in_markdownlint:
111
+ print(f" Warnings only in markdownlint ({len(only_in_markdownlint)}):")
112
+ for key in list(only_in_markdownlint)[:3]: # Show fewer to reduce noise
113
+ file, line, rule = key
114
+ # Find the actual warning for context
115
+ warning = next((w for w in markdownlint_warnings if w.get('file') == file and w.get('line') == line and w.get('rule') == rule), None)
116
+ message = warning.get('message', 'No message') if warning else 'No message'
117
+ print(f" Line {line}: {rule} - {message}")
118
+ if len(only_in_markdownlint) > 3:
119
+ print(f" ...and {len(only_in_markdownlint) - 3} more.")
120
+ print(f" Common warnings: {len(r_set & m_set)}")
121
+ return False
122
+
123
+ def main():
124
+ md_files = sorted(PARITY_CORPUS.glob("*.md"))
125
+ if not md_files:
126
+ print("No markdown files found in parity_corpus/")
127
+ sys.exit(1)
128
+
129
+ all_passed = True
130
+ total_common = 0
131
+ total_rumdl_only = 0
132
+ total_markdownlint_only = 0
133
+
134
+ for md_file in md_files:
135
+ print(f"\n=== {md_file} ===")
136
+ rumdl_raw = run_rumdl(md_file)
137
+ markdownlint_raw = run_markdownlint(md_file)
138
+
139
+ rumdl_norm = [normalize_rumdl(w, md_file) for w in rumdl_raw]
140
+ markdownlint_norm = [normalize_markdownlint(w) for w in markdownlint_raw]
141
+
142
+ # Filter markdownlint warnings to only include the current file
143
+ file_relative = str(md_file.relative_to(Path.cwd()))
144
+ file_absolute = str(md_file.absolute())
145
+ markdownlint_norm = [w for w in markdownlint_norm if w.get("file") in (file_relative, file_absolute)]
146
+
147
+ # Sort by (line, rule) for comparison - ignore column and message differences
148
+ def key(w):
149
+ return (
150
+ w.get("line", 0),
151
+ w.get("rule", "")
152
+ )
153
+ r_sorted = sorted(rumdl_norm, key=key)
154
+ m_sorted = sorted(markdownlint_norm, key=key)
155
+
156
+ # Compare based on file, line, and rule only
157
+ def warning_key(w):
158
+ return (w.get("file"), w.get("line"), w.get("rule"))
159
+
160
+ r_set = set(warning_key(w) for w in r_sorted)
161
+ m_set = set(warning_key(w) for w in m_sorted)
162
+
163
+ only_in_rumdl = r_set - m_set
164
+ only_in_markdownlint = m_set - r_set
165
+ common = r_set & m_set
166
+
167
+ total_common += len(common)
168
+ total_rumdl_only += len(only_in_rumdl)
169
+ total_markdownlint_only += len(only_in_markdownlint)
170
+
171
+ if not only_in_rumdl and not only_in_markdownlint:
172
+ print("✓ All warnings match!")
173
+ else:
174
+ print("✗ Mismatches found:")
175
+ if only_in_rumdl:
176
+ print(f" Warnings only in rumdl ({len(only_in_rumdl)}):")
177
+ for key in list(only_in_rumdl)[:3]: # Show fewer to reduce noise
178
+ file, line, rule = key
179
+ # Find the actual warning for context
180
+ warning = next((w for w in rumdl_norm if w.get('file') == file and w.get('line') == line and w.get('rule') == rule), None)
181
+ message = warning.get('message', 'No message') if warning else 'No message'
182
+ print(f" Line {line}: {rule} - {message}")
183
+ if len(only_in_rumdl) > 3:
184
+ print(f" ...and {len(only_in_rumdl) - 3} more.")
185
+ if only_in_markdownlint:
186
+ print(f" Warnings only in markdownlint ({len(only_in_markdownlint)}):")
187
+ for key in list(only_in_markdownlint)[:3]: # Show fewer to reduce noise
188
+ file, line, rule = key
189
+ # Find the actual warning for context
190
+ warning = next((w for w in markdownlint_norm if w.get('file') == file and w.get('line') == line and w.get('rule') == rule), None)
191
+ message = warning.get('message', 'No message') if warning else 'No message'
192
+ print(f" Line {line}: {rule} - {message}")
193
+ if len(only_in_markdownlint) > 3:
194
+ print(f" ...and {len(only_in_markdownlint) - 3} more.")
195
+ print(f" Common warnings: {len(common)}")
196
+ all_passed = False
197
+
198
+ print(f"\n=== SUMMARY ===")
199
+ print(f"Total common warnings: {total_common}")
200
+ print(f"Total rumdl-only warnings: {total_rumdl_only}")
201
+ print(f"Total markdownlint-only warnings: {total_markdownlint_only}")
202
+
203
+ if all_passed:
204
+ print("✓ All files match between rumdl and markdownlint!")
205
+ sys.exit(0)
206
+ else:
207
+ print("✗ Some files have mismatches.")
208
+ sys.exit(1)
209
+
210
+ if __name__ == "__main__":
211
+ main()