rumdl 0.0.91__tar.gz → 0.0.92__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 (343) hide show
  1. {rumdl-0.0.91 → rumdl-0.0.92}/CHANGELOG.md +4 -1
  2. {rumdl-0.0.91 → rumdl-0.0.92}/Cargo.lock +16 -3
  3. {rumdl-0.0.91 → rumdl-0.0.92}/Cargo.toml +1 -1
  4. {rumdl-0.0.91 → rumdl-0.0.92}/PKG-INFO +58 -43
  5. {rumdl-0.0.91 → rumdl-0.0.92}/README.md +57 -42
  6. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md045.md +25 -5
  7. {rumdl-0.0.91 → rumdl-0.0.92}/src/config.rs +20 -6
  8. {rumdl-0.0.91 → rumdl-0.0.92}/src/lsp/server.rs +135 -5
  9. {rumdl-0.0.91 → rumdl-0.0.92}/src/performance.rs +108 -1
  10. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md036_no_emphasis_only_first.rs +68 -24
  11. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md044_proper_names/md044_config.rs +8 -0
  12. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md044_proper_names.rs +122 -6
  13. rumdl-0.0.92/src/rules/md045_no_alt_text/md045_config.rs +24 -0
  14. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md045_no_alt_text.rs +55 -6
  15. {rumdl-0.0.91 → rumdl-0.0.92}/tests/character_ranges/mod.rs +1 -1
  16. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md036_test.rs +160 -15
  17. rumdl-0.0.92/tests/rules_mod_test.rs +206 -0
  18. {rumdl-0.0.91 → rumdl-0.0.92}/tests/utils/core_utils_test.rs +46 -0
  19. {rumdl-0.0.91 → rumdl-0.0.92}/tests/vscode_extension_fixes.rs +1 -1
  20. rumdl-0.0.92/tests/vscode_tests.rs +230 -0
  21. {rumdl-0.0.91 → rumdl-0.0.92}/.config/nextest.toml +0 -0
  22. {rumdl-0.0.91 → rumdl-0.0.92}/.mise.toml +0 -0
  23. {rumdl-0.0.91 → rumdl-0.0.92}/.rumdl.toml +0 -0
  24. {rumdl-0.0.91 → rumdl-0.0.92}/.rustfmt.toml +0 -0
  25. {rumdl-0.0.91 → rumdl-0.0.92}/LICENSE +0 -0
  26. {rumdl-0.0.91 → rumdl-0.0.92}/MANIFEST.in +0 -0
  27. {rumdl-0.0.91 → rumdl-0.0.92}/Makefile +0 -0
  28. {rumdl-0.0.91 → rumdl-0.0.92}/assets/logo.png +0 -0
  29. {rumdl-0.0.91 → rumdl-0.0.92}/benches/fix_performance.rs +0 -0
  30. {rumdl-0.0.91 → rumdl-0.0.92}/benches/range_performance.rs +0 -0
  31. {rumdl-0.0.91 → rumdl-0.0.92}/benches/range_utils_benchmark.rs +0 -0
  32. {rumdl-0.0.91 → rumdl-0.0.92}/benches/rule_performance.rs +0 -0
  33. {rumdl-0.0.91 → rumdl-0.0.92}/benches/simple_fix_bench.rs +0 -0
  34. {rumdl-0.0.91 → rumdl-0.0.92}/docs/RULES.md +0 -0
  35. {rumdl-0.0.91 → rumdl-0.0.92}/docs/global-settings.md +0 -0
  36. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md001.md +0 -0
  37. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md002.md +0 -0
  38. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md003.md +0 -0
  39. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md004.md +0 -0
  40. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md005.md +0 -0
  41. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md006.md +0 -0
  42. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md007.md +0 -0
  43. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md009.md +0 -0
  44. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md010.md +0 -0
  45. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md011.md +0 -0
  46. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md012.md +0 -0
  47. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md013.md +0 -0
  48. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md014.md +0 -0
  49. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md018.md +0 -0
  50. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md019.md +0 -0
  51. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md020.md +0 -0
  52. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md021.md +0 -0
  53. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md022.md +0 -0
  54. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md023.md +0 -0
  55. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md024.md +0 -0
  56. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md025.md +0 -0
  57. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md026.md +0 -0
  58. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md027.md +0 -0
  59. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md028.md +0 -0
  60. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md029.md +0 -0
  61. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md030.md +0 -0
  62. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md031.md +0 -0
  63. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md032.md +0 -0
  64. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md033.md +0 -0
  65. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md034.md +0 -0
  66. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md035.md +0 -0
  67. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md036.md +0 -0
  68. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md037.md +0 -0
  69. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md038.md +0 -0
  70. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md039.md +0 -0
  71. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md040.md +0 -0
  72. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md041.md +0 -0
  73. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md042.md +0 -0
  74. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md043.md +0 -0
  75. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md044.md +0 -0
  76. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md046.md +0 -0
  77. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md047.md +0 -0
  78. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md048.md +0 -0
  79. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md049.md +0 -0
  80. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md050.md +0 -0
  81. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md051.md +0 -0
  82. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md052.md +0 -0
  83. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md053.md +0 -0
  84. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md054.md +0 -0
  85. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md055.md +0 -0
  86. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md056.md +0 -0
  87. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md057.md +0 -0
  88. {rumdl-0.0.91 → rumdl-0.0.92}/docs/md058.md +0 -0
  89. {rumdl-0.0.91 → rumdl-0.0.92}/docs/vscode-extension.md +0 -0
  90. {rumdl-0.0.91 → rumdl-0.0.92}/issues/plan-rule-parity-with-markdownlint.md +0 -0
  91. {rumdl-0.0.91 → rumdl-0.0.92}/parity_check.py +0 -0
  92. {rumdl-0.0.91 → rumdl-0.0.92}/pyproject.toml +0 -0
  93. {rumdl-0.0.91 → rumdl-0.0.92}/python/MANIFEST.in +0 -0
  94. {rumdl-0.0.91 → rumdl-0.0.92}/python/PYTHON-README.md +0 -0
  95. {rumdl-0.0.91 → rumdl-0.0.92}/python/rumdl/__init__.py +0 -0
  96. {rumdl-0.0.91 → rumdl-0.0.92}/python/rumdl/__main__.py +0 -0
  97. {rumdl-0.0.91 → rumdl-0.0.92}/python/rumdl/py.typed +0 -0
  98. {rumdl-0.0.91 → rumdl-0.0.92}/rumdl.toml.example +0 -0
  99. {rumdl-0.0.91 → rumdl-0.0.92}/rust-toolchain.toml +0 -0
  100. {rumdl-0.0.91 → rumdl-0.0.92}/scripts/extract-changelog.sh +0 -0
  101. {rumdl-0.0.91 → rumdl-0.0.92}/scripts/prepare-release.sh +0 -0
  102. {rumdl-0.0.91 → rumdl-0.0.92}/src/bin/benchmark.rs +0 -0
  103. {rumdl-0.0.91 → rumdl-0.0.92}/src/bin/file_parallel_benchmark.rs +0 -0
  104. {rumdl-0.0.91 → rumdl-0.0.92}/src/bin/measure_code_span_performance.rs +0 -0
  105. {rumdl-0.0.91 → rumdl-0.0.92}/src/init.rs +0 -0
  106. {rumdl-0.0.91 → rumdl-0.0.92}/src/inline_config.rs +0 -0
  107. {rumdl-0.0.91 → rumdl-0.0.92}/src/lib.rs +0 -0
  108. {rumdl-0.0.91 → rumdl-0.0.92}/src/lint_context.rs +0 -0
  109. {rumdl-0.0.91 → rumdl-0.0.92}/src/lsp/mod.rs +0 -0
  110. {rumdl-0.0.91 → rumdl-0.0.92}/src/lsp/types.rs +0 -0
  111. {rumdl-0.0.91 → rumdl-0.0.92}/src/main.rs +0 -0
  112. {rumdl-0.0.91 → rumdl-0.0.92}/src/markdownlint_config.rs +0 -0
  113. {rumdl-0.0.91 → rumdl-0.0.92}/src/output/formatters/azure.rs +0 -0
  114. {rumdl-0.0.91 → rumdl-0.0.92}/src/output/formatters/concise.rs +0 -0
  115. {rumdl-0.0.91 → rumdl-0.0.92}/src/output/formatters/github.rs +0 -0
  116. {rumdl-0.0.91 → rumdl-0.0.92}/src/output/formatters/gitlab.rs +0 -0
  117. {rumdl-0.0.91 → rumdl-0.0.92}/src/output/formatters/grouped.rs +0 -0
  118. {rumdl-0.0.91 → rumdl-0.0.92}/src/output/formatters/json.rs +0 -0
  119. {rumdl-0.0.91 → rumdl-0.0.92}/src/output/formatters/json_lines.rs +0 -0
  120. {rumdl-0.0.91 → rumdl-0.0.92}/src/output/formatters/junit.rs +0 -0
  121. {rumdl-0.0.91 → rumdl-0.0.92}/src/output/formatters/mod.rs +0 -0
  122. {rumdl-0.0.91 → rumdl-0.0.92}/src/output/formatters/pylint.rs +0 -0
  123. {rumdl-0.0.91 → rumdl-0.0.92}/src/output/formatters/sarif.rs +0 -0
  124. {rumdl-0.0.91 → rumdl-0.0.92}/src/output/formatters/text.rs +0 -0
  125. {rumdl-0.0.91 → rumdl-0.0.92}/src/output/mod.rs +0 -0
  126. {rumdl-0.0.91 → rumdl-0.0.92}/src/parallel.rs +0 -0
  127. {rumdl-0.0.91 → rumdl-0.0.92}/src/profiling.rs +0 -0
  128. {rumdl-0.0.91 → rumdl-0.0.92}/src/python.rs +0 -0
  129. {rumdl-0.0.91 → rumdl-0.0.92}/src/rule.rs +0 -0
  130. {rumdl-0.0.91 → rumdl-0.0.92}/src/rule_config.rs +0 -0
  131. {rumdl-0.0.91 → rumdl-0.0.92}/src/rule_config_serde.rs +0 -0
  132. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/blockquote_utils.rs +0 -0
  133. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/code_block_utils.rs +0 -0
  134. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/code_fence_utils.rs +0 -0
  135. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/emphasis_style.rs +0 -0
  136. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/front_matter_utils.rs +0 -0
  137. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/heading_utils.rs +0 -0
  138. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/list_utils.rs +0 -0
  139. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md001_heading_increment.rs +0 -0
  140. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md002_first_heading_h1/md002_config.rs +0 -0
  141. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md002_first_heading_h1.rs +0 -0
  142. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md003_heading_style/md003_config.rs +0 -0
  143. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md003_heading_style.rs +0 -0
  144. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md004_unordered_list_style/md004_config.rs +0 -0
  145. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md004_unordered_list_style.rs +0 -0
  146. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md005_list_indent.rs +0 -0
  147. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md006_start_bullets.rs +0 -0
  148. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md007_ul_indent/md007_config.rs +0 -0
  149. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md007_ul_indent.rs +0 -0
  150. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md009_trailing_spaces/md009_config.rs +0 -0
  151. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md009_trailing_spaces.rs +0 -0
  152. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md010_no_hard_tabs/md010_config.rs +0 -0
  153. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md010_no_hard_tabs.rs +0 -0
  154. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md011_no_reversed_links.rs +0 -0
  155. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md012_no_multiple_blanks/md012_config.rs +0 -0
  156. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md012_no_multiple_blanks.rs +0 -0
  157. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md013_line_length/md013_config.rs +0 -0
  158. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md013_line_length.rs +0 -0
  159. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md014_commands_show_output/md014_config.rs +0 -0
  160. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md014_commands_show_output.rs +0 -0
  161. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md018_no_missing_space_atx.rs +0 -0
  162. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md019_no_multiple_space_atx.rs +0 -0
  163. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
  164. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
  165. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md022_blanks_around_headings/md022_config.rs +0 -0
  166. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md022_blanks_around_headings.rs +0 -0
  167. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md023_heading_start_left.rs +0 -0
  168. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md024_no_duplicate_heading/md024_config.rs +0 -0
  169. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md024_no_duplicate_heading.rs +0 -0
  170. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md025_single_title/md025_config.rs +0 -0
  171. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md025_single_title.rs +0 -0
  172. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md026_no_trailing_punctuation/md026_config.rs +0 -0
  173. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md026_no_trailing_punctuation.rs +0 -0
  174. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
  175. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md028_no_blanks_blockquote.rs +0 -0
  176. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md029_ordered_list_prefix.rs +0 -0
  177. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md030_list_marker_space/md030_config.rs +0 -0
  178. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md030_list_marker_space.rs +0 -0
  179. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md031_blanks_around_fences.rs +0 -0
  180. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md032_blanks_around_lists.rs +0 -0
  181. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md033_no_inline_html/md033_config.rs +0 -0
  182. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md033_no_inline_html.rs +0 -0
  183. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md034_no_bare_urls.rs +0 -0
  184. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md035_hr_style/md035_config.rs +0 -0
  185. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md035_hr_style.rs +0 -0
  186. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md036_no_emphasis_only_first/md036_config.rs +0 -0
  187. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md037_spaces_around_emphasis.rs +0 -0
  188. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md038_no_space_in_code.rs +0 -0
  189. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md039_no_space_in_links.rs +0 -0
  190. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md040_fenced_code_language.rs +0 -0
  191. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md041_first_line_heading.rs +0 -0
  192. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md042_no_empty_links.rs +0 -0
  193. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md043_required_headings.rs +0 -0
  194. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md046_code_block_style/md046_config.rs +0 -0
  195. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md046_code_block_style.rs +0 -0
  196. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md047_single_trailing_newline.rs +0 -0
  197. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md048_code_fence_style/md048_config.rs +0 -0
  198. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md048_code_fence_style.rs +0 -0
  199. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md049_emphasis_style/md049_config.rs +0 -0
  200. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md049_emphasis_style.rs +0 -0
  201. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md050_strong_style/md050_config.rs +0 -0
  202. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md050_strong_style.rs +0 -0
  203. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md051_link_fragments.rs +0 -0
  204. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md052_reference_links_images.rs +0 -0
  205. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md053_link_image_reference_definitions.rs +0 -0
  206. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md054_link_image_style/md054_config.rs +0 -0
  207. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md054_link_image_style.rs +0 -0
  208. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md055_table_pipe_style/md055_config.rs +0 -0
  209. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md055_table_pipe_style.rs +0 -0
  210. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md056_table_column_count.rs +0 -0
  211. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md057_existing_relative_links/md057_config.rs +0 -0
  212. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md057_existing_relative_links.rs +0 -0
  213. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/md058_blanks_around_tables.rs +0 -0
  214. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/mod.rs +0 -0
  215. {rumdl-0.0.91 → rumdl-0.0.92}/src/rules/strong_style.rs +0 -0
  216. {rumdl-0.0.91 → rumdl-0.0.92}/src/utils/ast_utils.rs +0 -0
  217. {rumdl-0.0.91 → rumdl-0.0.92}/src/utils/code_block_utils.rs +0 -0
  218. {rumdl-0.0.91 → rumdl-0.0.92}/src/utils/document_structure.rs +0 -0
  219. {rumdl-0.0.91 → rumdl-0.0.92}/src/utils/early_returns.rs +0 -0
  220. {rumdl-0.0.91 → rumdl-0.0.92}/src/utils/element_cache.rs +0 -0
  221. {rumdl-0.0.91 → rumdl-0.0.92}/src/utils/emphasis_utils.rs +0 -0
  222. {rumdl-0.0.91 → rumdl-0.0.92}/src/utils/fix_utils.rs +0 -0
  223. {rumdl-0.0.91 → rumdl-0.0.92}/src/utils/markdown_elements.rs +0 -0
  224. {rumdl-0.0.91 → rumdl-0.0.92}/src/utils/mod.rs +0 -0
  225. {rumdl-0.0.91 → rumdl-0.0.92}/src/utils/range_utils.rs +0 -0
  226. {rumdl-0.0.91 → rumdl-0.0.92}/src/utils/regex_cache.rs +0 -0
  227. {rumdl-0.0.91 → rumdl-0.0.92}/src/utils/string_interner.rs +0 -0
  228. {rumdl-0.0.91 → rumdl-0.0.92}/src/utils/table_utils.rs +0 -0
  229. {rumdl-0.0.91 → rumdl-0.0.92}/src/vscode.rs +0 -0
  230. {rumdl-0.0.91 → rumdl-0.0.92}/tests/advanced_integration_tests.rs +0 -0
  231. {rumdl-0.0.91 → rumdl-0.0.92}/tests/character_ranges/additional_tests.rs +0 -0
  232. {rumdl-0.0.91 → rumdl-0.0.92}/tests/character_ranges/basic_tests.rs +0 -0
  233. {rumdl-0.0.91 → rumdl-0.0.92}/tests/character_ranges/comprehensive_tests.rs +0 -0
  234. {rumdl-0.0.91 → rumdl-0.0.92}/tests/character_ranges/extended_tests.rs +0 -0
  235. {rumdl-0.0.91 → rumdl-0.0.92}/tests/character_ranges/unicode_utils.rs +0 -0
  236. {rumdl-0.0.91 → rumdl-0.0.92}/tests/cli_duplication_test.rs +0 -0
  237. {rumdl-0.0.91 → rumdl-0.0.92}/tests/cli_integration_tests.rs +0 -0
  238. {rumdl-0.0.91 → rumdl-0.0.92}/tests/cli_lsp_fix_consistency.rs +0 -0
  239. {rumdl-0.0.91 → rumdl-0.0.92}/tests/cli_statistics_test.rs +0 -0
  240. {rumdl-0.0.91 → rumdl-0.0.92}/tests/commonmark_compliance_tests.rs +0 -0
  241. {rumdl-0.0.91 → rumdl-0.0.92}/tests/comprehensive_integration_tests.rs +0 -0
  242. {rumdl-0.0.91 → rumdl-0.0.92}/tests/comprehensive_output_format_tests.rs +0 -0
  243. {rumdl-0.0.91 → rumdl-0.0.92}/tests/config_application_tests.rs +0 -0
  244. {rumdl-0.0.91 → rumdl-0.0.92}/tests/config_file_command_test.rs +0 -0
  245. {rumdl-0.0.91 → rumdl-0.0.92}/tests/config_tests.rs +0 -0
  246. {rumdl-0.0.91 → rumdl-0.0.92}/tests/configuration_inheritance_tests.rs +0 -0
  247. {rumdl-0.0.91 → rumdl-0.0.92}/tests/consistency_regression_tests.rs +0 -0
  248. {rumdl-0.0.91 → rumdl-0.0.92}/tests/cross_platform_compatibility_tests.rs +0 -0
  249. {rumdl-0.0.91 → rumdl-0.0.92}/tests/final_confidence_assessment.rs +0 -0
  250. {rumdl-0.0.91 → rumdl-0.0.92}/tests/init_command_test.rs +0 -0
  251. {rumdl-0.0.91 → rumdl-0.0.92}/tests/init_tests.rs +0 -0
  252. {rumdl-0.0.91 → rumdl-0.0.92}/tests/inline_config_test.rs +0 -0
  253. {rumdl-0.0.91 → rumdl-0.0.92}/tests/integration_tests.rs +0 -0
  254. {rumdl-0.0.91 → rumdl-0.0.92}/tests/json_output_test.rs +0 -0
  255. {rumdl-0.0.91 → rumdl-0.0.92}/tests/lib.rs +0 -0
  256. {rumdl-0.0.91 → rumdl-0.0.92}/tests/lsp_editor_integration_tests.rs +0 -0
  257. {rumdl-0.0.91 → rumdl-0.0.92}/tests/lsp_integration_tests.rs +0 -0
  258. {rumdl-0.0.91 → rumdl-0.0.92}/tests/lsp_memory_leak_tests.rs +0 -0
  259. {rumdl-0.0.91 → rumdl-0.0.92}/tests/lsp_tests.rs +0 -0
  260. {rumdl-0.0.91 → rumdl-0.0.92}/tests/malformed_markdown_stress_tests.rs +0 -0
  261. {rumdl-0.0.91 → rumdl-0.0.92}/tests/markdownlint_cli_integration.rs +0 -0
  262. {rumdl-0.0.91 → rumdl-0.0.92}/tests/markdownlint_config_test.rs +0 -0
  263. {rumdl-0.0.91 → rumdl-0.0.92}/tests/markdownlintignore_test.rs +0 -0
  264. {rumdl-0.0.91 → rumdl-0.0.92}/tests/md030_edge_cases.md +0 -0
  265. {rumdl-0.0.91 → rumdl-0.0.92}/tests/output_format_integration_tests.rs +0 -0
  266. {rumdl-0.0.91 → rumdl-0.0.92}/tests/output_format_tests.rs +0 -0
  267. {rumdl-0.0.91 → rumdl-0.0.92}/tests/perf_check.rs +0 -0
  268. {rumdl-0.0.91 → rumdl-0.0.92}/tests/performance_validation_tests.rs +0 -0
  269. {rumdl-0.0.91 → rumdl-0.0.92}/tests/pyproject_config_tests.rs +0 -0
  270. {rumdl-0.0.91 → rumdl-0.0.92}/tests/real_world_repository_tests.rs +0 -0
  271. {rumdl-0.0.91 → rumdl-0.0.92}/tests/regression_prevention_tests.rs +0 -0
  272. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md001_test.rs +0 -0
  273. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md001_unicode_test.rs +0 -0
  274. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md002_test.rs +0 -0
  275. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md003_test.rs +0 -0
  276. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md004_test.rs +0 -0
  277. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md005_test.rs +0 -0
  278. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md006_test.rs +0 -0
  279. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md006_unicode_test.rs +0 -0
  280. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md007_test.rs +0 -0
  281. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md009_test.rs +0 -0
  282. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md010_test.rs +0 -0
  283. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md011_test.rs +0 -0
  284. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md012_test.rs +0 -0
  285. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md013_test.rs +0 -0
  286. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md014_test.rs +0 -0
  287. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md018_test.rs +0 -0
  288. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md019_test.rs +0 -0
  289. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md020_test.rs +0 -0
  290. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md021_test.rs +0 -0
  291. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md022_test.rs +0 -0
  292. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md023_extended_test.rs +0 -0
  293. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md023_test.rs +0 -0
  294. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md024_test.rs +0 -0
  295. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md025_test.rs +0 -0
  296. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md026_test.rs +0 -0
  297. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md027_test.rs +0 -0
  298. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md028_test.rs +0 -0
  299. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md029_test.rs +0 -0
  300. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md030_test.rs +0 -0
  301. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md031_test.rs +0 -0
  302. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md032_test.rs +0 -0
  303. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md033_extended_test.rs +0 -0
  304. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md033_test.rs +0 -0
  305. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md034_test.rs +0 -0
  306. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md035_test.rs +0 -0
  307. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md037_test.rs +0 -0
  308. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md038_test.rs +0 -0
  309. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md039_test.rs +0 -0
  310. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md040_test.rs +0 -0
  311. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md041_test.rs +0 -0
  312. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md042_test.rs +0 -0
  313. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md043_test.rs +0 -0
  314. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md044_test.rs +0 -0
  315. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md045_test.rs +0 -0
  316. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md046_test.rs +0 -0
  317. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md047_test.rs +0 -0
  318. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md048_test.rs +0 -0
  319. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md049_test.rs +0 -0
  320. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md050_test.rs +0 -0
  321. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md051_test.rs +0 -0
  322. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md052_test.rs +0 -0
  323. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md053_additional_test.rs +0 -0
  324. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md053_proptest.rs +0 -0
  325. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md053_test.rs +0 -0
  326. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md054_test.rs +0 -0
  327. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md054_unicode_test.rs +0 -0
  328. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md055_test.rs +0 -0
  329. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md056_test.rs +0 -0
  330. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md057_test.rs +0 -0
  331. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/md058_test.rs +0 -0
  332. {rumdl-0.0.91 → rumdl-0.0.92}/tests/rules/mod.rs +0 -0
  333. {rumdl-0.0.91 → rumdl-0.0.92}/tests/thread_safety_tests.rs +0 -0
  334. {rumdl-0.0.91 → rumdl-0.0.92}/tests/unicode_edge_case_tests.rs +0 -0
  335. {rumdl-0.0.91 → rumdl-0.0.92}/tests/utils/blockquote_utils_test.rs +0 -0
  336. {rumdl-0.0.91 → rumdl-0.0.92}/tests/utils/code_block_utils_extended_test.rs +0 -0
  337. {rumdl-0.0.91 → rumdl-0.0.92}/tests/utils/code_block_utils_test.rs +0 -0
  338. {rumdl-0.0.91 → rumdl-0.0.92}/tests/utils/front_matter_utils_test.rs +0 -0
  339. {rumdl-0.0.91 → rumdl-0.0.92}/tests/utils/line_index_test.rs +0 -0
  340. {rumdl-0.0.91 → rumdl-0.0.92}/tests/utils/mod.rs +0 -0
  341. {rumdl-0.0.91 → rumdl-0.0.92}/tests/utils_markdown_edge_cases.rs +0 -0
  342. {rumdl-0.0.91 → rumdl-0.0.92}/tests/utils_tests.rs +0 -0
  343. {rumdl-0.0.91 → rumdl-0.0.92}/tests/vscode_test.rs +0 -0
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.0.92] - 2025-07-02
11
+
10
12
  ## [0.0.91] - 2025-07-02
11
13
 
12
14
  ## [0.0.90] - 2025-07-01
@@ -111,7 +113,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
111
113
  ### Added
112
114
  - Initial implementation of remaining rules for markdownlint parity
113
115
 
114
- [Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.91...HEAD
116
+ [Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.92...HEAD
117
+ [0.0.92]: https://github.com/rvben/rumdl/compare/v0.0.91...v0.0.92
115
118
  [0.0.91]: https://github.com/rvben/rumdl/compare/v0.0.90...v0.0.91
116
119
  [0.0.90]: https://github.com/rvben/rumdl/compare/v0.0.89...v0.0.90
117
120
  [0.0.89]: https://github.com/rvben/rumdl/compare/v0.0.88...v0.0.89
@@ -848,6 +848,17 @@ version = "2.0.6"
848
848
  source = "registry+https://github.com/rust-lang/crates.io-index"
849
849
  checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd"
850
850
 
851
+ [[package]]
852
+ name = "io-uring"
853
+ version = "0.7.8"
854
+ source = "registry+https://github.com/rust-lang/crates.io-index"
855
+ checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013"
856
+ dependencies = [
857
+ "bitflags 2.9.1",
858
+ "cfg-if",
859
+ "libc",
860
+ ]
861
+
851
862
  [[package]]
852
863
  name = "is-terminal"
853
864
  version = "0.4.16"
@@ -1454,7 +1465,7 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
1454
1465
 
1455
1466
  [[package]]
1456
1467
  name = "rumdl"
1457
- version = "0.0.91"
1468
+ version = "0.0.92"
1458
1469
  dependencies = [
1459
1470
  "anyhow",
1460
1471
  "assert_cmd",
@@ -1785,17 +1796,19 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
1785
1796
 
1786
1797
  [[package]]
1787
1798
  name = "tokio"
1788
- version = "1.45.1"
1799
+ version = "1.46.0"
1789
1800
  source = "registry+https://github.com/rust-lang/crates.io-index"
1790
- checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779"
1801
+ checksum = "1140bb80481756a8cbe10541f37433b459c5aa1e727b4c020fbfebdc25bf3ec4"
1791
1802
  dependencies = [
1792
1803
  "backtrace",
1793
1804
  "bytes",
1805
+ "io-uring",
1794
1806
  "libc",
1795
1807
  "mio",
1796
1808
  "parking_lot",
1797
1809
  "pin-project-lite",
1798
1810
  "signal-hook-registry",
1811
+ "slab",
1799
1812
  "socket2",
1800
1813
  "tokio-macros",
1801
1814
  "windows-sys 0.52.0",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "rumdl"
3
- version = "0.0.91"
3
+ version = "0.0.92"
4
4
  edition = "2024"
5
5
  rust-version = "1.88.0"
6
6
  description = "A fast Markdown linter written in Rust (Ru(st) MarkDown Linter)"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rumdl
3
- Version: 0.0.91
3
+ Version: 0.0.92
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -48,41 +48,6 @@ Project-URL: Repository, https://github.com/rvben/rumdl.git
48
48
 
49
49
  </div>
50
50
 
51
- ## Table of Contents
52
-
53
- - [rumdl - A high-performance Markdown linter, written in Rust](#rumdl---a-high-performance-markdown-linter-written-in-rust)
54
- - [A modern Markdown linter and formatter, built for speed with Rust](#a-modern-markdown-linter-and-formatter-built-for-speed-with-rust)
55
- - [Table of Contents](#table-of-contents)
56
- - [Quick Start](#quick-start)
57
- - [Overview](#overview)
58
- - [Performance](#performance)
59
- - [Installation](#installation)
60
- - [Using Cargo (Rust)](#using-cargo-rust)
61
- - [Using pip (Python)](#using-pip-python)
62
- - [Download binary](#download-binary)
63
- - [VS Code Extension](#vs-code-extension)
64
- - [Usage](#usage)
65
- - [Pre-commit Integration](#pre-commit-integration)
66
- - [Rules](#rules)
67
- - [Command-line Interface](#command-line-interface)
68
- - [Commands](#commands)
69
- - [Usage Examples](#usage-examples)
70
- - [Configuration](#configuration)
71
- - [Configuration File Example](#configuration-file-example)
72
- - [Initializing Configuration](#initializing-configuration)
73
- - [Configuration in pyproject.toml](#configuration-in-pyprojecttoml)
74
- - [Configuration Output](#configuration-output)
75
- - [Effective Configuration (`rumdl config`)](#effective-configuration-rumdl-config)
76
- - [Example output](#example-output)
77
- - [Defaults Only (`rumdl config --defaults`)](#defaults-only-rumdl-config---defaults)
78
- - [Output Style](#output-style)
79
- - [Output Format](#output-format)
80
- - [Development](#development)
81
- - [Prerequisites](#prerequisites)
82
- - [Building](#building)
83
- - [Testing](#testing)
84
- - [License](#license)
85
-
86
51
  ## Quick Start
87
52
 
88
53
  ```bash
@@ -101,7 +66,9 @@ rumdl init
101
66
 
102
67
  ## Overview
103
68
 
104
- rumdl is a high-performance Markdown linter and fixer that helps ensure consistency and best practices in your Markdown files. It offers:
69
+ rumdl is a high-performance Markdown linter and fixer that helps ensure consistency and best practices in your Markdown files. Inspired by [ruff](https://github.com/astral-sh/ruff)'s approach to Python linting, rumdl brings similar speed and developer experience improvements to the Markdown ecosystem.
70
+
71
+ It offers:
105
72
 
106
73
  - ⚡️ **Built for speed** with Rust - significantly faster than alternatives
107
74
  - 🔍 **54 lint rules** covering common Markdown issues
@@ -113,13 +80,37 @@ rumdl is a high-performance Markdown linter and fixer that helps ensure consiste
113
80
  - 📏 **Modern CLI** with detailed error reporting
114
81
  - 🔄 **CI/CD friendly** with non-zero exit code on errors
115
82
 
116
- ## Performance
117
-
118
- rumdl is designed for speed and efficiency:
119
-
120
- ![Performance Comparison](assets/performance_overview.png)
83
+ ## Table of Contents
121
84
 
122
- rumdl is **4.3x faster** on average than markdownlint for typical markdown files, with performance improvements ranging from 3.4x to 5.4x depending on project size.
85
+ - [Quick Start](#quick-start)
86
+ - [Overview](#overview)
87
+ - [Installation](#installation)
88
+ - [Using Cargo (Rust)](#using-cargo-rust)
89
+ - [Using pip (Python)](#using-pip-python)
90
+ - [Using uv](#using-uv)
91
+ - [Download binary](#download-binary)
92
+ - [VS Code Extension](#vs-code-extension)
93
+ - [Usage](#usage)
94
+ - [Pre-commit Integration](#pre-commit-integration)
95
+ - [Rules](#rules)
96
+ - [Command-line Interface](#command-line-interface)
97
+ - [Commands](#commands)
98
+ - [Usage Examples](#usage-examples)
99
+ - [Configuration](#configuration)
100
+ - [Configuration File Example](#configuration-file-example)
101
+ - [Initializing Configuration](#initializing-configuration)
102
+ - [Configuration in pyproject.toml](#configuration-in-pyprojecttoml)
103
+ - [Configuration Output](#configuration-output)
104
+ - [Effective Configuration (`rumdl config`)](#effective-configuration-rumdl-config)
105
+ - [Example output](#example-output)
106
+ - [Defaults Only (`rumdl config --defaults`)](#defaults-only-rumdl-config---defaults)
107
+ - [Output Style](#output-style)
108
+ - [Output Format](#output-format)
109
+ - [Development](#development)
110
+ - [Prerequisites](#prerequisites)
111
+ - [Building](#building)
112
+ - [Testing](#testing)
113
+ - [License](#license)
123
114
 
124
115
  ## Installation
125
116
 
@@ -137,6 +128,18 @@ cargo install rumdl
137
128
  pip install rumdl
138
129
  ```
139
130
 
131
+ ### Using uv
132
+
133
+ For faster installation and better dependency management with [uv](https://github.com/astral-sh/uv):
134
+
135
+ ```bash
136
+ # Install directly
137
+ uv tool install rumdl
138
+
139
+ # Or run without installing
140
+ uv tool run rumdl check .
141
+ ```
142
+
140
143
  ### Download binary
141
144
 
142
145
  ```bash
@@ -164,6 +167,7 @@ rumdl vscode --force
164
167
  ```
165
168
 
166
169
  The extension provides:
170
+
167
171
  - 🔍 Real-time linting as you type
168
172
  - 💡 Quick fixes for common issues
169
173
  - 🎨 Code formatting on save
@@ -275,9 +279,11 @@ rumdl <command> [options] [file or directory...]
275
279
  Lint Markdown files and print warnings/errors (main subcommand)
276
280
 
277
281
  **Arguments:**
282
+
278
283
  - `[PATHS...]`: Files or directories to lint. If provided, these paths take precedence over include patterns
279
284
 
280
285
  **Options:**
286
+
281
287
  - `-f, --fix`: Automatically fix issues where possible
282
288
  - `-l, --list-rules`: List all available rules
283
289
  - `-d, --disable <rules>`: Disable specific rules (comma-separated)
@@ -297,6 +303,7 @@ Lint Markdown files and print warnings/errors (main subcommand)
297
303
  Create a default configuration file in the current directory
298
304
 
299
305
  **Options:**
306
+
300
307
  - `--pyproject`: Generate configuration for `pyproject.toml` instead of `.rumdl.toml`
301
308
 
302
309
  #### `import <FILE> [OPTIONS]`
@@ -304,9 +311,11 @@ Create a default configuration file in the current directory
304
311
  Import and convert markdownlint configuration files to rumdl format
305
312
 
306
313
  **Arguments:**
314
+
307
315
  - `<FILE>`: Path to markdownlint config file (JSON/YAML)
308
316
 
309
317
  **Options:**
318
+
310
319
  - `-o, --output <path>`: Output file path (default: `.rumdl.toml`)
311
320
  - `--format <format>`: Output format: `toml` or `json` (default: `toml`)
312
321
  - `--dry-run`: Show converted config without writing to file
@@ -316,6 +325,7 @@ Import and convert markdownlint configuration files to rumdl format
316
325
  Show information about a rule or list all rules
317
326
 
318
327
  **Arguments:**
328
+
319
329
  - `[rule]`: Rule name or ID (optional). If provided, shows details for that rule. If omitted, lists all available rules
320
330
 
321
331
  #### `config [OPTIONS] [COMMAND]`
@@ -323,10 +333,12 @@ Show information about a rule or list all rules
323
333
  Show configuration or query a specific key
324
334
 
325
335
  **Options:**
336
+
326
337
  - `--defaults`: Show only the default configuration values
327
338
  - `--output <format>`: Output format (e.g. `toml`, `json`)
328
339
 
329
340
  **Subcommands:**
341
+
330
342
  - `get <key>`: Query a specific config key (e.g. `global.exclude` or `MD013.line_length`)
331
343
  - `file`: Show the absolute path of the configuration file that was loaded
332
344
 
@@ -335,6 +347,7 @@ Show configuration or query a specific key
335
347
  Start the Language Server Protocol server for editor integration
336
348
 
337
349
  **Options:**
350
+
338
351
  - `--port <PORT>`: TCP port to listen on (for debugging)
339
352
  - `--stdio`: Use stdio for communication (default)
340
353
  - `-v, --verbose`: Enable verbose logging
@@ -344,6 +357,7 @@ Start the Language Server Protocol server for editor integration
344
357
  Install the rumdl VS Code extension
345
358
 
346
359
  **Options:**
360
+
347
361
  - `--force`: Force reinstall even if already installed
348
362
  - `--status`: Show installation status without installing
349
363
 
@@ -431,6 +445,7 @@ rumdl can be configured in several ways:
431
445
  rumdl provides seamless compatibility with existing markdownlint configurations:
432
446
 
433
447
  **Automatic Discovery**: rumdl automatically detects and loads markdownlint config files:
448
+
434
449
  - `.markdownlint.json` / `.markdownlint.jsonc`
435
450
  - `.markdownlint.yaml` / `.markdownlint.yml`
436
451
  - `markdownlint.json` / `markdownlint.yaml`
@@ -17,41 +17,6 @@
17
17
 
18
18
  </div>
19
19
 
20
- ## Table of Contents
21
-
22
- - [rumdl - A high-performance Markdown linter, written in Rust](#rumdl---a-high-performance-markdown-linter-written-in-rust)
23
- - [A modern Markdown linter and formatter, built for speed with Rust](#a-modern-markdown-linter-and-formatter-built-for-speed-with-rust)
24
- - [Table of Contents](#table-of-contents)
25
- - [Quick Start](#quick-start)
26
- - [Overview](#overview)
27
- - [Performance](#performance)
28
- - [Installation](#installation)
29
- - [Using Cargo (Rust)](#using-cargo-rust)
30
- - [Using pip (Python)](#using-pip-python)
31
- - [Download binary](#download-binary)
32
- - [VS Code Extension](#vs-code-extension)
33
- - [Usage](#usage)
34
- - [Pre-commit Integration](#pre-commit-integration)
35
- - [Rules](#rules)
36
- - [Command-line Interface](#command-line-interface)
37
- - [Commands](#commands)
38
- - [Usage Examples](#usage-examples)
39
- - [Configuration](#configuration)
40
- - [Configuration File Example](#configuration-file-example)
41
- - [Initializing Configuration](#initializing-configuration)
42
- - [Configuration in pyproject.toml](#configuration-in-pyprojecttoml)
43
- - [Configuration Output](#configuration-output)
44
- - [Effective Configuration (`rumdl config`)](#effective-configuration-rumdl-config)
45
- - [Example output](#example-output)
46
- - [Defaults Only (`rumdl config --defaults`)](#defaults-only-rumdl-config---defaults)
47
- - [Output Style](#output-style)
48
- - [Output Format](#output-format)
49
- - [Development](#development)
50
- - [Prerequisites](#prerequisites)
51
- - [Building](#building)
52
- - [Testing](#testing)
53
- - [License](#license)
54
-
55
20
  ## Quick Start
56
21
 
57
22
  ```bash
@@ -70,7 +35,9 @@ rumdl init
70
35
 
71
36
  ## Overview
72
37
 
73
- rumdl is a high-performance Markdown linter and fixer that helps ensure consistency and best practices in your Markdown files. It offers:
38
+ rumdl is a high-performance Markdown linter and fixer that helps ensure consistency and best practices in your Markdown files. Inspired by [ruff](https://github.com/astral-sh/ruff)'s approach to Python linting, rumdl brings similar speed and developer experience improvements to the Markdown ecosystem.
39
+
40
+ It offers:
74
41
 
75
42
  - ⚡️ **Built for speed** with Rust - significantly faster than alternatives
76
43
  - 🔍 **54 lint rules** covering common Markdown issues
@@ -82,13 +49,37 @@ rumdl is a high-performance Markdown linter and fixer that helps ensure consiste
82
49
  - 📏 **Modern CLI** with detailed error reporting
83
50
  - 🔄 **CI/CD friendly** with non-zero exit code on errors
84
51
 
85
- ## Performance
86
-
87
- rumdl is designed for speed and efficiency:
88
-
89
- ![Performance Comparison](assets/performance_overview.png)
52
+ ## Table of Contents
90
53
 
91
- rumdl is **4.3x faster** on average than markdownlint for typical markdown files, with performance improvements ranging from 3.4x to 5.4x depending on project size.
54
+ - [Quick Start](#quick-start)
55
+ - [Overview](#overview)
56
+ - [Installation](#installation)
57
+ - [Using Cargo (Rust)](#using-cargo-rust)
58
+ - [Using pip (Python)](#using-pip-python)
59
+ - [Using uv](#using-uv)
60
+ - [Download binary](#download-binary)
61
+ - [VS Code Extension](#vs-code-extension)
62
+ - [Usage](#usage)
63
+ - [Pre-commit Integration](#pre-commit-integration)
64
+ - [Rules](#rules)
65
+ - [Command-line Interface](#command-line-interface)
66
+ - [Commands](#commands)
67
+ - [Usage Examples](#usage-examples)
68
+ - [Configuration](#configuration)
69
+ - [Configuration File Example](#configuration-file-example)
70
+ - [Initializing Configuration](#initializing-configuration)
71
+ - [Configuration in pyproject.toml](#configuration-in-pyprojecttoml)
72
+ - [Configuration Output](#configuration-output)
73
+ - [Effective Configuration (`rumdl config`)](#effective-configuration-rumdl-config)
74
+ - [Example output](#example-output)
75
+ - [Defaults Only (`rumdl config --defaults`)](#defaults-only-rumdl-config---defaults)
76
+ - [Output Style](#output-style)
77
+ - [Output Format](#output-format)
78
+ - [Development](#development)
79
+ - [Prerequisites](#prerequisites)
80
+ - [Building](#building)
81
+ - [Testing](#testing)
82
+ - [License](#license)
92
83
 
93
84
  ## Installation
94
85
 
@@ -106,6 +97,18 @@ cargo install rumdl
106
97
  pip install rumdl
107
98
  ```
108
99
 
100
+ ### Using uv
101
+
102
+ For faster installation and better dependency management with [uv](https://github.com/astral-sh/uv):
103
+
104
+ ```bash
105
+ # Install directly
106
+ uv tool install rumdl
107
+
108
+ # Or run without installing
109
+ uv tool run rumdl check .
110
+ ```
111
+
109
112
  ### Download binary
110
113
 
111
114
  ```bash
@@ -133,6 +136,7 @@ rumdl vscode --force
133
136
  ```
134
137
 
135
138
  The extension provides:
139
+
136
140
  - 🔍 Real-time linting as you type
137
141
  - 💡 Quick fixes for common issues
138
142
  - 🎨 Code formatting on save
@@ -244,9 +248,11 @@ rumdl <command> [options] [file or directory...]
244
248
  Lint Markdown files and print warnings/errors (main subcommand)
245
249
 
246
250
  **Arguments:**
251
+
247
252
  - `[PATHS...]`: Files or directories to lint. If provided, these paths take precedence over include patterns
248
253
 
249
254
  **Options:**
255
+
250
256
  - `-f, --fix`: Automatically fix issues where possible
251
257
  - `-l, --list-rules`: List all available rules
252
258
  - `-d, --disable <rules>`: Disable specific rules (comma-separated)
@@ -266,6 +272,7 @@ Lint Markdown files and print warnings/errors (main subcommand)
266
272
  Create a default configuration file in the current directory
267
273
 
268
274
  **Options:**
275
+
269
276
  - `--pyproject`: Generate configuration for `pyproject.toml` instead of `.rumdl.toml`
270
277
 
271
278
  #### `import <FILE> [OPTIONS]`
@@ -273,9 +280,11 @@ Create a default configuration file in the current directory
273
280
  Import and convert markdownlint configuration files to rumdl format
274
281
 
275
282
  **Arguments:**
283
+
276
284
  - `<FILE>`: Path to markdownlint config file (JSON/YAML)
277
285
 
278
286
  **Options:**
287
+
279
288
  - `-o, --output <path>`: Output file path (default: `.rumdl.toml`)
280
289
  - `--format <format>`: Output format: `toml` or `json` (default: `toml`)
281
290
  - `--dry-run`: Show converted config without writing to file
@@ -285,6 +294,7 @@ Import and convert markdownlint configuration files to rumdl format
285
294
  Show information about a rule or list all rules
286
295
 
287
296
  **Arguments:**
297
+
288
298
  - `[rule]`: Rule name or ID (optional). If provided, shows details for that rule. If omitted, lists all available rules
289
299
 
290
300
  #### `config [OPTIONS] [COMMAND]`
@@ -292,10 +302,12 @@ Show information about a rule or list all rules
292
302
  Show configuration or query a specific key
293
303
 
294
304
  **Options:**
305
+
295
306
  - `--defaults`: Show only the default configuration values
296
307
  - `--output <format>`: Output format (e.g. `toml`, `json`)
297
308
 
298
309
  **Subcommands:**
310
+
299
311
  - `get <key>`: Query a specific config key (e.g. `global.exclude` or `MD013.line_length`)
300
312
  - `file`: Show the absolute path of the configuration file that was loaded
301
313
 
@@ -304,6 +316,7 @@ Show configuration or query a specific key
304
316
  Start the Language Server Protocol server for editor integration
305
317
 
306
318
  **Options:**
319
+
307
320
  - `--port <PORT>`: TCP port to listen on (for debugging)
308
321
  - `--stdio`: Use stdio for communication (default)
309
322
  - `-v, --verbose`: Enable verbose logging
@@ -313,6 +326,7 @@ Start the Language Server Protocol server for editor integration
313
326
  Install the rumdl VS Code extension
314
327
 
315
328
  **Options:**
329
+
316
330
  - `--force`: Force reinstall even if already installed
317
331
  - `--status`: Show installation status without installing
318
332
 
@@ -400,6 +414,7 @@ rumdl can be configured in several ways:
400
414
  rumdl provides seamless compatibility with existing markdownlint configurations:
401
415
 
402
416
  **Automatic Discovery**: rumdl automatically detects and loads markdownlint config files:
417
+
403
418
  - `.markdownlint.json` / `.markdownlint.jsonc`
404
419
  - `.markdownlint.yaml` / `.markdownlint.yml`
405
420
  - `markdownlint.json` / `markdownlint.yaml`
@@ -40,18 +40,38 @@ Ensures all images include alternative text (alt text) that describes the image
40
40
  ### 🔧 Fixed
41
41
 
42
42
  ```markdown
43
- ![Image](images/logo.png) <!-- Generic placeholder added -->
43
+ ![TODO: Add image description](images/logo.png) <!-- Default placeholder added -->
44
44
 
45
- ![Image](charts/q4-sales.png) <!-- Needs meaningful description -->
45
+ ![TODO: Add image description](charts/q4-sales.png) <!-- Needs meaningful description -->
46
46
 
47
- ![Image](screenshots/login.png) <!-- Needs meaningful description -->
47
+ ![TODO: Add image description](screenshots/login.png) <!-- Needs meaningful description -->
48
48
 
49
- ![Image](photos/team-retreat-2024.jpg) <!-- Needs meaningful description -->
49
+ ![TODO: Add image description](photos/team-retreat-2024.jpg) <!-- Needs meaningful description -->
50
50
  ```
51
51
 
52
52
  ## Configuration
53
53
 
54
- This rule has no configuration options.
54
+ ```yaml
55
+ MD045:
56
+ placeholder_text: "TODO: Add image description" # Text to insert for missing alt text
57
+ ```
58
+
59
+ ### Options
60
+
61
+ - **placeholder_text** (default: `"TODO: Add image description"`) - The text to insert when fixing images with missing alt text. You can customize this to match your team's conventions.
62
+
63
+ ### Example custom configuration
64
+
65
+ ```yaml
66
+ MD045:
67
+ placeholder_text: "FIXME: Add alt text"
68
+ ```
69
+
70
+ This would change the fix behavior to:
71
+
72
+ ```markdown
73
+ ![FIXME: Add alt text](image.jpg)
74
+ ```
55
75
 
56
76
  ## Automatic fixes
57
77
 
@@ -911,7 +911,7 @@ impl<T: Clone> SourcedValue<T> {
911
911
  new_value: T,
912
912
  new_source: ConfigSource,
913
913
  new_file: Option<String>,
914
- // TODO: Add new_line Option<usize> if needed later
914
+ new_line: Option<usize>,
915
915
  ) {
916
916
  // Helper function to get precedence, defined locally or globally
917
917
  fn source_precedence(src: ConfigSource) -> u8 {
@@ -931,7 +931,7 @@ impl<T: Clone> SourcedValue<T> {
931
931
  value: new_value,
932
932
  source: new_source,
933
933
  file: new_file,
934
- line: None, // Placeholder for now
934
+ line: new_line,
935
935
  });
936
936
  }
937
937
  }
@@ -1006,21 +1006,25 @@ impl SourcedConfig {
1006
1006
  fragment.global.enable.value,
1007
1007
  fragment.global.enable.source,
1008
1008
  fragment.global.enable.overrides.first().and_then(|o| o.file.clone()),
1009
+ fragment.global.enable.overrides.first().and_then(|o| o.line),
1009
1010
  );
1010
1011
  self.global.disable.merge_override(
1011
1012
  fragment.global.disable.value,
1012
1013
  fragment.global.disable.source,
1013
1014
  fragment.global.disable.overrides.first().and_then(|o| o.file.clone()),
1015
+ fragment.global.disable.overrides.first().and_then(|o| o.line),
1014
1016
  );
1015
1017
  self.global.include.merge_override(
1016
1018
  fragment.global.include.value,
1017
1019
  fragment.global.include.source,
1018
1020
  fragment.global.include.overrides.first().and_then(|o| o.file.clone()),
1021
+ fragment.global.include.overrides.first().and_then(|o| o.line),
1019
1022
  );
1020
1023
  self.global.exclude.merge_override(
1021
1024
  fragment.global.exclude.value,
1022
1025
  fragment.global.exclude.source,
1023
1026
  fragment.global.exclude.overrides.first().and_then(|o| o.file.clone()),
1027
+ fragment.global.exclude.overrides.first().and_then(|o| o.line),
1024
1028
  );
1025
1029
  self.global.respect_gitignore.merge_override(
1026
1030
  fragment.global.respect_gitignore.value,
@@ -1031,6 +1035,12 @@ impl SourcedConfig {
1031
1035
  .overrides
1032
1036
  .first()
1033
1037
  .and_then(|o| o.file.clone()),
1038
+ fragment
1039
+ .global
1040
+ .respect_gitignore
1041
+ .overrides
1042
+ .first()
1043
+ .and_then(|o| o.line),
1034
1044
  );
1035
1045
 
1036
1046
  // Merge output_format if present
@@ -1040,6 +1050,7 @@ impl SourcedConfig {
1040
1050
  output_format_fragment.value,
1041
1051
  output_format_fragment.source,
1042
1052
  output_format_fragment.overrides.first().and_then(|o| o.file.clone()),
1053
+ output_format_fragment.overrides.first().and_then(|o| o.line),
1043
1054
  );
1044
1055
  } else {
1045
1056
  self.global.output_format = Some(output_format_fragment);
@@ -1056,10 +1067,12 @@ impl SourcedConfig {
1056
1067
  .entry(key.clone())
1057
1068
  .or_insert_with(|| SourcedValue::new(sourced_value_fragment.value.clone(), ConfigSource::Default));
1058
1069
  let file_from_fragment = sourced_value_fragment.overrides.first().and_then(|o| o.file.clone());
1070
+ let line_from_fragment = sourced_value_fragment.overrides.first().and_then(|o| o.line);
1059
1071
  sv_entry.merge_override(
1060
1072
  sourced_value_fragment.value, // Use the value from the fragment
1061
1073
  sourced_value_fragment.source, // Use the source from the fragment
1062
1074
  file_from_fragment, // Pass the file path from the fragment override
1075
+ line_from_fragment, // Pass the line number from the fragment override
1063
1076
  );
1064
1077
  }
1065
1078
  }
@@ -1202,23 +1215,24 @@ impl SourcedConfig {
1202
1215
  sourced_config
1203
1216
  .global
1204
1217
  .enable
1205
- .merge_override(cli.enable.value.clone(), ConfigSource::Cli, None);
1218
+ .merge_override(cli.enable.value.clone(), ConfigSource::Cli, None, None);
1206
1219
  sourced_config
1207
1220
  .global
1208
1221
  .disable
1209
- .merge_override(cli.disable.value.clone(), ConfigSource::Cli, None);
1222
+ .merge_override(cli.disable.value.clone(), ConfigSource::Cli, None, None);
1210
1223
  sourced_config
1211
1224
  .global
1212
1225
  .exclude
1213
- .merge_override(cli.exclude.value.clone(), ConfigSource::Cli, None);
1226
+ .merge_override(cli.exclude.value.clone(), ConfigSource::Cli, None, None);
1214
1227
  sourced_config
1215
1228
  .global
1216
1229
  .include
1217
- .merge_override(cli.include.value.clone(), ConfigSource::Cli, None);
1230
+ .merge_override(cli.include.value.clone(), ConfigSource::Cli, None, None);
1218
1231
  sourced_config.global.respect_gitignore.merge_override(
1219
1232
  cli.respect_gitignore.value,
1220
1233
  ConfigSource::Cli,
1221
1234
  None,
1235
+ None,
1222
1236
  );
1223
1237
  // No rule-specific CLI overrides implemented yet
1224
1238
  }