rumdl 0.0.131__tar.gz → 0.0.132__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 (425) hide show
  1. {rumdl-0.0.131 → rumdl-0.0.132}/CHANGELOG.md +7 -1
  2. {rumdl-0.0.131 → rumdl-0.0.132}/Cargo.lock +33 -15
  3. {rumdl-0.0.131 → rumdl-0.0.132}/Cargo.toml +2 -1
  4. {rumdl-0.0.131 → rumdl-0.0.132}/PKG-INFO +34 -2
  5. {rumdl-0.0.131 → rumdl-0.0.132}/README.md +33 -1
  6. {rumdl-0.0.131 → rumdl-0.0.132}/src/config.rs +206 -104
  7. {rumdl-0.0.131 → rumdl-0.0.132}/src/lint_context.rs +27 -0
  8. {rumdl-0.0.131 → rumdl-0.0.132}/src/lsp/server.rs +228 -7
  9. {rumdl-0.0.131 → rumdl-0.0.132}/src/lsp/types.rs +10 -10
  10. {rumdl-0.0.131 → rumdl-0.0.132}/src/main.rs +10 -18
  11. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/heading_utils.rs +6 -5
  12. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/list_utils.rs +24 -7
  13. rumdl-0.0.132/src/rules/md011_no_reversed_links.rs +280 -0
  14. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md013_line_length/md013_config.rs +3 -18
  15. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md013_line_length.rs +29 -68
  16. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md014_commands_show_output.rs +27 -0
  17. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md030_list_marker_space.rs +70 -10
  18. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md034_no_bare_urls.rs +13 -9
  19. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md040_fenced_code_language.rs +3 -3
  20. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md041_first_line_heading.rs +22 -5
  21. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md043_required_headings.rs +27 -11
  22. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md047_single_trailing_newline.rs +79 -14
  23. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md050_strong_style.rs +3 -2
  24. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md052_reference_links_images.rs +7 -6
  25. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/fix_utils.rs +4 -18
  26. rumdl-0.0.132/src/utils/line_ending.rs +125 -0
  27. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/mod.rs +5 -8
  28. {rumdl-0.0.131 → rumdl-0.0.132}/tests/config_application_tests.rs +1 -1
  29. {rumdl-0.0.131 → rumdl-0.0.132}/tests/config_tests.rs +190 -0
  30. rumdl-0.0.132/tests/lsp_formatting_tests.rs +500 -0
  31. rumdl-0.0.132/tests/lsp_initialization_options_test.rs +295 -0
  32. {rumdl-0.0.131 → rumdl-0.0.132}/tests/lsp_integration_tests.rs +2 -3
  33. rumdl-0.0.132/tests/lsp_mkdocs_flavor_test.rs +213 -0
  34. {rumdl-0.0.131 → rumdl-0.0.132}/tests/lsp_tests.rs +8 -4
  35. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md001_test.rs +27 -0
  36. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md003_test.rs +28 -0
  37. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md011_test.rs +14 -0
  38. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md013_test.rs +56 -59
  39. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md030_test.rs +38 -0
  40. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md043_test.rs +6 -3
  41. rumdl-0.0.131/src/rules/md011_no_reversed_links.rs +0 -796
  42. {rumdl-0.0.131 → rumdl-0.0.132}/.config/nextest.toml +0 -0
  43. {rumdl-0.0.131 → rumdl-0.0.132}/.mise.toml +0 -0
  44. {rumdl-0.0.131 → rumdl-0.0.132}/.pre-commit-config.yaml +0 -0
  45. {rumdl-0.0.131 → rumdl-0.0.132}/.rumdl.toml +0 -0
  46. {rumdl-0.0.131 → rumdl-0.0.132}/.rustfmt.toml +0 -0
  47. {rumdl-0.0.131 → rumdl-0.0.132}/LICENSE +0 -0
  48. {rumdl-0.0.131 → rumdl-0.0.132}/MANIFEST.in +0 -0
  49. {rumdl-0.0.131 → rumdl-0.0.132}/Makefile +0 -0
  50. {rumdl-0.0.131 → rumdl-0.0.132}/assets/logo.png +0 -0
  51. {rumdl-0.0.131 → rumdl-0.0.132}/benches/fix_performance.rs +0 -0
  52. {rumdl-0.0.131 → rumdl-0.0.132}/benches/range_performance.rs +0 -0
  53. {rumdl-0.0.131 → rumdl-0.0.132}/benches/range_utils_benchmark.rs +0 -0
  54. {rumdl-0.0.131 → rumdl-0.0.132}/benches/rule_performance.rs +0 -0
  55. {rumdl-0.0.131 → rumdl-0.0.132}/benches/simple_fix_bench.rs +0 -0
  56. {rumdl-0.0.131 → rumdl-0.0.132}/benchmark/bin/bench_lint_context.rs +0 -0
  57. {rumdl-0.0.131 → rumdl-0.0.132}/benchmark/bin/benchmark.rs +0 -0
  58. {rumdl-0.0.131 → rumdl-0.0.132}/benchmark/bin/benchmark_rule.rs +0 -0
  59. {rumdl-0.0.131 → rumdl-0.0.132}/benchmark/bin/file_parallel_benchmark.rs +0 -0
  60. {rumdl-0.0.131 → rumdl-0.0.132}/benchmark/bin/measure_code_span_performance.rs +0 -0
  61. {rumdl-0.0.131 → rumdl-0.0.132}/docs/RULES.md +0 -0
  62. {rumdl-0.0.131 → rumdl-0.0.132}/docs/global-settings.md +0 -0
  63. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md001.md +0 -0
  64. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md002.md +0 -0
  65. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md003.md +0 -0
  66. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md004.md +0 -0
  67. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md005.md +0 -0
  68. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md006.md +0 -0
  69. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md007.md +0 -0
  70. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md009.md +0 -0
  71. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md010.md +0 -0
  72. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md011.md +0 -0
  73. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md012.md +0 -0
  74. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md013.md +0 -0
  75. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md014.md +0 -0
  76. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md018.md +0 -0
  77. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md019.md +0 -0
  78. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md020.md +0 -0
  79. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md021.md +0 -0
  80. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md022.md +0 -0
  81. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md023.md +0 -0
  82. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md024.md +0 -0
  83. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md025.md +0 -0
  84. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md026.md +0 -0
  85. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md027.md +0 -0
  86. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md028.md +0 -0
  87. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md029.md +0 -0
  88. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md030.md +0 -0
  89. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md031.md +0 -0
  90. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md032.md +0 -0
  91. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md033.md +0 -0
  92. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md034.md +0 -0
  93. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md035.md +0 -0
  94. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md036.md +0 -0
  95. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md037.md +0 -0
  96. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md038.md +0 -0
  97. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md039.md +0 -0
  98. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md040.md +0 -0
  99. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md041.md +0 -0
  100. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md042.md +0 -0
  101. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md043.md +0 -0
  102. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md044.md +0 -0
  103. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md045.md +0 -0
  104. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md046.md +0 -0
  105. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md047.md +0 -0
  106. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md048.md +0 -0
  107. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md049.md +0 -0
  108. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md050.md +0 -0
  109. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md051.md +0 -0
  110. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md052.md +0 -0
  111. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md053.md +0 -0
  112. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md054.md +0 -0
  113. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md055.md +0 -0
  114. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md056.md +0 -0
  115. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md057.md +0 -0
  116. {rumdl-0.0.131 → rumdl-0.0.132}/docs/md058.md +0 -0
  117. {rumdl-0.0.131 → rumdl-0.0.132}/docs/vscode-extension.md +0 -0
  118. {rumdl-0.0.131 → rumdl-0.0.132}/parity_check.py +0 -0
  119. {rumdl-0.0.131 → rumdl-0.0.132}/pyproject.toml +0 -0
  120. {rumdl-0.0.131 → rumdl-0.0.132}/python/MANIFEST.in +0 -0
  121. {rumdl-0.0.131 → rumdl-0.0.132}/python/PYTHON-README.md +0 -0
  122. {rumdl-0.0.131 → rumdl-0.0.132}/python/rumdl/__init__.py +0 -0
  123. {rumdl-0.0.131 → rumdl-0.0.132}/python/rumdl/__main__.py +0 -0
  124. {rumdl-0.0.131 → rumdl-0.0.132}/python/rumdl/py.typed +0 -0
  125. {rumdl-0.0.131 → rumdl-0.0.132}/rumdl.toml.example +0 -0
  126. {rumdl-0.0.131 → rumdl-0.0.132}/rust-toolchain.toml +0 -0
  127. {rumdl-0.0.131 → rumdl-0.0.132}/scripts/extract-changelog.sh +0 -0
  128. {rumdl-0.0.131 → rumdl-0.0.132}/scripts/generate-downloads-table.sh +0 -0
  129. {rumdl-0.0.131 → rumdl-0.0.132}/scripts/pre-release.sh +0 -0
  130. {rumdl-0.0.131 → rumdl-0.0.132}/scripts/prepare-release.sh +0 -0
  131. {rumdl-0.0.131 → rumdl-0.0.132}/scripts/setup-pre-commit.sh +0 -0
  132. {rumdl-0.0.131 → rumdl-0.0.132}/scripts/update-pre-commit-docs.sh +0 -0
  133. {rumdl-0.0.131 → rumdl-0.0.132}/src/exit_codes.rs +0 -0
  134. {rumdl-0.0.131 → rumdl-0.0.132}/src/inline_config.rs +0 -0
  135. {rumdl-0.0.131 → rumdl-0.0.132}/src/lib.rs +0 -0
  136. {rumdl-0.0.131 → rumdl-0.0.132}/src/lsp/mod.rs +0 -0
  137. {rumdl-0.0.131 → rumdl-0.0.132}/src/markdownlint_config.rs +0 -0
  138. {rumdl-0.0.131 → rumdl-0.0.132}/src/output/formatters/azure.rs +0 -0
  139. {rumdl-0.0.131 → rumdl-0.0.132}/src/output/formatters/concise.rs +0 -0
  140. {rumdl-0.0.131 → rumdl-0.0.132}/src/output/formatters/github.rs +0 -0
  141. {rumdl-0.0.131 → rumdl-0.0.132}/src/output/formatters/gitlab.rs +0 -0
  142. {rumdl-0.0.131 → rumdl-0.0.132}/src/output/formatters/grouped.rs +0 -0
  143. {rumdl-0.0.131 → rumdl-0.0.132}/src/output/formatters/json.rs +0 -0
  144. {rumdl-0.0.131 → rumdl-0.0.132}/src/output/formatters/json_lines.rs +0 -0
  145. {rumdl-0.0.131 → rumdl-0.0.132}/src/output/formatters/junit.rs +0 -0
  146. {rumdl-0.0.131 → rumdl-0.0.132}/src/output/formatters/mod.rs +0 -0
  147. {rumdl-0.0.131 → rumdl-0.0.132}/src/output/formatters/pylint.rs +0 -0
  148. {rumdl-0.0.131 → rumdl-0.0.132}/src/output/formatters/sarif.rs +0 -0
  149. {rumdl-0.0.131 → rumdl-0.0.132}/src/output/formatters/text.rs +0 -0
  150. {rumdl-0.0.131 → rumdl-0.0.132}/src/output/mod.rs +0 -0
  151. {rumdl-0.0.131 → rumdl-0.0.132}/src/parallel.rs +0 -0
  152. {rumdl-0.0.131 → rumdl-0.0.132}/src/performance.rs +0 -0
  153. {rumdl-0.0.131 → rumdl-0.0.132}/src/profiling.rs +0 -0
  154. {rumdl-0.0.131 → rumdl-0.0.132}/src/python.rs +0 -0
  155. {rumdl-0.0.131 → rumdl-0.0.132}/src/rule.rs +0 -0
  156. {rumdl-0.0.131 → rumdl-0.0.132}/src/rule_config.rs +0 -0
  157. {rumdl-0.0.131 → rumdl-0.0.132}/src/rule_config_serde.rs +0 -0
  158. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/blockquote_utils.rs +0 -0
  159. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/code_block_utils.rs +0 -0
  160. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/code_fence_utils.rs +0 -0
  161. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/emphasis_style.rs +0 -0
  162. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/front_matter_utils.rs +0 -0
  163. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md001_heading_increment.rs +0 -0
  164. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md002_first_heading_h1/md002_config.rs +0 -0
  165. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md002_first_heading_h1.rs +0 -0
  166. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md003_heading_style/md003_config.rs +0 -0
  167. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md003_heading_style.rs +0 -0
  168. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md004_unordered_list_style/md004_config.rs +0 -0
  169. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md004_unordered_list_style.rs +0 -0
  170. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md005_list_indent.rs +0 -0
  171. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md006_start_bullets.rs +0 -0
  172. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md007_ul_indent/md007_config.rs +0 -0
  173. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md007_ul_indent.rs +0 -0
  174. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md009_trailing_spaces/md009_config.rs +0 -0
  175. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md009_trailing_spaces.rs +0 -0
  176. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md010_no_hard_tabs/md010_config.rs +0 -0
  177. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md010_no_hard_tabs.rs +0 -0
  178. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md012_no_multiple_blanks/md012_config.rs +0 -0
  179. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md012_no_multiple_blanks.rs +0 -0
  180. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md014_commands_show_output/md014_config.rs +0 -0
  181. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md018_no_missing_space_atx.rs +0 -0
  182. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md019_no_multiple_space_atx.rs +0 -0
  183. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
  184. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
  185. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md022_blanks_around_headings/md022_config.rs +0 -0
  186. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md022_blanks_around_headings.rs +0 -0
  187. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md023_heading_start_left.rs +0 -0
  188. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md024_no_duplicate_heading/md024_config.rs +0 -0
  189. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md024_no_duplicate_heading.rs +0 -0
  190. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md025_single_title/md025_config.rs +0 -0
  191. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md025_single_title.rs +0 -0
  192. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md026_no_trailing_punctuation/md026_config.rs +0 -0
  193. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md026_no_trailing_punctuation.rs +0 -0
  194. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
  195. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md028_no_blanks_blockquote.rs +0 -0
  196. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md029_ordered_list_prefix/md029_config.rs +0 -0
  197. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md029_ordered_list_prefix.rs +0 -0
  198. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md030_list_marker_space/md030_config.rs +0 -0
  199. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md031_blanks_around_fences.rs +0 -0
  200. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md032_blanks_around_lists.rs +0 -0
  201. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md033_no_inline_html/md033_config.rs +0 -0
  202. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md033_no_inline_html.rs +0 -0
  203. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md035_hr_style/md035_config.rs +0 -0
  204. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md035_hr_style.rs +0 -0
  205. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md036_no_emphasis_only_first/md036_config.rs +0 -0
  206. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md036_no_emphasis_only_first.rs +0 -0
  207. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md037_spaces_around_emphasis.rs +0 -0
  208. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md038_no_space_in_code.rs +0 -0
  209. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md039_no_space_in_links.rs +0 -0
  210. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md042_no_empty_links.rs +0 -0
  211. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md044_proper_names/md044_config.rs +0 -0
  212. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md044_proper_names.rs +0 -0
  213. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md045_no_alt_text/md045_config.rs +0 -0
  214. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md045_no_alt_text.rs +0 -0
  215. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md046_code_block_style/md046_config.rs +0 -0
  216. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md046_code_block_style.rs +0 -0
  217. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md048_code_fence_style/md048_config.rs +0 -0
  218. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md048_code_fence_style.rs +0 -0
  219. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md049_emphasis_style/md049_config.rs +0 -0
  220. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md049_emphasis_style.rs +0 -0
  221. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md050_strong_style/md050_config.rs +0 -0
  222. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md051_link_fragments.rs +0 -0
  223. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md053_link_image_reference_definitions.rs +0 -0
  224. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md054_link_image_style/md054_config.rs +0 -0
  225. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md054_link_image_style.rs +0 -0
  226. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md055_table_pipe_style/md055_config.rs +0 -0
  227. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md055_table_pipe_style.rs +0 -0
  228. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md056_table_column_count.rs +0 -0
  229. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md057_existing_relative_links/md057_config.rs +0 -0
  230. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md057_existing_relative_links.rs +0 -0
  231. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/md058_blanks_around_tables.rs +0 -0
  232. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/mod.rs +0 -0
  233. {rumdl-0.0.131 → rumdl-0.0.132}/src/rules/strong_style.rs +0 -0
  234. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/anchor_styles/github.rs +0 -0
  235. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/anchor_styles/jekyll.rs +0 -0
  236. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/anchor_styles/kramdown.rs +0 -0
  237. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/anchor_styles/kramdown_gfm.rs +0 -0
  238. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/anchor_styles/mod.rs +0 -0
  239. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/ast_utils.rs +0 -0
  240. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/code_block_utils.rs +0 -0
  241. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/document_structure.rs +0 -0
  242. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/early_returns.rs +0 -0
  243. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/element_cache.rs +0 -0
  244. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/emphasis_utils.rs +0 -0
  245. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/header_id_utils.rs +0 -0
  246. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/kramdown_utils.rs +0 -0
  247. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/markdown_elements.rs +0 -0
  248. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/mkdocs_admonitions.rs +0 -0
  249. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/mkdocs_common.rs +0 -0
  250. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/mkdocs_critic.rs +0 -0
  251. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/mkdocs_footnotes.rs +0 -0
  252. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/mkdocs_patterns.rs +0 -0
  253. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/mkdocs_snippets.rs +0 -0
  254. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/mkdocs_tabs.rs +0 -0
  255. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/mkdocs_test_utils.rs +0 -0
  256. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/mkdocstrings_refs.rs +0 -0
  257. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/range_utils.rs +0 -0
  258. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/regex_cache.rs +0 -0
  259. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/skip_context.rs +0 -0
  260. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/string_interner.rs +0 -0
  261. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/table_utils.rs +0 -0
  262. {rumdl-0.0.131 → rumdl-0.0.132}/src/utils/text_reflow.rs +0 -0
  263. {rumdl-0.0.131 → rumdl-0.0.132}/src/vscode.rs +0 -0
  264. {rumdl-0.0.131 → rumdl-0.0.132}/tests/advanced_integration_tests.rs +0 -0
  265. {rumdl-0.0.131 → rumdl-0.0.132}/tests/character_ranges/additional_tests.rs +0 -0
  266. {rumdl-0.0.131 → rumdl-0.0.132}/tests/character_ranges/basic_tests.rs +0 -0
  267. {rumdl-0.0.131 → rumdl-0.0.132}/tests/character_ranges/comprehensive_tests.rs +0 -0
  268. {rumdl-0.0.131 → rumdl-0.0.132}/tests/character_ranges/extended_tests.rs +0 -0
  269. {rumdl-0.0.131 → rumdl-0.0.132}/tests/character_ranges/mod.rs +0 -0
  270. {rumdl-0.0.131 → rumdl-0.0.132}/tests/character_ranges/unicode_utils.rs +0 -0
  271. {rumdl-0.0.131 → rumdl-0.0.132}/tests/cli_duplication_test.rs +0 -0
  272. {rumdl-0.0.131 → rumdl-0.0.132}/tests/cli_explain_test.rs +0 -0
  273. {rumdl-0.0.131 → rumdl-0.0.132}/tests/cli_flag_precedence_test.rs +0 -0
  274. {rumdl-0.0.131 → rumdl-0.0.132}/tests/cli_integration_tests.rs +0 -0
  275. {rumdl-0.0.131 → rumdl-0.0.132}/tests/cli_lsp_fix_consistency.rs +0 -0
  276. {rumdl-0.0.131 → rumdl-0.0.132}/tests/cli_statistics_test.rs +0 -0
  277. {rumdl-0.0.131 → rumdl-0.0.132}/tests/common/cli_test_utils.rs +0 -0
  278. {rumdl-0.0.131 → rumdl-0.0.132}/tests/common/fixtures.rs +0 -0
  279. {rumdl-0.0.131 → rumdl-0.0.132}/tests/common/mod.rs +0 -0
  280. {rumdl-0.0.131 → rumdl-0.0.132}/tests/common/test_utils.rs +0 -0
  281. {rumdl-0.0.131 → rumdl-0.0.132}/tests/commonmark_compliance_tests.rs +0 -0
  282. {rumdl-0.0.131 → rumdl-0.0.132}/tests/comprehensive_integration_tests.rs +0 -0
  283. {rumdl-0.0.131 → rumdl-0.0.132}/tests/comprehensive_output_format_tests.rs +0 -0
  284. {rumdl-0.0.131 → rumdl-0.0.132}/tests/config_file_command_test.rs +0 -0
  285. {rumdl-0.0.131 → rumdl-0.0.132}/tests/config_upward_traversal_test.rs +0 -0
  286. {rumdl-0.0.131 → rumdl-0.0.132}/tests/configuration_inheritance_tests.rs +0 -0
  287. {rumdl-0.0.131 → rumdl-0.0.132}/tests/consistency_regression_tests.rs +0 -0
  288. {rumdl-0.0.131 → rumdl-0.0.132}/tests/cross_platform_compatibility_tests.rs +0 -0
  289. {rumdl-0.0.131 → rumdl-0.0.132}/tests/deeply_nested_lists_performance_test.rs +0 -0
  290. {rumdl-0.0.131 → rumdl-0.0.132}/tests/escaped_brackets_test.rs +0 -0
  291. {rumdl-0.0.131 → rumdl-0.0.132}/tests/final_confidence_assessment.rs +0 -0
  292. {rumdl-0.0.131 → rumdl-0.0.132}/tests/fixable_unfixable_config_test.rs +0 -0
  293. {rumdl-0.0.131 → rumdl-0.0.132}/tests/init_command_test.rs +0 -0
  294. {rumdl-0.0.131 → rumdl-0.0.132}/tests/init_tests.rs +0 -0
  295. {rumdl-0.0.131 → rumdl-0.0.132}/tests/inline_config_blocks_test.rs +0 -0
  296. {rumdl-0.0.131 → rumdl-0.0.132}/tests/inline_config_test.rs +0 -0
  297. {rumdl-0.0.131 → rumdl-0.0.132}/tests/integration_tests.rs +0 -0
  298. {rumdl-0.0.131 → rumdl-0.0.132}/tests/json_output_test.rs +0 -0
  299. {rumdl-0.0.131 → rumdl-0.0.132}/tests/kramdown_integration_test.rs +0 -0
  300. {rumdl-0.0.131 → rumdl-0.0.132}/tests/lib.rs +0 -0
  301. {rumdl-0.0.131 → rumdl-0.0.132}/tests/lsp_editor_integration_tests.rs +0 -0
  302. {rumdl-0.0.131 → rumdl-0.0.132}/tests/lsp_memory_leak_tests.rs +0 -0
  303. {rumdl-0.0.131 → rumdl-0.0.132}/tests/malformed_markdown_stress_tests.rs +0 -0
  304. {rumdl-0.0.131 → rumdl-0.0.132}/tests/markdownlint_cli_integration.rs +0 -0
  305. {rumdl-0.0.131 → rumdl-0.0.132}/tests/markdownlint_config_test.rs +0 -0
  306. {rumdl-0.0.131 → rumdl-0.0.132}/tests/markdownlintignore_test.rs +0 -0
  307. {rumdl-0.0.131 → rumdl-0.0.132}/tests/md013_reflow_integration_test.rs +0 -0
  308. {rumdl-0.0.131 → rumdl-0.0.132}/tests/md051_issue_39_regression_test.rs +0 -0
  309. {rumdl-0.0.131 → rumdl-0.0.132}/tests/nested_code_block_test.rs +0 -0
  310. {rumdl-0.0.131 → rumdl-0.0.132}/tests/output_format_integration_tests.rs +0 -0
  311. {rumdl-0.0.131 → rumdl-0.0.132}/tests/output_format_tests.rs +0 -0
  312. {rumdl-0.0.131 → rumdl-0.0.132}/tests/perf_check.rs +0 -0
  313. {rumdl-0.0.131 → rumdl-0.0.132}/tests/performance_validation_tests.rs +0 -0
  314. {rumdl-0.0.131 → rumdl-0.0.132}/tests/pyproject_config_tests.rs +0 -0
  315. {rumdl-0.0.131 → rumdl-0.0.132}/tests/python_bindings_test.rs +0 -0
  316. {rumdl-0.0.131 → rumdl-0.0.132}/tests/real_world_repository_tests.rs +0 -0
  317. {rumdl-0.0.131 → rumdl-0.0.132}/tests/regression_prevention_tests.rs +0 -0
  318. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/emphasis_edge_cases_test.rs +0 -0
  319. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/heading_edge_cases_test.rs +0 -0
  320. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/inline_content_edge_cases_test.rs +0 -0
  321. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/link_edge_cases_test.rs +0 -0
  322. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/list_rules_integration_test.rs +0 -0
  323. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md001_unicode_test.rs +0 -0
  324. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md002_test.rs +0 -0
  325. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md004_test.rs +0 -0
  326. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md005_dynamic_indent_test.rs +0 -0
  327. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md005_test.rs +0 -0
  328. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md005_unicode_test.rs +0 -0
  329. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md006_test.rs +0 -0
  330. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md006_unicode_test.rs +0 -0
  331. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md007_test.rs +0 -0
  332. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md009_test.rs +0 -0
  333. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md010_test.rs +0 -0
  334. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md012_test.rs +0 -0
  335. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md014_test.rs +0 -0
  336. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md018_test.rs +0 -0
  337. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md019_test.rs +0 -0
  338. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md020_test.rs +0 -0
  339. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md021_test.rs +0 -0
  340. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md022_test.rs +0 -0
  341. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md023_extended_test.rs +0 -0
  342. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md023_test.rs +0 -0
  343. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md024_test.rs +0 -0
  344. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md025_test.rs +0 -0
  345. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md026_kramdown_test.rs +0 -0
  346. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md026_test.rs +0 -0
  347. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md027_test.rs +0 -0
  348. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md028_test.rs +0 -0
  349. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md029_code_block_separation_test.rs +0 -0
  350. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md029_fix_test.rs +0 -0
  351. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md029_issue42_test.rs +0 -0
  352. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md029_markdownlint_parity_test.rs +0 -0
  353. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md029_pathological_edge_cases_test.rs +0 -0
  354. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md029_test.rs +0 -0
  355. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md029_unicode_test.rs +0 -0
  356. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md031_kramdown_test.rs +0 -0
  357. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md031_test.rs +0 -0
  358. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md032_test.rs +0 -0
  359. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md033_extended_test.rs +0 -0
  360. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md033_kramdown_test.rs +0 -0
  361. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md033_test.rs +0 -0
  362. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md034_ipv6_test.rs +0 -0
  363. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md034_test.rs +0 -0
  364. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md035_test.rs +0 -0
  365. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md036_test.rs +0 -0
  366. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md037_kramdown_test.rs +0 -0
  367. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md037_test.rs +0 -0
  368. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md038_nested_backticks_test.rs +0 -0
  369. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md038_test.rs +0 -0
  370. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md039_test.rs +0 -0
  371. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md040_test.rs +0 -0
  372. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md041_test.rs +0 -0
  373. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md042_test.rs +0 -0
  374. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md044_test.rs +0 -0
  375. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md045_test.rs +0 -0
  376. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md046_test.rs +0 -0
  377. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md047_test.rs +0 -0
  378. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md048_test.rs +0 -0
  379. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md049_test.rs +0 -0
  380. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md050_test.rs +0 -0
  381. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md051_comprehensive_test.rs +0 -0
  382. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md051_critical_edge_cases_test.rs +0 -0
  383. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md051_edge_cases_test.rs +0 -0
  384. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md051_issue_39_regression_test.rs +0 -0
  385. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md051_performance_edge_cases_test.rs +0 -0
  386. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md051_property_based_test.rs +0 -0
  387. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md051_regression_prevention_test.rs +0 -0
  388. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md051_test.rs +0 -0
  389. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md051_unicode_security_test.rs +0 -0
  390. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md052_test.rs +0 -0
  391. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md053_additional_test.rs +0 -0
  392. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md053_proptest.rs +0 -0
  393. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md053_test.rs +0 -0
  394. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md054_test.rs +0 -0
  395. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md054_unicode_test.rs +0 -0
  396. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md055_test.rs +0 -0
  397. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md056_test.rs +0 -0
  398. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md057_test.rs +0 -0
  399. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md058_kramdown_test.rs +0 -0
  400. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/md058_test.rs +0 -0
  401. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/mkdocs_admonitions_test.rs +0 -0
  402. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/mkdocs_edge_cases_test.rs +0 -0
  403. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/mkdocs_extensions_test.rs +0 -0
  404. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/mkdocs_snippets_test.rs +0 -0
  405. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules/mod.rs +0 -0
  406. {rumdl-0.0.131 → rumdl-0.0.132}/tests/rules_mod_test.rs +0 -0
  407. {rumdl-0.0.131 → rumdl-0.0.132}/tests/skip_context_tests.rs +0 -0
  408. {rumdl-0.0.131 → rumdl-0.0.132}/tests/test_underscore_edge_cases.rs +0 -0
  409. {rumdl-0.0.131 → rumdl-0.0.132}/tests/thread_safety_tests.rs +0 -0
  410. {rumdl-0.0.131 → rumdl-0.0.132}/tests/unfixable_rules_test.rs +0 -0
  411. {rumdl-0.0.131 → rumdl-0.0.132}/tests/unicode_edge_case_tests.rs +0 -0
  412. {rumdl-0.0.131 → rumdl-0.0.132}/tests/utils/blockquote_utils_test.rs +0 -0
  413. {rumdl-0.0.131 → rumdl-0.0.132}/tests/utils/code_block_utils_extended_test.rs +0 -0
  414. {rumdl-0.0.131 → rumdl-0.0.132}/tests/utils/code_block_utils_test.rs +0 -0
  415. {rumdl-0.0.131 → rumdl-0.0.132}/tests/utils/core_utils_test.rs +0 -0
  416. {rumdl-0.0.131 → rumdl-0.0.132}/tests/utils/front_matter_utils_test.rs +0 -0
  417. {rumdl-0.0.131 → rumdl-0.0.132}/tests/utils/line_index_test.rs +0 -0
  418. {rumdl-0.0.131 → rumdl-0.0.132}/tests/utils/mod.rs +0 -0
  419. {rumdl-0.0.131 → rumdl-0.0.132}/tests/utils_markdown_edge_cases.rs +0 -0
  420. {rumdl-0.0.131 → rumdl-0.0.132}/tests/utils_tests.rs +0 -0
  421. {rumdl-0.0.131 → rumdl-0.0.132}/tests/vscode_extension_fixes.rs +0 -0
  422. {rumdl-0.0.131 → rumdl-0.0.132}/tests/vscode_test.rs +0 -0
  423. {rumdl-0.0.131 → rumdl-0.0.132}/tests/vscode_tests.rs +0 -0
  424. {rumdl-0.0.131 → rumdl-0.0.132}/tests/vscode_windows_comprehensive_test.rs +0 -0
  425. {rumdl-0.0.131 → rumdl-0.0.132}/tests/vscode_windows_test.rs +0 -0
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.0.132] - 2025-08-30
11
+
12
+ ### Added
13
+ - **LSP**: Added "Fix all rumdl issues" code action for bulk fixes when multiple fixable diagnostics are present
14
+
10
15
  ## [0.0.131] - 2025-08-28
11
16
 
12
17
  ### Fixed
@@ -514,7 +519,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
514
519
 
515
520
  - Initial implementation of remaining rules for markdownlint parity
516
521
 
517
- [Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.131...HEAD
522
+ [Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.132...HEAD
523
+ [0.0.132]: https://github.com/rvben/rumdl/compare/v0.0.131...v0.0.132
518
524
  [0.0.131]: https://github.com/rvben/rumdl/compare/v0.0.130...v0.0.131
519
525
  [0.0.130]: https://github.com/rvben/rumdl/compare/v0.0.129...v0.0.130
520
526
  [0.0.129]: https://github.com/rvben/rumdl/compare/v0.0.128...v0.0.129
@@ -505,6 +505,17 @@ dependencies = [
505
505
  "windows-sys 0.60.2",
506
506
  ]
507
507
 
508
+ [[package]]
509
+ name = "etcetera"
510
+ version = "0.8.0"
511
+ source = "registry+https://github.com/rust-lang/crates.io-index"
512
+ checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943"
513
+ dependencies = [
514
+ "cfg-if",
515
+ "home",
516
+ "windows-sys 0.48.0",
517
+ ]
518
+
508
519
  [[package]]
509
520
  name = "fancy-regex"
510
521
  version = "0.14.0"
@@ -646,9 +657,9 @@ dependencies = [
646
657
 
647
658
  [[package]]
648
659
  name = "getopts"
649
- version = "0.2.23"
660
+ version = "0.2.24"
650
661
  source = "registry+https://github.com/rust-lang/crates.io-index"
651
- checksum = "cba6ae63eb948698e300f645f87c70f76630d505f23b8907cf1e193ee85048c1"
662
+ checksum = "cfe4fbac503b8d1f88e6676011885f34b7174f46e59956bba534ba83abded4df"
652
663
  dependencies = [
653
664
  "unicode-width",
654
665
  ]
@@ -662,7 +673,7 @@ dependencies = [
662
673
  "cfg-if",
663
674
  "libc",
664
675
  "r-efi",
665
- "wasi 0.14.2+wasi-0.2.4",
676
+ "wasi 0.14.3+wasi-0.2.4",
666
677
  ]
667
678
 
668
679
  [[package]]
@@ -718,6 +729,15 @@ version = "0.5.2"
718
729
  source = "registry+https://github.com/rust-lang/crates.io-index"
719
730
  checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c"
720
731
 
732
+ [[package]]
733
+ name = "home"
734
+ version = "0.5.11"
735
+ source = "registry+https://github.com/rust-lang/crates.io-index"
736
+ checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf"
737
+ dependencies = [
738
+ "windows-sys 0.59.0",
739
+ ]
740
+
721
741
  [[package]]
722
742
  name = "httparse"
723
743
  version = "1.10.1"
@@ -1319,9 +1339,9 @@ dependencies = [
1319
1339
 
1320
1340
  [[package]]
1321
1341
  name = "potential_utf"
1322
- version = "0.1.2"
1342
+ version = "0.1.3"
1323
1343
  source = "registry+https://github.com/rust-lang/crates.io-index"
1324
- checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585"
1344
+ checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a"
1325
1345
  dependencies = [
1326
1346
  "zerovec",
1327
1347
  ]
@@ -1605,7 +1625,7 @@ checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001"
1605
1625
 
1606
1626
  [[package]]
1607
1627
  name = "rumdl"
1608
- version = "0.0.131"
1628
+ version = "0.0.132"
1609
1629
  dependencies = [
1610
1630
  "anyhow",
1611
1631
  "assert_cmd",
@@ -1615,6 +1635,7 @@ dependencies = [
1615
1635
  "criterion",
1616
1636
  "dyn-clone",
1617
1637
  "env_logger",
1638
+ "etcetera",
1618
1639
  "fancy-regex",
1619
1640
  "globset",
1620
1641
  "ignore",
@@ -2242,11 +2263,11 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
2242
2263
 
2243
2264
  [[package]]
2244
2265
  name = "wasi"
2245
- version = "0.14.2+wasi-0.2.4"
2266
+ version = "0.14.3+wasi-0.2.4"
2246
2267
  source = "registry+https://github.com/rust-lang/crates.io-index"
2247
- checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
2268
+ checksum = "6a51ae83037bdd272a9e28ce236db8c07016dd0d50c27038b3f407533c030c95"
2248
2269
  dependencies = [
2249
- "wit-bindgen-rt",
2270
+ "wit-bindgen",
2250
2271
  ]
2251
2272
 
2252
2273
  [[package]]
@@ -2608,13 +2629,10 @@ dependencies = [
2608
2629
  ]
2609
2630
 
2610
2631
  [[package]]
2611
- name = "wit-bindgen-rt"
2612
- version = "0.39.0"
2632
+ name = "wit-bindgen"
2633
+ version = "0.45.0"
2613
2634
  source = "registry+https://github.com/rust-lang/crates.io-index"
2614
- checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
2615
- dependencies = [
2616
- "bitflags 2.9.3",
2617
- ]
2635
+ checksum = "052283831dbae3d879dc7f51f3d92703a316ca49f91540417d38591826127814"
2618
2636
 
2619
2637
  [[package]]
2620
2638
  name = "writeable"
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "rumdl"
3
- version = "0.0.131"
3
+ version = "0.0.132"
4
4
  edition = "2024"
5
5
  rust-version = "1.89.0"
6
6
  description = "A fast Markdown linter written in Rust (Ru(st) MarkDown Linter)"
@@ -117,6 +117,7 @@ env_logger = "0.11"
117
117
  num_cpus = "1.16"
118
118
  chrono = { version = "0.4", features = ["serde"] }
119
119
  notify = "6.1"
120
+ etcetera = "0.8"
120
121
 
121
122
  [features]
122
123
  default = ["parallel"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rumdl
3
- Version: 0.0.131
3
+ Version: 0.0.132
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -118,6 +118,7 @@ It offers:
118
118
  - [Usage Examples](#usage-examples)
119
119
  - [Configuration](#configuration)
120
120
  - [Configuration Discovery](#configuration-discovery)
121
+ - [Global Configuration](#global-configuration)
121
122
  - [Markdownlint Migration](#markdownlint-migration)
122
123
  - [Configuration File Example](#configuration-file-example)
123
124
  - [Initializing Configuration](#initializing-configuration)
@@ -342,7 +343,7 @@ rumdl implements 54 lint rules for Markdown files. Here are some key rule catego
342
343
  For a complete list of rules and their descriptions, see our [documentation](https://github.com/rvben/rumdl/blob/main/docs/RULES.md) or run:
343
344
 
344
345
  ```bash
345
- rumdl --list-rules
346
+ rumdl rule
346
347
  ```
347
348
 
348
349
  ## Command-line Interface
@@ -577,6 +578,7 @@ The search follows these rules:
577
578
  - Stops at the first configuration file found
578
579
  - Stops searching when it encounters a `.git` directory (project boundary)
579
580
  - Maximum traversal depth of 100 directories
581
+ - Falls back to user configuration if no project configuration is found (see Global Configuration below)
580
582
 
581
583
  To disable all configuration discovery and use only built-in defaults, use the `--isolated` flag:
582
584
 
@@ -588,6 +590,36 @@ rumdl check .
588
590
  rumdl check --isolated .
589
591
  ```
590
592
 
593
+ ### Global Configuration
594
+
595
+ When no project configuration is found, rumdl will check for a user-level configuration file in your platform's standard config directory:
596
+
597
+ **Location:**
598
+
599
+ - **Linux/macOS**: `~/.config/rumdl/` (respects `XDG_CONFIG_HOME` if set)
600
+ - **Windows**: `%APPDATA%\rumdl\`
601
+
602
+ **Files checked (in order):**
603
+
604
+ 1. `.rumdl.toml`
605
+ 2. `rumdl.toml`
606
+ 3. `pyproject.toml` (must contain `[tool.rumdl]` section)
607
+
608
+ This allows you to set personal preferences that apply to all projects without local configuration.
609
+
610
+ **Example:** Create `~/.config/rumdl/rumdl.toml`:
611
+
612
+ ```toml
613
+ [global]
614
+ line-length = 100
615
+ disable = ["MD013", "MD041"]
616
+
617
+ [MD007]
618
+ indent = 2
619
+ ```
620
+
621
+ **Note:** User configuration is only used when no project configuration exists. Project configurations always take precedence.
622
+
591
623
  ### Markdownlint Migration
592
624
 
593
625
  rumdl provides seamless compatibility with existing markdownlint configurations:
@@ -89,6 +89,7 @@ It offers:
89
89
  - [Usage Examples](#usage-examples)
90
90
  - [Configuration](#configuration)
91
91
  - [Configuration Discovery](#configuration-discovery)
92
+ - [Global Configuration](#global-configuration)
92
93
  - [Markdownlint Migration](#markdownlint-migration)
93
94
  - [Configuration File Example](#configuration-file-example)
94
95
  - [Initializing Configuration](#initializing-configuration)
@@ -313,7 +314,7 @@ rumdl implements 54 lint rules for Markdown files. Here are some key rule catego
313
314
  For a complete list of rules and their descriptions, see our [documentation](https://github.com/rvben/rumdl/blob/main/docs/RULES.md) or run:
314
315
 
315
316
  ```bash
316
- rumdl --list-rules
317
+ rumdl rule
317
318
  ```
318
319
 
319
320
  ## Command-line Interface
@@ -548,6 +549,7 @@ The search follows these rules:
548
549
  - Stops at the first configuration file found
549
550
  - Stops searching when it encounters a `.git` directory (project boundary)
550
551
  - Maximum traversal depth of 100 directories
552
+ - Falls back to user configuration if no project configuration is found (see Global Configuration below)
551
553
 
552
554
  To disable all configuration discovery and use only built-in defaults, use the `--isolated` flag:
553
555
 
@@ -559,6 +561,36 @@ rumdl check .
559
561
  rumdl check --isolated .
560
562
  ```
561
563
 
564
+ ### Global Configuration
565
+
566
+ When no project configuration is found, rumdl will check for a user-level configuration file in your platform's standard config directory:
567
+
568
+ **Location:**
569
+
570
+ - **Linux/macOS**: `~/.config/rumdl/` (respects `XDG_CONFIG_HOME` if set)
571
+ - **Windows**: `%APPDATA%\rumdl\`
572
+
573
+ **Files checked (in order):**
574
+
575
+ 1. `.rumdl.toml`
576
+ 2. `rumdl.toml`
577
+ 3. `pyproject.toml` (must contain `[tool.rumdl]` section)
578
+
579
+ This allows you to set personal preferences that apply to all projects without local configuration.
580
+
581
+ **Example:** Create `~/.config/rumdl/rumdl.toml`:
582
+
583
+ ```toml
584
+ [global]
585
+ line-length = 100
586
+ disable = ["MD013", "MD041"]
587
+
588
+ [MD007]
589
+ indent = 2
590
+ ```
591
+
592
+ **Note:** User configuration is only used when no project configuration exists. Project configurations always take precedence.
593
+
562
594
  ### Markdownlint Migration
563
595
 
564
596
  rumdl provides seamless compatibility with existing markdownlint configurations:
@@ -1339,6 +1339,60 @@ impl SourcedConfig {
1339
1339
  None
1340
1340
  }
1341
1341
 
1342
+ /// Discover user-level configuration file from platform-specific config directory.
1343
+ /// Returns the first configuration file found in the user config directory.
1344
+ fn user_configuration_path() -> Option<std::path::PathBuf> {
1345
+ use etcetera::{BaseStrategy, choose_base_strategy};
1346
+
1347
+ match choose_base_strategy() {
1348
+ Ok(strategy) => {
1349
+ let config_dir = strategy.config_dir().join("rumdl");
1350
+
1351
+ // Check for config files in precedence order (same as project discovery)
1352
+ const USER_CONFIG_FILES: &[&str] = &[".rumdl.toml", "rumdl.toml", "pyproject.toml"];
1353
+
1354
+ log::debug!(
1355
+ "[rumdl-config] Checking for user configuration in: {}",
1356
+ config_dir.display()
1357
+ );
1358
+
1359
+ for filename in USER_CONFIG_FILES {
1360
+ let config_path = config_dir.join(filename);
1361
+
1362
+ if config_path.exists() {
1363
+ // For pyproject.toml, verify it contains [tool.rumdl] section
1364
+ if *filename == "pyproject.toml" {
1365
+ if let Ok(content) = std::fs::read_to_string(&config_path) {
1366
+ if content.contains("[tool.rumdl]") || content.contains("tool.rumdl") {
1367
+ log::debug!(
1368
+ "[rumdl-config] Found user configuration at: {}",
1369
+ config_path.display()
1370
+ );
1371
+ return Some(config_path);
1372
+ }
1373
+ log::debug!("[rumdl-config] Found user pyproject.toml but no [tool.rumdl] section");
1374
+ continue;
1375
+ }
1376
+ } else {
1377
+ log::debug!("[rumdl-config] Found user configuration at: {}", config_path.display());
1378
+ return Some(config_path);
1379
+ }
1380
+ }
1381
+ }
1382
+
1383
+ log::debug!(
1384
+ "[rumdl-config] No user configuration found in: {}",
1385
+ config_dir.display()
1386
+ );
1387
+ None
1388
+ }
1389
+ Err(e) => {
1390
+ log::debug!("[rumdl-config] Failed to determine user config directory: {e}");
1391
+ None
1392
+ }
1393
+ }
1394
+ }
1395
+
1342
1396
  /// Load and merge configurations from files and CLI overrides.
1343
1397
  /// If skip_auto_discovery is true, only explicit config paths are loaded.
1344
1398
  pub fn load_with_discovery(
@@ -1409,7 +1463,36 @@ impl SourcedConfig {
1409
1463
 
1410
1464
  // Only perform auto-discovery if not skipped AND no explicit config path provided
1411
1465
  if !skip_auto_discovery && config_path.is_none() {
1412
- // Use upward directory traversal to find config files
1466
+ // Step 1: Load user configuration first (as a base)
1467
+ if let Some(user_config_path) = Self::user_configuration_path() {
1468
+ let path_str = user_config_path.display().to_string();
1469
+ let filename = user_config_path.file_name().and_then(|n| n.to_str()).unwrap_or("");
1470
+
1471
+ log::debug!("[rumdl-config] Loading user configuration file: {path_str}");
1472
+
1473
+ if filename == "pyproject.toml" {
1474
+ let content = std::fs::read_to_string(&user_config_path).map_err(|e| ConfigError::IoError {
1475
+ source: e,
1476
+ path: path_str.clone(),
1477
+ })?;
1478
+ if let Some(fragment) = parse_pyproject_toml(&content, &path_str)? {
1479
+ sourced_config.merge(fragment);
1480
+ sourced_config.loaded_files.push(path_str);
1481
+ }
1482
+ } else {
1483
+ let content = std::fs::read_to_string(&user_config_path).map_err(|e| ConfigError::IoError {
1484
+ source: e,
1485
+ path: path_str.clone(),
1486
+ })?;
1487
+ let fragment = parse_rumdl_toml(&content, &path_str)?;
1488
+ sourced_config.merge(fragment);
1489
+ sourced_config.loaded_files.push(path_str);
1490
+ }
1491
+ } else {
1492
+ log::debug!("[rumdl-config] No user configuration file found");
1493
+ }
1494
+
1495
+ // Step 2: Look for project configuration files (override user config)
1413
1496
  if let Some(config_file) = Self::discover_config_upward() {
1414
1497
  let path_str = config_file.display().to_string();
1415
1498
  let filename = config_file.file_name().and_then(|n| n.to_str()).unwrap_or("");
@@ -1437,13 +1520,15 @@ impl SourcedConfig {
1437
1520
  } else {
1438
1521
  log::debug!("[rumdl-config] No configuration file found via upward traversal");
1439
1522
 
1440
- // Fallback to markdownlint config in current directory only
1523
+ // Step 3: If no project config found, fallback to markdownlint config in current directory
1524
+ let mut found_markdownlint = false;
1441
1525
  for filename in MARKDOWNLINT_CONFIG_FILES {
1442
1526
  if std::path::Path::new(filename).exists() {
1443
1527
  match load_from_markdownlint(filename) {
1444
1528
  Ok(fragment) => {
1445
1529
  sourced_config.merge(fragment);
1446
1530
  sourced_config.loaded_files.push(filename.to_string());
1531
+ found_markdownlint = true;
1447
1532
  break; // Load only the first one found
1448
1533
  }
1449
1534
  Err(_e) => {
@@ -1452,6 +1537,10 @@ impl SourcedConfig {
1452
1537
  }
1453
1538
  }
1454
1539
  }
1540
+
1541
+ if !found_markdownlint {
1542
+ log::debug!("[rumdl-config] No markdownlint configuration file found");
1543
+ }
1455
1544
  }
1456
1545
  }
1457
1546
 
@@ -1739,120 +1828,133 @@ fn parse_pyproject_toml(content: &str, path: &str) -> Result<Option<SourcedConfi
1739
1828
  let source = ConfigSource::PyprojectToml;
1740
1829
  let file = Some(path.to_string());
1741
1830
 
1742
- // 1. Handle [tool.rumdl] as before
1831
+ // 1. Handle [tool.rumdl] and [tool.rumdl.global] sections
1743
1832
  if let Some(rumdl_config) = doc.get("tool").and_then(|t| t.get("rumdl"))
1744
1833
  && let Some(rumdl_table) = rumdl_config.as_table()
1745
1834
  {
1746
- // --- Extract global options ---
1747
- if let Some(enable) = rumdl_table.get("enable")
1748
- && let Ok(values) = Vec::<String>::deserialize(enable.clone())
1749
- {
1750
- // Normalize rule names in the list
1751
- let normalized_values = values.into_iter().map(|s| normalize_key(&s)).collect();
1752
- fragment
1753
- .global
1754
- .enable
1755
- .push_override(normalized_values, source, file.clone(), None);
1756
- }
1757
- if let Some(disable) = rumdl_table.get("disable")
1758
- && let Ok(values) = Vec::<String>::deserialize(disable.clone())
1759
- {
1760
- // Re-enable normalization
1761
- let normalized_values: Vec<String> = values.into_iter().map(|s| normalize_key(&s)).collect();
1762
- fragment
1763
- .global
1764
- .disable
1765
- .push_override(normalized_values, source, file.clone(), None);
1766
- }
1767
- if let Some(include) = rumdl_table.get("include")
1768
- && let Ok(values) = Vec::<String>::deserialize(include.clone())
1769
- {
1770
- fragment
1771
- .global
1772
- .include
1773
- .push_override(values, source, file.clone(), None);
1774
- }
1775
- if let Some(exclude) = rumdl_table.get("exclude")
1776
- && let Ok(values) = Vec::<String>::deserialize(exclude.clone())
1777
- {
1778
- fragment
1779
- .global
1780
- .exclude
1781
- .push_override(values, source, file.clone(), None);
1782
- }
1783
- if let Some(respect_gitignore) = rumdl_table
1784
- .get("respect-gitignore")
1785
- .or_else(|| rumdl_table.get("respect_gitignore"))
1786
- && let Ok(value) = bool::deserialize(respect_gitignore.clone())
1787
- {
1788
- fragment
1789
- .global
1790
- .respect_gitignore
1791
- .push_override(value, source, file.clone(), None);
1792
- }
1793
- if let Some(output_format) = rumdl_table
1794
- .get("output-format")
1795
- .or_else(|| rumdl_table.get("output_format"))
1796
- && let Ok(value) = String::deserialize(output_format.clone())
1797
- {
1798
- if fragment.global.output_format.is_none() {
1799
- fragment.global.output_format = Some(SourcedValue::new(value.clone(), source));
1800
- } else {
1835
+ // Helper function to extract global config from a table
1836
+ let extract_global_config = |fragment: &mut SourcedConfigFragment, table: &toml::value::Table| {
1837
+ // Extract global options from the given table
1838
+ if let Some(enable) = table.get("enable")
1839
+ && let Ok(values) = Vec::<String>::deserialize(enable.clone())
1840
+ {
1841
+ // Normalize rule names in the list
1842
+ let normalized_values = values.into_iter().map(|s| normalize_key(&s)).collect();
1801
1843
  fragment
1802
1844
  .global
1803
- .output_format
1804
- .as_mut()
1805
- .unwrap()
1845
+ .enable
1846
+ .push_override(normalized_values, source, file.clone(), None);
1847
+ }
1848
+
1849
+ if let Some(disable) = table.get("disable")
1850
+ && let Ok(values) = Vec::<String>::deserialize(disable.clone())
1851
+ {
1852
+ // Re-enable normalization
1853
+ let normalized_values: Vec<String> = values.into_iter().map(|s| normalize_key(&s)).collect();
1854
+ fragment
1855
+ .global
1856
+ .disable
1857
+ .push_override(normalized_values, source, file.clone(), None);
1858
+ }
1859
+
1860
+ if let Some(include) = table.get("include")
1861
+ && let Ok(values) = Vec::<String>::deserialize(include.clone())
1862
+ {
1863
+ fragment
1864
+ .global
1865
+ .include
1866
+ .push_override(values, source, file.clone(), None);
1867
+ }
1868
+
1869
+ if let Some(exclude) = table.get("exclude")
1870
+ && let Ok(values) = Vec::<String>::deserialize(exclude.clone())
1871
+ {
1872
+ fragment
1873
+ .global
1874
+ .exclude
1875
+ .push_override(values, source, file.clone(), None);
1876
+ }
1877
+
1878
+ if let Some(respect_gitignore) = table
1879
+ .get("respect-gitignore")
1880
+ .or_else(|| table.get("respect_gitignore"))
1881
+ && let Ok(value) = bool::deserialize(respect_gitignore.clone())
1882
+ {
1883
+ fragment
1884
+ .global
1885
+ .respect_gitignore
1806
1886
  .push_override(value, source, file.clone(), None);
1807
1887
  }
1808
- }
1809
- if let Some(fixable) = rumdl_table.get("fixable")
1810
- && let Ok(values) = Vec::<String>::deserialize(fixable.clone())
1811
- {
1812
- let normalized_values = values.into_iter().map(|s| normalize_key(&s)).collect();
1813
- fragment
1814
- .global
1815
- .fixable
1816
- .push_override(normalized_values, source, file.clone(), None);
1817
- }
1818
- if let Some(unfixable) = rumdl_table.get("unfixable")
1819
- && let Ok(values) = Vec::<String>::deserialize(unfixable.clone())
1820
- {
1821
- let normalized_values = values.into_iter().map(|s| normalize_key(&s)).collect();
1822
- fragment
1823
- .global
1824
- .unfixable
1825
- .push_override(normalized_values, source, file.clone(), None);
1826
- }
1827
- if let Some(flavor) = rumdl_table.get("flavor")
1828
- && let Ok(value) = MarkdownFlavor::deserialize(flavor.clone())
1829
- {
1830
- fragment.global.flavor.push_override(value, source, file.clone(), None);
1831
- }
1832
1888
 
1833
- // --- Re-introduce special line-length handling ---
1834
- let mut found_line_length_val: Option<toml::Value> = None;
1835
- for key in ["line-length", "line_length"].iter() {
1836
- if let Some(val) = rumdl_table.get(*key) {
1837
- // Ensure the value is actually an integer before cloning
1838
- if val.is_integer() {
1839
- found_line_length_val = Some(val.clone());
1840
- break;
1889
+ if let Some(output_format) = table.get("output-format").or_else(|| table.get("output_format"))
1890
+ && let Ok(value) = String::deserialize(output_format.clone())
1891
+ {
1892
+ if fragment.global.output_format.is_none() {
1893
+ fragment.global.output_format = Some(SourcedValue::new(value.clone(), source));
1841
1894
  } else {
1842
- // Optional: Warn about wrong type for line-length?
1895
+ fragment
1896
+ .global
1897
+ .output_format
1898
+ .as_mut()
1899
+ .unwrap()
1900
+ .push_override(value, source, file.clone(), None);
1843
1901
  }
1844
1902
  }
1903
+
1904
+ if let Some(fixable) = table.get("fixable")
1905
+ && let Ok(values) = Vec::<String>::deserialize(fixable.clone())
1906
+ {
1907
+ let normalized_values = values.into_iter().map(|s| normalize_key(&s)).collect();
1908
+ fragment
1909
+ .global
1910
+ .fixable
1911
+ .push_override(normalized_values, source, file.clone(), None);
1912
+ }
1913
+
1914
+ if let Some(unfixable) = table.get("unfixable")
1915
+ && let Ok(values) = Vec::<String>::deserialize(unfixable.clone())
1916
+ {
1917
+ let normalized_values = values.into_iter().map(|s| normalize_key(&s)).collect();
1918
+ fragment
1919
+ .global
1920
+ .unfixable
1921
+ .push_override(normalized_values, source, file.clone(), None);
1922
+ }
1923
+
1924
+ if let Some(flavor) = table.get("flavor")
1925
+ && let Ok(value) = MarkdownFlavor::deserialize(flavor.clone())
1926
+ {
1927
+ fragment.global.flavor.push_override(value, source, file.clone(), None);
1928
+ }
1929
+
1930
+ // Handle line-length special case - this should set the global line_length
1931
+ if let Some(line_length) = table.get("line-length").or_else(|| table.get("line_length"))
1932
+ && let Ok(value) = u64::deserialize(line_length.clone())
1933
+ {
1934
+ fragment
1935
+ .global
1936
+ .line_length
1937
+ .push_override(value, source, file.clone(), None);
1938
+
1939
+ // Also add to MD013 rule config for backward compatibility
1940
+ let norm_md013_key = normalize_key("MD013");
1941
+ let rule_entry = fragment.rules.entry(norm_md013_key).or_default();
1942
+ let norm_line_length_key = normalize_key("line-length");
1943
+ let sv = rule_entry
1944
+ .values
1945
+ .entry(norm_line_length_key)
1946
+ .or_insert_with(|| SourcedValue::new(line_length.clone(), ConfigSource::Default));
1947
+ sv.push_override(line_length.clone(), source, file.clone(), None);
1948
+ }
1949
+ };
1950
+
1951
+ // First, check for [tool.rumdl.global] section
1952
+ if let Some(global_table) = rumdl_table.get("global").and_then(|g| g.as_table()) {
1953
+ extract_global_config(&mut fragment, global_table);
1845
1954
  }
1846
- if let Some(line_length_val) = found_line_length_val {
1847
- let norm_md013_key = normalize_key("MD013"); // Normalize to "md013"
1848
- let rule_entry = fragment.rules.entry(norm_md013_key).or_default();
1849
- let norm_line_length_key = normalize_key("line-length"); // Ensure "line-length"
1850
- let sv = rule_entry
1851
- .values
1852
- .entry(norm_line_length_key)
1853
- .or_insert_with(|| SourcedValue::new(line_length_val.clone(), ConfigSource::Default));
1854
- sv.push_override(line_length_val, source, file.clone(), None);
1855
- }
1955
+
1956
+ // Also extract global options from [tool.rumdl] directly (for flat structure)
1957
+ extract_global_config(&mut fragment, rumdl_table);
1856
1958
 
1857
1959
  // --- Extract rule-specific configurations ---
1858
1960
  for (key, value) in rumdl_table {