rumdl 0.0.94__tar.gz → 0.0.95__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 (347) hide show
  1. {rumdl-0.0.94 → rumdl-0.0.95}/CHANGELOG.md +16 -1
  2. {rumdl-0.0.94 → rumdl-0.0.95}/Cargo.lock +18 -18
  3. {rumdl-0.0.94 → rumdl-0.0.95}/Cargo.toml +1 -1
  4. {rumdl-0.0.94 → rumdl-0.0.95}/PKG-INFO +11 -1
  5. {rumdl-0.0.94 → rumdl-0.0.95}/README.md +10 -0
  6. rumdl-0.0.95/src/exit_codes.rs +34 -0
  7. {rumdl-0.0.94 → rumdl-0.0.95}/src/lib.rs +1 -0
  8. {rumdl-0.0.94 → rumdl-0.0.95}/src/main.rs +31 -31
  9. {rumdl-0.0.94 → rumdl-0.0.95}/.config/nextest.toml +0 -0
  10. {rumdl-0.0.94 → rumdl-0.0.95}/.mise.toml +0 -0
  11. {rumdl-0.0.94 → rumdl-0.0.95}/.rumdl.toml +0 -0
  12. {rumdl-0.0.94 → rumdl-0.0.95}/.rustfmt.toml +0 -0
  13. {rumdl-0.0.94 → rumdl-0.0.95}/LICENSE +0 -0
  14. {rumdl-0.0.94 → rumdl-0.0.95}/MANIFEST.in +0 -0
  15. {rumdl-0.0.94 → rumdl-0.0.95}/Makefile +0 -0
  16. {rumdl-0.0.94 → rumdl-0.0.95}/assets/logo.png +0 -0
  17. {rumdl-0.0.94 → rumdl-0.0.95}/benches/fix_performance.rs +0 -0
  18. {rumdl-0.0.94 → rumdl-0.0.95}/benches/range_performance.rs +0 -0
  19. {rumdl-0.0.94 → rumdl-0.0.95}/benches/range_utils_benchmark.rs +0 -0
  20. {rumdl-0.0.94 → rumdl-0.0.95}/benches/rule_performance.rs +0 -0
  21. {rumdl-0.0.94 → rumdl-0.0.95}/benches/simple_fix_bench.rs +0 -0
  22. {rumdl-0.0.94 → rumdl-0.0.95}/docs/RULES.md +0 -0
  23. {rumdl-0.0.94 → rumdl-0.0.95}/docs/global-settings.md +0 -0
  24. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md001.md +0 -0
  25. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md002.md +0 -0
  26. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md003.md +0 -0
  27. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md004.md +0 -0
  28. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md005.md +0 -0
  29. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md006.md +0 -0
  30. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md007.md +0 -0
  31. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md009.md +0 -0
  32. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md010.md +0 -0
  33. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md011.md +0 -0
  34. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md012.md +0 -0
  35. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md013.md +0 -0
  36. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md014.md +0 -0
  37. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md018.md +0 -0
  38. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md019.md +0 -0
  39. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md020.md +0 -0
  40. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md021.md +0 -0
  41. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md022.md +0 -0
  42. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md023.md +0 -0
  43. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md024.md +0 -0
  44. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md025.md +0 -0
  45. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md026.md +0 -0
  46. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md027.md +0 -0
  47. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md028.md +0 -0
  48. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md029.md +0 -0
  49. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md030.md +0 -0
  50. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md031.md +0 -0
  51. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md032.md +0 -0
  52. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md033.md +0 -0
  53. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md034.md +0 -0
  54. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md035.md +0 -0
  55. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md036.md +0 -0
  56. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md037.md +0 -0
  57. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md038.md +0 -0
  58. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md039.md +0 -0
  59. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md040.md +0 -0
  60. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md041.md +0 -0
  61. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md042.md +0 -0
  62. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md043.md +0 -0
  63. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md044.md +0 -0
  64. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md045.md +0 -0
  65. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md046.md +0 -0
  66. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md047.md +0 -0
  67. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md048.md +0 -0
  68. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md049.md +0 -0
  69. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md050.md +0 -0
  70. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md051.md +0 -0
  71. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md052.md +0 -0
  72. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md053.md +0 -0
  73. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md054.md +0 -0
  74. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md055.md +0 -0
  75. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md056.md +0 -0
  76. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md057.md +0 -0
  77. {rumdl-0.0.94 → rumdl-0.0.95}/docs/md058.md +0 -0
  78. {rumdl-0.0.94 → rumdl-0.0.95}/docs/vscode-extension.md +0 -0
  79. {rumdl-0.0.94 → rumdl-0.0.95}/parity_check.py +0 -0
  80. {rumdl-0.0.94 → rumdl-0.0.95}/pyproject.toml +0 -0
  81. {rumdl-0.0.94 → rumdl-0.0.95}/python/MANIFEST.in +0 -0
  82. {rumdl-0.0.94 → rumdl-0.0.95}/python/PYTHON-README.md +0 -0
  83. {rumdl-0.0.94 → rumdl-0.0.95}/python/rumdl/__init__.py +0 -0
  84. {rumdl-0.0.94 → rumdl-0.0.95}/python/rumdl/__main__.py +0 -0
  85. {rumdl-0.0.94 → rumdl-0.0.95}/python/rumdl/py.typed +0 -0
  86. {rumdl-0.0.94 → rumdl-0.0.95}/rumdl.toml.example +0 -0
  87. {rumdl-0.0.94 → rumdl-0.0.95}/rust-toolchain.toml +0 -0
  88. {rumdl-0.0.94 → rumdl-0.0.95}/scripts/extract-changelog.sh +0 -0
  89. {rumdl-0.0.94 → rumdl-0.0.95}/scripts/prepare-release.sh +0 -0
  90. {rumdl-0.0.94 → rumdl-0.0.95}/src/bin/benchmark.rs +0 -0
  91. {rumdl-0.0.94 → rumdl-0.0.95}/src/bin/benchmark_rule.rs +0 -0
  92. {rumdl-0.0.94 → rumdl-0.0.95}/src/bin/file_parallel_benchmark.rs +0 -0
  93. {rumdl-0.0.94 → rumdl-0.0.95}/src/bin/measure_code_span_performance.rs +0 -0
  94. {rumdl-0.0.94 → rumdl-0.0.95}/src/config.rs +0 -0
  95. {rumdl-0.0.94 → rumdl-0.0.95}/src/init.rs +0 -0
  96. {rumdl-0.0.94 → rumdl-0.0.95}/src/inline_config.rs +0 -0
  97. {rumdl-0.0.94 → rumdl-0.0.95}/src/lint_context.rs +0 -0
  98. {rumdl-0.0.94 → rumdl-0.0.95}/src/lsp/mod.rs +0 -0
  99. {rumdl-0.0.94 → rumdl-0.0.95}/src/lsp/server.rs +0 -0
  100. {rumdl-0.0.94 → rumdl-0.0.95}/src/lsp/types.rs +0 -0
  101. {rumdl-0.0.94 → rumdl-0.0.95}/src/markdownlint_config.rs +0 -0
  102. {rumdl-0.0.94 → rumdl-0.0.95}/src/output/formatters/azure.rs +0 -0
  103. {rumdl-0.0.94 → rumdl-0.0.95}/src/output/formatters/concise.rs +0 -0
  104. {rumdl-0.0.94 → rumdl-0.0.95}/src/output/formatters/github.rs +0 -0
  105. {rumdl-0.0.94 → rumdl-0.0.95}/src/output/formatters/gitlab.rs +0 -0
  106. {rumdl-0.0.94 → rumdl-0.0.95}/src/output/formatters/grouped.rs +0 -0
  107. {rumdl-0.0.94 → rumdl-0.0.95}/src/output/formatters/json.rs +0 -0
  108. {rumdl-0.0.94 → rumdl-0.0.95}/src/output/formatters/json_lines.rs +0 -0
  109. {rumdl-0.0.94 → rumdl-0.0.95}/src/output/formatters/junit.rs +0 -0
  110. {rumdl-0.0.94 → rumdl-0.0.95}/src/output/formatters/mod.rs +0 -0
  111. {rumdl-0.0.94 → rumdl-0.0.95}/src/output/formatters/pylint.rs +0 -0
  112. {rumdl-0.0.94 → rumdl-0.0.95}/src/output/formatters/sarif.rs +0 -0
  113. {rumdl-0.0.94 → rumdl-0.0.95}/src/output/formatters/text.rs +0 -0
  114. {rumdl-0.0.94 → rumdl-0.0.95}/src/output/mod.rs +0 -0
  115. {rumdl-0.0.94 → rumdl-0.0.95}/src/parallel.rs +0 -0
  116. {rumdl-0.0.94 → rumdl-0.0.95}/src/performance.rs +0 -0
  117. {rumdl-0.0.94 → rumdl-0.0.95}/src/profiling.rs +0 -0
  118. {rumdl-0.0.94 → rumdl-0.0.95}/src/python.rs +0 -0
  119. {rumdl-0.0.94 → rumdl-0.0.95}/src/rule.rs +0 -0
  120. {rumdl-0.0.94 → rumdl-0.0.95}/src/rule_config.rs +0 -0
  121. {rumdl-0.0.94 → rumdl-0.0.95}/src/rule_config_serde.rs +0 -0
  122. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/blockquote_utils.rs +0 -0
  123. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/code_block_utils.rs +0 -0
  124. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/code_fence_utils.rs +0 -0
  125. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/emphasis_style.rs +0 -0
  126. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/front_matter_utils.rs +0 -0
  127. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/heading_utils.rs +0 -0
  128. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/list_utils.rs +0 -0
  129. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md001_heading_increment.rs +0 -0
  130. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md002_first_heading_h1/md002_config.rs +0 -0
  131. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md002_first_heading_h1.rs +0 -0
  132. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md003_heading_style/md003_config.rs +0 -0
  133. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md003_heading_style.rs +0 -0
  134. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md004_unordered_list_style/md004_config.rs +0 -0
  135. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md004_unordered_list_style.rs +0 -0
  136. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md005_list_indent.rs +0 -0
  137. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md006_start_bullets.rs +0 -0
  138. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md007_ul_indent/md007_config.rs +0 -0
  139. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md007_ul_indent.rs +0 -0
  140. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md009_trailing_spaces/md009_config.rs +0 -0
  141. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md009_trailing_spaces.rs +0 -0
  142. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md010_no_hard_tabs/md010_config.rs +0 -0
  143. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md010_no_hard_tabs.rs +0 -0
  144. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md011_no_reversed_links.rs +0 -0
  145. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md012_no_multiple_blanks/md012_config.rs +0 -0
  146. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md012_no_multiple_blanks.rs +0 -0
  147. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md013_line_length/md013_config.rs +0 -0
  148. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md013_line_length.rs +0 -0
  149. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md014_commands_show_output/md014_config.rs +0 -0
  150. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md014_commands_show_output.rs +0 -0
  151. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md018_no_missing_space_atx.rs +0 -0
  152. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md019_no_multiple_space_atx.rs +0 -0
  153. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
  154. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
  155. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md022_blanks_around_headings/md022_config.rs +0 -0
  156. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md022_blanks_around_headings.rs +0 -0
  157. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md023_heading_start_left.rs +0 -0
  158. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md024_no_duplicate_heading/md024_config.rs +0 -0
  159. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md024_no_duplicate_heading.rs +0 -0
  160. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md025_single_title/md025_config.rs +0 -0
  161. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md025_single_title.rs +0 -0
  162. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md026_no_trailing_punctuation/md026_config.rs +0 -0
  163. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md026_no_trailing_punctuation.rs +0 -0
  164. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
  165. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md028_no_blanks_blockquote.rs +0 -0
  166. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md029_ordered_list_prefix.rs +0 -0
  167. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md030_list_marker_space/md030_config.rs +0 -0
  168. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md030_list_marker_space.rs +0 -0
  169. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md031_blanks_around_fences.rs +0 -0
  170. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md032_blanks_around_lists.rs +0 -0
  171. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md033_no_inline_html/md033_config.rs +0 -0
  172. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md033_no_inline_html.rs +0 -0
  173. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md034_no_bare_urls.rs +0 -0
  174. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md035_hr_style/md035_config.rs +0 -0
  175. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md035_hr_style.rs +0 -0
  176. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md036_no_emphasis_only_first/md036_config.rs +0 -0
  177. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md036_no_emphasis_only_first.rs +0 -0
  178. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md037_spaces_around_emphasis.rs +0 -0
  179. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md038_no_space_in_code.rs +0 -0
  180. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md039_no_space_in_links.rs +0 -0
  181. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md040_fenced_code_language.rs +0 -0
  182. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md041_first_line_heading.rs +0 -0
  183. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md042_no_empty_links.rs +0 -0
  184. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md043_required_headings.rs +0 -0
  185. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md044_proper_names/md044_config.rs +0 -0
  186. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md044_proper_names.rs +0 -0
  187. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md045_no_alt_text/md045_config.rs +0 -0
  188. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md045_no_alt_text.rs +0 -0
  189. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md046_code_block_style/md046_config.rs +0 -0
  190. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md046_code_block_style.rs +0 -0
  191. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md047_single_trailing_newline.rs +0 -0
  192. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md048_code_fence_style/md048_config.rs +0 -0
  193. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md048_code_fence_style.rs +0 -0
  194. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md049_emphasis_style/md049_config.rs +0 -0
  195. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md049_emphasis_style.rs +0 -0
  196. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md050_strong_style/md050_config.rs +0 -0
  197. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md050_strong_style.rs +0 -0
  198. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md051_link_fragments.rs +0 -0
  199. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md052_reference_links_images.rs +0 -0
  200. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md053_link_image_reference_definitions.rs +0 -0
  201. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md054_link_image_style/md054_config.rs +0 -0
  202. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md054_link_image_style.rs +0 -0
  203. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md055_table_pipe_style/md055_config.rs +0 -0
  204. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md055_table_pipe_style.rs +0 -0
  205. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md056_table_column_count.rs +0 -0
  206. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md057_existing_relative_links/md057_config.rs +0 -0
  207. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md057_existing_relative_links.rs +0 -0
  208. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/md058_blanks_around_tables.rs +0 -0
  209. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/mod.rs +0 -0
  210. {rumdl-0.0.94 → rumdl-0.0.95}/src/rules/strong_style.rs +0 -0
  211. {rumdl-0.0.94 → rumdl-0.0.95}/src/utils/ast_utils.rs +0 -0
  212. {rumdl-0.0.94 → rumdl-0.0.95}/src/utils/code_block_utils.rs +0 -0
  213. {rumdl-0.0.94 → rumdl-0.0.95}/src/utils/document_structure.rs +0 -0
  214. {rumdl-0.0.94 → rumdl-0.0.95}/src/utils/early_returns.rs +0 -0
  215. {rumdl-0.0.94 → rumdl-0.0.95}/src/utils/element_cache.rs +0 -0
  216. {rumdl-0.0.94 → rumdl-0.0.95}/src/utils/emphasis_utils.rs +0 -0
  217. {rumdl-0.0.94 → rumdl-0.0.95}/src/utils/fix_utils.rs +0 -0
  218. {rumdl-0.0.94 → rumdl-0.0.95}/src/utils/markdown_elements.rs +0 -0
  219. {rumdl-0.0.94 → rumdl-0.0.95}/src/utils/mod.rs +0 -0
  220. {rumdl-0.0.94 → rumdl-0.0.95}/src/utils/range_utils.rs +0 -0
  221. {rumdl-0.0.94 → rumdl-0.0.95}/src/utils/regex_cache.rs +0 -0
  222. {rumdl-0.0.94 → rumdl-0.0.95}/src/utils/string_interner.rs +0 -0
  223. {rumdl-0.0.94 → rumdl-0.0.95}/src/utils/table_utils.rs +0 -0
  224. {rumdl-0.0.94 → rumdl-0.0.95}/src/vscode.rs +0 -0
  225. {rumdl-0.0.94 → rumdl-0.0.95}/tests/advanced_integration_tests.rs +0 -0
  226. {rumdl-0.0.94 → rumdl-0.0.95}/tests/character_ranges/additional_tests.rs +0 -0
  227. {rumdl-0.0.94 → rumdl-0.0.95}/tests/character_ranges/basic_tests.rs +0 -0
  228. {rumdl-0.0.94 → rumdl-0.0.95}/tests/character_ranges/comprehensive_tests.rs +0 -0
  229. {rumdl-0.0.94 → rumdl-0.0.95}/tests/character_ranges/extended_tests.rs +0 -0
  230. {rumdl-0.0.94 → rumdl-0.0.95}/tests/character_ranges/mod.rs +0 -0
  231. {rumdl-0.0.94 → rumdl-0.0.95}/tests/character_ranges/unicode_utils.rs +0 -0
  232. {rumdl-0.0.94 → rumdl-0.0.95}/tests/cli_duplication_test.rs +0 -0
  233. {rumdl-0.0.94 → rumdl-0.0.95}/tests/cli_integration_tests.rs +0 -0
  234. {rumdl-0.0.94 → rumdl-0.0.95}/tests/cli_lsp_fix_consistency.rs +0 -0
  235. {rumdl-0.0.94 → rumdl-0.0.95}/tests/cli_statistics_test.rs +0 -0
  236. {rumdl-0.0.94 → rumdl-0.0.95}/tests/commonmark_compliance_tests.rs +0 -0
  237. {rumdl-0.0.94 → rumdl-0.0.95}/tests/comprehensive_integration_tests.rs +0 -0
  238. {rumdl-0.0.94 → rumdl-0.0.95}/tests/comprehensive_output_format_tests.rs +0 -0
  239. {rumdl-0.0.94 → rumdl-0.0.95}/tests/config_application_tests.rs +0 -0
  240. {rumdl-0.0.94 → rumdl-0.0.95}/tests/config_file_command_test.rs +0 -0
  241. {rumdl-0.0.94 → rumdl-0.0.95}/tests/config_tests.rs +0 -0
  242. {rumdl-0.0.94 → rumdl-0.0.95}/tests/configuration_inheritance_tests.rs +0 -0
  243. {rumdl-0.0.94 → rumdl-0.0.95}/tests/consistency_regression_tests.rs +0 -0
  244. {rumdl-0.0.94 → rumdl-0.0.95}/tests/cross_platform_compatibility_tests.rs +0 -0
  245. {rumdl-0.0.94 → rumdl-0.0.95}/tests/final_confidence_assessment.rs +0 -0
  246. {rumdl-0.0.94 → rumdl-0.0.95}/tests/init_command_test.rs +0 -0
  247. {rumdl-0.0.94 → rumdl-0.0.95}/tests/init_tests.rs +0 -0
  248. {rumdl-0.0.94 → rumdl-0.0.95}/tests/inline_config_test.rs +0 -0
  249. {rumdl-0.0.94 → rumdl-0.0.95}/tests/integration_tests.rs +0 -0
  250. {rumdl-0.0.94 → rumdl-0.0.95}/tests/json_output_test.rs +0 -0
  251. {rumdl-0.0.94 → rumdl-0.0.95}/tests/lib.rs +0 -0
  252. {rumdl-0.0.94 → rumdl-0.0.95}/tests/lsp_editor_integration_tests.rs +0 -0
  253. {rumdl-0.0.94 → rumdl-0.0.95}/tests/lsp_integration_tests.rs +0 -0
  254. {rumdl-0.0.94 → rumdl-0.0.95}/tests/lsp_memory_leak_tests.rs +0 -0
  255. {rumdl-0.0.94 → rumdl-0.0.95}/tests/lsp_tests.rs +0 -0
  256. {rumdl-0.0.94 → rumdl-0.0.95}/tests/malformed_markdown_stress_tests.rs +0 -0
  257. {rumdl-0.0.94 → rumdl-0.0.95}/tests/markdownlint_cli_integration.rs +0 -0
  258. {rumdl-0.0.94 → rumdl-0.0.95}/tests/markdownlint_config_test.rs +0 -0
  259. {rumdl-0.0.94 → rumdl-0.0.95}/tests/markdownlintignore_test.rs +0 -0
  260. {rumdl-0.0.94 → rumdl-0.0.95}/tests/nested_code_block_test.rs +0 -0
  261. {rumdl-0.0.94 → rumdl-0.0.95}/tests/output_format_integration_tests.rs +0 -0
  262. {rumdl-0.0.94 → rumdl-0.0.95}/tests/output_format_tests.rs +0 -0
  263. {rumdl-0.0.94 → rumdl-0.0.95}/tests/perf_check.rs +0 -0
  264. {rumdl-0.0.94 → rumdl-0.0.95}/tests/performance_validation_tests.rs +0 -0
  265. {rumdl-0.0.94 → rumdl-0.0.95}/tests/pyproject_config_tests.rs +0 -0
  266. {rumdl-0.0.94 → rumdl-0.0.95}/tests/real_world_repository_tests.rs +0 -0
  267. {rumdl-0.0.94 → rumdl-0.0.95}/tests/regression_prevention_tests.rs +0 -0
  268. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md001_test.rs +0 -0
  269. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md001_unicode_test.rs +0 -0
  270. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md002_test.rs +0 -0
  271. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md003_test.rs +0 -0
  272. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md004_test.rs +0 -0
  273. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md005_test.rs +0 -0
  274. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md006_test.rs +0 -0
  275. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md006_unicode_test.rs +0 -0
  276. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md007_test.rs +0 -0
  277. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md009_test.rs +0 -0
  278. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md010_test.rs +0 -0
  279. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md011_test.rs +0 -0
  280. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md012_test.rs +0 -0
  281. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md013_test.rs +0 -0
  282. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md014_test.rs +0 -0
  283. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md018_test.rs +0 -0
  284. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md019_test.rs +0 -0
  285. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md020_test.rs +0 -0
  286. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md021_test.rs +0 -0
  287. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md022_test.rs +0 -0
  288. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md023_extended_test.rs +0 -0
  289. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md023_test.rs +0 -0
  290. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md024_test.rs +0 -0
  291. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md025_test.rs +0 -0
  292. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md026_test.rs +0 -0
  293. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md027_test.rs +0 -0
  294. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md028_test.rs +0 -0
  295. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md029_test.rs +0 -0
  296. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md030_test.rs +0 -0
  297. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md031_test.rs +0 -0
  298. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md032_test.rs +0 -0
  299. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md033_extended_test.rs +0 -0
  300. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md033_test.rs +0 -0
  301. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md034_ipv6_test.rs +0 -0
  302. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md034_test.rs +0 -0
  303. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md035_test.rs +0 -0
  304. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md036_test.rs +0 -0
  305. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md037_test.rs +0 -0
  306. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md038_nested_backticks_test.rs +0 -0
  307. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md038_test.rs +0 -0
  308. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md039_test.rs +0 -0
  309. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md040_test.rs +0 -0
  310. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md041_test.rs +0 -0
  311. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md042_test.rs +0 -0
  312. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md043_test.rs +0 -0
  313. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md044_test.rs +0 -0
  314. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md045_test.rs +0 -0
  315. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md046_test.rs +0 -0
  316. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md047_test.rs +0 -0
  317. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md048_test.rs +0 -0
  318. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md049_test.rs +0 -0
  319. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md050_test.rs +0 -0
  320. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md051_test.rs +0 -0
  321. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md051_unicode_test.rs +0 -0
  322. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md052_test.rs +0 -0
  323. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md053_additional_test.rs +0 -0
  324. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md053_proptest.rs +0 -0
  325. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md053_test.rs +0 -0
  326. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md054_test.rs +0 -0
  327. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md054_unicode_test.rs +0 -0
  328. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md055_test.rs +0 -0
  329. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md056_test.rs +0 -0
  330. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md057_test.rs +0 -0
  331. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/md058_test.rs +0 -0
  332. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules/mod.rs +0 -0
  333. {rumdl-0.0.94 → rumdl-0.0.95}/tests/rules_mod_test.rs +0 -0
  334. {rumdl-0.0.94 → rumdl-0.0.95}/tests/thread_safety_tests.rs +0 -0
  335. {rumdl-0.0.94 → rumdl-0.0.95}/tests/unicode_edge_case_tests.rs +0 -0
  336. {rumdl-0.0.94 → rumdl-0.0.95}/tests/utils/blockquote_utils_test.rs +0 -0
  337. {rumdl-0.0.94 → rumdl-0.0.95}/tests/utils/code_block_utils_extended_test.rs +0 -0
  338. {rumdl-0.0.94 → rumdl-0.0.95}/tests/utils/code_block_utils_test.rs +0 -0
  339. {rumdl-0.0.94 → rumdl-0.0.95}/tests/utils/core_utils_test.rs +0 -0
  340. {rumdl-0.0.94 → rumdl-0.0.95}/tests/utils/front_matter_utils_test.rs +0 -0
  341. {rumdl-0.0.94 → rumdl-0.0.95}/tests/utils/line_index_test.rs +0 -0
  342. {rumdl-0.0.94 → rumdl-0.0.95}/tests/utils/mod.rs +0 -0
  343. {rumdl-0.0.94 → rumdl-0.0.95}/tests/utils_markdown_edge_cases.rs +0 -0
  344. {rumdl-0.0.94 → rumdl-0.0.95}/tests/utils_tests.rs +0 -0
  345. {rumdl-0.0.94 → rumdl-0.0.95}/tests/vscode_extension_fixes.rs +0 -0
  346. {rumdl-0.0.94 → rumdl-0.0.95}/tests/vscode_test.rs +0 -0
  347. {rumdl-0.0.94 → rumdl-0.0.95}/tests/vscode_tests.rs +0 -0
@@ -7,8 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.0.95] - 2025-07-15
11
+
10
12
  ## [0.0.94] - 2025-07-04
11
13
 
14
+ ### Performance Improvements
15
+ - Implemented lazy code span loading - 3.8x speedup for 94% of rules that don't use code spans
16
+ - MD013: 34.5% faster check operations through aggressive early returns
17
+ - MD038: 14% faster by leveraging lazy code span loading
18
+ - MD044: 93.5% faster with global regex caching
19
+ - MD047: 8.3% faster using pre-computed line data
20
+ - MD053: 39.7% faster by leveraging pre-parsed reference definitions
21
+ - Overall LintContext creation improved by 11.7%
22
+
23
+ ### Fixed
24
+ - MD053: Fixed escaped character handling in reference definitions
25
+
12
26
  ## [0.0.93] - 2025-07-03
13
27
 
14
28
  ## [0.0.92] - 2025-07-02
@@ -135,7 +149,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
135
149
 
136
150
  - Initial implementation of remaining rules for markdownlint parity
137
151
 
138
- [Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.94...HEAD
152
+ [Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.95...HEAD
153
+ [0.0.95]: https://github.com/rvben/rumdl/compare/v0.0.94...v0.0.95
139
154
  [0.0.94]: https://github.com/rvben/rumdl/compare/v0.0.93...v0.0.94
140
155
  [0.0.93]: https://github.com/rvben/rumdl/compare/v0.0.92...v0.0.93
141
156
  [0.0.92]: https://github.com/rvben/rumdl/compare/v0.0.91...v0.0.92
@@ -220,9 +220,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
220
220
 
221
221
  [[package]]
222
222
  name = "cc"
223
- version = "1.2.28"
223
+ version = "1.2.29"
224
224
  source = "registry+https://github.com/rust-lang/crates.io-index"
225
- checksum = "4ad45f4f74e4e20eaa392913b7b33a7091c87e59628f4dd27888205ad888843c"
225
+ checksum = "5c1599538de2394445747c8cf7935946e3cc27e9625f889d979bfb2aaf569362"
226
226
  dependencies = [
227
227
  "shlex",
228
228
  ]
@@ -277,9 +277,9 @@ dependencies = [
277
277
 
278
278
  [[package]]
279
279
  name = "clap"
280
- version = "4.5.40"
280
+ version = "4.5.41"
281
281
  source = "registry+https://github.com/rust-lang/crates.io-index"
282
- checksum = "40b6887a1d8685cebccf115538db5c0efe625ccac9696ad45c409d96566e910f"
282
+ checksum = "be92d32e80243a54711e5d7ce823c35c41c9d929dc4ab58e1276f625841aadf9"
283
283
  dependencies = [
284
284
  "clap_builder",
285
285
  "clap_derive",
@@ -287,9 +287,9 @@ dependencies = [
287
287
 
288
288
  [[package]]
289
289
  name = "clap_builder"
290
- version = "4.5.40"
290
+ version = "4.5.41"
291
291
  source = "registry+https://github.com/rust-lang/crates.io-index"
292
- checksum = "e0c66c08ce9f0c698cbce5c0279d0bb6ac936d8674174fe48f736533b964f59e"
292
+ checksum = "707eab41e9622f9139419d573eca0900137718000c517d47da73045f54331c3d"
293
293
  dependencies = [
294
294
  "anstream",
295
295
  "anstyle",
@@ -299,9 +299,9 @@ dependencies = [
299
299
 
300
300
  [[package]]
301
301
  name = "clap_derive"
302
- version = "4.5.40"
302
+ version = "4.5.41"
303
303
  source = "registry+https://github.com/rust-lang/crates.io-index"
304
- checksum = "d2c7947ae4cc3d851207c1adb5b5e260ff0cca11446b1d6d1423788e442257ce"
304
+ checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491"
305
305
  dependencies = [
306
306
  "heck",
307
307
  "proc-macro2",
@@ -1004,9 +1004,9 @@ checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
1004
1004
 
1005
1005
  [[package]]
1006
1006
  name = "memmap2"
1007
- version = "0.9.5"
1007
+ version = "0.9.7"
1008
1008
  source = "registry+https://github.com/rust-lang/crates.io-index"
1009
- checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f"
1009
+ checksum = "483758ad303d734cec05e5c12b41d7e93e6a6390c5e9dae6bdeb7c1259012d28"
1010
1010
  dependencies = [
1011
1011
  "libc",
1012
1012
  ]
@@ -1465,7 +1465,7 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
1465
1465
 
1466
1466
  [[package]]
1467
1467
  name = "rumdl"
1468
- version = "0.0.94"
1468
+ version = "0.0.95"
1469
1469
  dependencies = [
1470
1470
  "anyhow",
1471
1471
  "assert_cmd",
@@ -1522,15 +1522,15 @@ checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f"
1522
1522
 
1523
1523
  [[package]]
1524
1524
  name = "rustix"
1525
- version = "1.0.7"
1525
+ version = "1.0.8"
1526
1526
  source = "registry+https://github.com/rust-lang/crates.io-index"
1527
- checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266"
1527
+ checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8"
1528
1528
  dependencies = [
1529
1529
  "bitflags 2.9.1",
1530
1530
  "errno",
1531
1531
  "libc",
1532
1532
  "linux-raw-sys",
1533
- "windows-sys 0.59.0",
1533
+ "windows-sys 0.60.2",
1534
1534
  ]
1535
1535
 
1536
1536
  [[package]]
@@ -1796,9 +1796,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
1796
1796
 
1797
1797
  [[package]]
1798
1798
  name = "tokio"
1799
- version = "1.46.0"
1799
+ version = "1.46.1"
1800
1800
  source = "registry+https://github.com/rust-lang/crates.io-index"
1801
- checksum = "1140bb80481756a8cbe10541f37433b459c5aa1e727b4c020fbfebdc25bf3ec4"
1801
+ checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17"
1802
1802
  dependencies = [
1803
1803
  "backtrace",
1804
1804
  "bytes",
@@ -2394,9 +2394,9 @@ checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
2394
2394
 
2395
2395
  [[package]]
2396
2396
  name = "winnow"
2397
- version = "0.7.11"
2397
+ version = "0.7.12"
2398
2398
  source = "registry+https://github.com/rust-lang/crates.io-index"
2399
- checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd"
2399
+ checksum = "f3edebf492c8125044983378ecb5766203ad3b4c2f7a922bd7dd207f6d443e95"
2400
2400
  dependencies = [
2401
2401
  "memchr",
2402
2402
  ]
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "rumdl"
3
- version = "0.0.94"
3
+ version = "0.0.95"
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.94
3
+ Version: 0.0.95
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -375,6 +375,16 @@ These options are available for all commands:
375
375
  - `--config <file>`: Path to configuration file
376
376
  - `--no-config`: Ignore all configuration files and use built-in defaults
377
377
 
378
+ ### Exit Codes
379
+
380
+ rumdl uses exit codes following Ruff's convention for easy CI/CD integration:
381
+
382
+ - `0`: Success - no issues found
383
+ - `1`: Linting violations found
384
+ - `2`: Tool error (configuration error, file access error, invalid arguments, etc.)
385
+
386
+ This allows scripts and CI/CD systems to distinguish between "the tool found problems in your files" (exit 1) and "the tool couldn't run properly" (exit 2).
387
+
378
388
  ### Usage Examples
379
389
 
380
390
  ```bash
@@ -344,6 +344,16 @@ These options are available for all commands:
344
344
  - `--config <file>`: Path to configuration file
345
345
  - `--no-config`: Ignore all configuration files and use built-in defaults
346
346
 
347
+ ### Exit Codes
348
+
349
+ rumdl uses exit codes following Ruff's convention for easy CI/CD integration:
350
+
351
+ - `0`: Success - no issues found
352
+ - `1`: Linting violations found
353
+ - `2`: Tool error (configuration error, file access error, invalid arguments, etc.)
354
+
355
+ This allows scripts and CI/CD systems to distinguish between "the tool found problems in your files" (exit 1) and "the tool couldn't run properly" (exit 2).
356
+
347
357
  ### Usage Examples
348
358
 
349
359
  ```bash
@@ -0,0 +1,34 @@
1
+ /// Exit codes for rumdl, following Ruff's convention
2
+ ///
3
+ /// These exit codes allow users and CI/CD systems to distinguish between
4
+ /// different types of failures.
5
+ pub mod exit_codes {
6
+ /// Success - No issues found or all issues were fixed
7
+ pub const SUCCESS: i32 = 0;
8
+
9
+ /// Linting issues found - One or more Markdown violations detected
10
+ pub const VIOLATIONS_FOUND: i32 = 1;
11
+
12
+ /// Tool error - Configuration error, file access error, or internal error
13
+ pub const TOOL_ERROR: i32 = 2;
14
+ }
15
+
16
+ /// Helper functions for consistent exit behavior
17
+ pub mod exit {
18
+ use super::exit_codes;
19
+
20
+ /// Exit with success code (0)
21
+ pub fn success() -> ! {
22
+ std::process::exit(exit_codes::SUCCESS);
23
+ }
24
+
25
+ /// Exit with violations found code (1)
26
+ pub fn violations_found() -> ! {
27
+ std::process::exit(exit_codes::VIOLATIONS_FOUND);
28
+ }
29
+
30
+ /// Exit with tool error code (2)
31
+ pub fn tool_error() -> ! {
32
+ std::process::exit(exit_codes::TOOL_ERROR);
33
+ }
34
+ }
@@ -1,4 +1,5 @@
1
1
  pub mod config;
2
+ pub mod exit_codes;
2
3
  pub mod init;
3
4
  pub mod inline_config;
4
5
  pub mod lint_context;
@@ -9,12 +9,12 @@ use std::error::Error;
9
9
  use std::fs;
10
10
  use std::io::{self, Read, Write};
11
11
  use std::path::Path;
12
- use std::process;
13
12
  use std::str::FromStr;
14
13
  use std::sync::Arc;
15
14
  use std::time::Instant;
16
15
 
17
16
  use rumdl::config as rumdl_config;
17
+ use rumdl::exit_codes::exit;
18
18
  use rumdl::lint_context::LintContext;
19
19
  use rumdl::rule::Rule;
20
20
  use rumdl::rules::code_block_utils::CodeBlockStyle;
@@ -84,7 +84,7 @@ fn load_config_with_cli_error_handling_with_dir(
84
84
  Ok(config) => config,
85
85
  Err(e) => {
86
86
  eprintln!("{}: {}", "Config error".red().bold(), e);
87
- std::process::exit(1);
87
+ exit::tool_error();
88
88
  }
89
89
  }
90
90
  }
@@ -990,13 +990,13 @@ fn main() -> Result<(), Box<dyn Error>> {
990
990
  "Error".red().bold(),
991
991
  e
992
992
  );
993
- std::process::exit(1);
993
+ exit::tool_error();
994
994
  }
995
995
  }
996
996
  }
997
997
  Err(e) => {
998
998
  eprintln!("{}: Failed to read pyproject.toml: {}", "Error".red().bold(), e);
999
- std::process::exit(1);
999
+ exit::tool_error();
1000
1000
  }
1001
1001
  }
1002
1002
  } else {
@@ -1017,7 +1017,7 @@ build-backend = \"setuptools.build_meta\"
1017
1017
  }
1018
1018
  Err(e) => {
1019
1019
  eprintln!("{}: Failed to create pyproject.toml: {}", "Error".red().bold(), e);
1020
- std::process::exit(1);
1020
+ exit::tool_error();
1021
1021
  }
1022
1022
  }
1023
1023
  }
@@ -1033,7 +1033,7 @@ build-backend = \"setuptools.build_meta\"
1033
1033
  }
1034
1034
  Err(e) => {
1035
1035
  eprintln!("{}: Failed to create config file: {}", "Error".red().bold(), e);
1036
- std::process::exit(1);
1036
+ exit::tool_error();
1037
1037
  }
1038
1038
  }
1039
1039
  }
@@ -1116,7 +1116,7 @@ build-backend = \"setuptools.build_meta\"
1116
1116
  );
1117
1117
  } else {
1118
1118
  eprintln!("Rule '{rule_query}' not found.");
1119
- std::process::exit(1);
1119
+ exit::tool_error();
1120
1120
  }
1121
1121
  } else {
1122
1122
  println!("Available rules:");
@@ -1145,7 +1145,7 @@ build-backend = \"setuptools.build_meta\"
1145
1145
  Ok(s) => s,
1146
1146
  Err(e) => {
1147
1147
  eprintln!("{}: {}", "Config error".red().bold(), e);
1148
- std::process::exit(1);
1148
+ exit::tool_error();
1149
1149
  }
1150
1150
  };
1151
1151
  // 2. Convert to final Config once
@@ -1233,7 +1233,7 @@ build-backend = \"setuptools.build_meta\"
1233
1233
  // Successfully handled 'get', exit the command processing
1234
1234
  } else {
1235
1235
  eprintln!("Unknown global key: {field_part}");
1236
- std::process::exit(1);
1236
+ exit::tool_error();
1237
1237
  }
1238
1238
  }
1239
1239
  // Handle RULE keys (MDxxx.field)
@@ -1276,12 +1276,12 @@ build-backend = \"setuptools.build_meta\"
1276
1276
  }
1277
1277
  }
1278
1278
  eprintln!("Unknown config key: {normalized_rule_name}.{normalized_field}");
1279
- std::process::exit(1);
1279
+ exit::tool_error();
1280
1280
  }
1281
1281
  }
1282
1282
  } else {
1283
1283
  eprintln!("Key must be in the form global.key or MDxxx.key");
1284
- std::process::exit(1);
1284
+ exit::tool_error();
1285
1285
  }
1286
1286
  }
1287
1287
  // Handle 'config file' subcommand for showing config file path
@@ -1374,7 +1374,7 @@ build-backend = \"setuptools.build_meta\"
1374
1374
  Ok(s) => println!("{s}"),
1375
1375
  Err(e) => {
1376
1376
  eprintln!("Failed to serialize config to TOML: {e}");
1377
- std::process::exit(1);
1377
+ exit::tool_error();
1378
1378
  }
1379
1379
  }
1380
1380
  } else {
@@ -1383,7 +1383,7 @@ build-backend = \"setuptools.build_meta\"
1383
1383
  Ok(s) => println!("{s}"),
1384
1384
  Err(e) => {
1385
1385
  eprintln!("Failed to serialize config to TOML: {e}");
1386
- std::process::exit(1);
1386
+ exit::tool_error();
1387
1387
  }
1388
1388
  }
1389
1389
  }
@@ -1413,7 +1413,7 @@ build-backend = \"setuptools.build_meta\"
1413
1413
  // TCP mode for debugging
1414
1414
  if let Err(e) = rumdl::lsp::start_tcp_server(*port).await {
1415
1415
  eprintln!("Failed to start LSP server on port {port}: {e}");
1416
- std::process::exit(1);
1416
+ exit::tool_error();
1417
1417
  }
1418
1418
  } else {
1419
1419
  // Standard LSP mode over stdio (default behavior)
@@ -1421,7 +1421,7 @@ build-backend = \"setuptools.build_meta\"
1421
1421
  let _ = stdio; // Suppress unused variable warning
1422
1422
  if let Err(e) = rumdl::lsp::start_server().await {
1423
1423
  eprintln!("Failed to start LSP server: {e}");
1424
- std::process::exit(1);
1424
+ exit::tool_error();
1425
1425
  }
1426
1426
  }
1427
1427
  });
@@ -1439,7 +1439,7 @@ build-backend = \"setuptools.build_meta\"
1439
1439
  Ok(config) => config,
1440
1440
  Err(e) => {
1441
1441
  eprintln!("{}: {}", "Import error".red().bold(), e);
1442
- std::process::exit(1);
1442
+ exit::tool_error();
1443
1443
  }
1444
1444
  };
1445
1445
 
@@ -1620,7 +1620,7 @@ build-backend = \"setuptools.build_meta\"
1620
1620
 
1621
1621
  serde_json::to_string_pretty(&json_config).unwrap_or_else(|e| {
1622
1622
  eprintln!("{}: Failed to serialize to JSON: {}", "Error".red().bold(), e);
1623
- std::process::exit(1);
1623
+ exit::tool_error();
1624
1624
  })
1625
1625
  }
1626
1626
  _ => {
@@ -1629,7 +1629,7 @@ build-backend = \"setuptools.build_meta\"
1629
1629
  "Error".red().bold(),
1630
1630
  format
1631
1631
  );
1632
- std::process::exit(1);
1632
+ exit::tool_error();
1633
1633
  }
1634
1634
  };
1635
1635
 
@@ -1646,7 +1646,7 @@ build-backend = \"setuptools.build_meta\"
1646
1646
 
1647
1647
  if Path::new(output_path).exists() {
1648
1648
  eprintln!("{}: Output file '{}' already exists", "Error".red().bold(), output_path);
1649
- std::process::exit(1);
1649
+ exit::tool_error();
1650
1650
  }
1651
1651
 
1652
1652
  match fs::write(output_path, output_content) {
@@ -1656,7 +1656,7 @@ build-backend = \"setuptools.build_meta\"
1656
1656
  }
1657
1657
  Err(e) => {
1658
1658
  eprintln!("{}: Failed to write to '{}': {}", "Error".red().bold(), output_path, e);
1659
- std::process::exit(1);
1659
+ exit::tool_error();
1660
1660
  }
1661
1661
  }
1662
1662
  }
@@ -1667,7 +1667,7 @@ build-backend = \"setuptools.build_meta\"
1667
1667
  Ok(_) => {}
1668
1668
  Err(e) => {
1669
1669
  eprintln!("{}: {}", "Error".red().bold(), e);
1670
- std::process::exit(1);
1670
+ exit::tool_error();
1671
1671
  }
1672
1672
  }
1673
1673
  }
@@ -1707,14 +1707,14 @@ build-backend = \"setuptools.build_meta\"
1707
1707
  "{}: No files or directories specified. Please provide at least one path to lint.",
1708
1708
  "Error".red().bold()
1709
1709
  );
1710
- std::process::exit(1);
1710
+ exit::tool_error();
1711
1711
  }
1712
1712
  }
1713
1713
  }
1714
1714
  });
1715
1715
  if let Err(e) = result {
1716
1716
  eprintln!("[rumdl panic handler] Uncaught panic: {e:?}");
1717
- std::process::exit(1);
1717
+ exit::tool_error();
1718
1718
  } else {
1719
1719
  Ok(())
1720
1720
  }
@@ -1745,7 +1745,7 @@ fn process_stdin(rules: &[Box<dyn Rule>], args: &CheckArgs, config: &rumdl_confi
1745
1745
  Ok(fmt) => fmt,
1746
1746
  Err(e) => {
1747
1747
  eprintln!("{}: {}", "Error".red().bold(), e);
1748
- process::exit(1);
1748
+ exit::tool_error();
1749
1749
  }
1750
1750
  };
1751
1751
 
@@ -1755,7 +1755,7 @@ fn process_stdin(rules: &[Box<dyn Rule>], args: &CheckArgs, config: &rumdl_confi
1755
1755
  if !args.silent {
1756
1756
  eprintln!("Error reading from stdin: {e}");
1757
1757
  }
1758
- process::exit(1);
1758
+ exit::violations_found();
1759
1759
  }
1760
1760
 
1761
1761
  // Create a lint context for the stdin content
@@ -1828,7 +1828,7 @@ fn process_stdin(rules: &[Box<dyn Rule>], args: &CheckArgs, config: &rumdl_confi
1828
1828
 
1829
1829
  // Exit with error code if issues found
1830
1830
  if has_issues {
1831
- process::exit(1);
1831
+ exit::violations_found();
1832
1832
  }
1833
1833
  }
1834
1834
 
@@ -1888,7 +1888,7 @@ fn run_check(args: &CheckArgs, global_config_path: Option<&str>, no_config: bool
1888
1888
  Ok(fmt) => fmt,
1889
1889
  Err(e) => {
1890
1890
  eprintln!("{}: {}", "Error".red().bold(), e);
1891
- process::exit(1);
1891
+ exit::tool_error();
1892
1892
  }
1893
1893
  };
1894
1894
 
@@ -1908,7 +1908,7 @@ fn run_check(args: &CheckArgs, global_config_path: Option<&str>, no_config: bool
1908
1908
  if !args.silent {
1909
1909
  eprintln!("{}: Failed to find markdown files: {}", "Error".red().bold(), e);
1910
1910
  }
1911
- process::exit(1);
1911
+ exit::tool_error();
1912
1912
  }
1913
1913
  };
1914
1914
  if file_paths.is_empty() {
@@ -1967,7 +1967,7 @@ fn run_check(args: &CheckArgs, global_config_path: Option<&str>, no_config: bool
1967
1967
 
1968
1968
  // Exit with appropriate code
1969
1969
  if has_issues {
1970
- process::exit(1);
1970
+ exit::violations_found();
1971
1971
  }
1972
1972
  return;
1973
1973
  }
@@ -2124,7 +2124,7 @@ fn run_check(args: &CheckArgs, global_config_path: Option<&str>, no_config: bool
2124
2124
 
2125
2125
  // Exit with non-zero status if issues were found
2126
2126
  if has_issues {
2127
- std::process::exit(1);
2127
+ exit::violations_found();
2128
2128
  }
2129
2129
  }
2130
2130
 
@@ -2267,7 +2267,7 @@ fn handle_explain_command(rule_query: &str) {
2267
2267
  } else {
2268
2268
  eprintln!("{}: Rule '{}' not found.", "Error".red().bold(), rule_query);
2269
2269
  eprintln!("\nUse 'rumdl rule' to see all available rules.");
2270
- std::process::exit(1);
2270
+ exit::tool_error();
2271
2271
  }
2272
2272
  }
2273
2273
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes