rumdl 0.0.156__tar.gz → 0.0.157__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 (459) hide show
  1. {rumdl-0.0.156 → rumdl-0.0.157}/CHANGELOG.md +185 -0
  2. {rumdl-0.0.156 → rumdl-0.0.157}/Cargo.lock +1 -1
  3. {rumdl-0.0.156 → rumdl-0.0.157}/Cargo.toml +1 -1
  4. {rumdl-0.0.156 → rumdl-0.0.157}/PKG-INFO +1 -1
  5. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md042.md +28 -0
  6. {rumdl-0.0.156 → rumdl-0.0.157}/src/config.rs +7 -4
  7. {rumdl-0.0.156 → rumdl-0.0.157}/src/lsp/server.rs +69 -3
  8. {rumdl-0.0.156 → rumdl-0.0.157}/src/main.rs +60 -19
  9. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md034_no_bare_urls.rs +15 -0
  10. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md042_no_empty_links.rs +150 -18
  11. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/code_block_utils.rs +31 -7
  12. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/mkdocs_patterns.rs +33 -5
  13. {rumdl-0.0.156 → rumdl-0.0.157}/tests/cli_integration_tests.rs +38 -53
  14. rumdl-0.0.157/tests/code_block_blockquote_edge_cases.rs +243 -0
  15. rumdl-0.0.157/tests/exclude_with_explicit_paths_test.rs +225 -0
  16. rumdl-0.0.157/tests/mkdocs_anchor_edge_cases_test.rs +338 -0
  17. rumdl-0.0.157/tests/mkdocs_anchor_test.rs +115 -0
  18. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/link_edge_cases_test.rs +18 -8
  19. rumdl-0.0.157/tests/rules/md033_blockquote_test.rs +282 -0
  20. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md034_test.rs +69 -0
  21. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md042_test.rs +91 -15
  22. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md051_comprehensive_test.rs +3 -2
  23. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/mod.rs +1 -0
  24. {rumdl-0.0.156 → rumdl-0.0.157}/.config/nextest.toml +0 -0
  25. {rumdl-0.0.156 → rumdl-0.0.157}/.mise.toml +0 -0
  26. {rumdl-0.0.156 → rumdl-0.0.157}/.pre-commit-config.yaml +0 -0
  27. {rumdl-0.0.156 → rumdl-0.0.157}/.rumdl.toml +0 -0
  28. {rumdl-0.0.156 → rumdl-0.0.157}/.rustfmt.toml +0 -0
  29. {rumdl-0.0.156 → rumdl-0.0.157}/LICENSE +0 -0
  30. {rumdl-0.0.156 → rumdl-0.0.157}/MANIFEST.in +0 -0
  31. {rumdl-0.0.156 → rumdl-0.0.157}/Makefile +0 -0
  32. {rumdl-0.0.156 → rumdl-0.0.157}/README.md +0 -0
  33. {rumdl-0.0.156 → rumdl-0.0.157}/assets/logo.png +0 -0
  34. {rumdl-0.0.156 → rumdl-0.0.157}/benches/fix_performance.rs +0 -0
  35. {rumdl-0.0.156 → rumdl-0.0.157}/benches/range_performance.rs +0 -0
  36. {rumdl-0.0.156 → rumdl-0.0.157}/benches/range_utils_benchmark.rs +0 -0
  37. {rumdl-0.0.156 → rumdl-0.0.157}/benches/rule_performance.rs +0 -0
  38. {rumdl-0.0.156 → rumdl-0.0.157}/benches/simple_fix_bench.rs +0 -0
  39. {rumdl-0.0.156 → rumdl-0.0.157}/benchmark/bin/bench_lint_context.rs +0 -0
  40. {rumdl-0.0.156 → rumdl-0.0.157}/benchmark/bin/benchmark.rs +0 -0
  41. {rumdl-0.0.156 → rumdl-0.0.157}/benchmark/bin/benchmark_rule.rs +0 -0
  42. {rumdl-0.0.156 → rumdl-0.0.157}/benchmark/bin/file_parallel_benchmark.rs +0 -0
  43. {rumdl-0.0.156 → rumdl-0.0.157}/benchmark/bin/measure_code_span_performance.rs +0 -0
  44. {rumdl-0.0.156 → rumdl-0.0.157}/docs/LINTCONTEXT_OPTIMIZATION_PLAN.md +0 -0
  45. {rumdl-0.0.156 → rumdl-0.0.157}/docs/LINTCONTEXT_OPTIMIZATION_SUMMARY.md +0 -0
  46. {rumdl-0.0.156 → rumdl-0.0.157}/docs/LINTCONTEXT_PERFORMANCE_ANALYSIS.md +0 -0
  47. {rumdl-0.0.156 → rumdl-0.0.157}/docs/PHASE_2_OPTIMIZATION_COMPLETE.md +0 -0
  48. {rumdl-0.0.156 → rumdl-0.0.157}/docs/PHASE_3_OPTIMIZATION_COMPLETE.md +0 -0
  49. {rumdl-0.0.156 → rumdl-0.0.157}/docs/RULES.md +0 -0
  50. {rumdl-0.0.156 → rumdl-0.0.157}/docs/global-settings.md +0 -0
  51. {rumdl-0.0.156 → rumdl-0.0.157}/docs/inline-configuration.md +0 -0
  52. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md001.md +0 -0
  53. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md002.md +0 -0
  54. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md003.md +0 -0
  55. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md004.md +0 -0
  56. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md005.md +0 -0
  57. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md006.md +0 -0
  58. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md007.md +0 -0
  59. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md009.md +0 -0
  60. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md010.md +0 -0
  61. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md011.md +0 -0
  62. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md012.md +0 -0
  63. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md013.md +0 -0
  64. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md014.md +0 -0
  65. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md018.md +0 -0
  66. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md019.md +0 -0
  67. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md020.md +0 -0
  68. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md021.md +0 -0
  69. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md022.md +0 -0
  70. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md023.md +0 -0
  71. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md024.md +0 -0
  72. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md025.md +0 -0
  73. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md026.md +0 -0
  74. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md027.md +0 -0
  75. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md028.md +0 -0
  76. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md029.md +0 -0
  77. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md030.md +0 -0
  78. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md031.md +0 -0
  79. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md032.md +0 -0
  80. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md033.md +0 -0
  81. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md034.md +0 -0
  82. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md035.md +0 -0
  83. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md036.md +0 -0
  84. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md037.md +0 -0
  85. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md038.md +0 -0
  86. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md039.md +0 -0
  87. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md040.md +0 -0
  88. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md041.md +0 -0
  89. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md043.md +0 -0
  90. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md044.md +0 -0
  91. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md045.md +0 -0
  92. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md046.md +0 -0
  93. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md047.md +0 -0
  94. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md048.md +0 -0
  95. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md049.md +0 -0
  96. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md050.md +0 -0
  97. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md051.md +0 -0
  98. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md052.md +0 -0
  99. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md053.md +0 -0
  100. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md054.md +0 -0
  101. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md055.md +0 -0
  102. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md056.md +0 -0
  103. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md057.md +0 -0
  104. {rumdl-0.0.156 → rumdl-0.0.157}/docs/md058.md +0 -0
  105. {rumdl-0.0.156 → rumdl-0.0.157}/docs/vscode-extension.md +0 -0
  106. {rumdl-0.0.156 → rumdl-0.0.157}/parity_check.py +0 -0
  107. {rumdl-0.0.156 → rumdl-0.0.157}/pyproject.toml +0 -0
  108. {rumdl-0.0.156 → rumdl-0.0.157}/rumdl/__init__.py +0 -0
  109. {rumdl-0.0.156 → rumdl-0.0.157}/rumdl/__main__.py +0 -0
  110. {rumdl-0.0.156 → rumdl-0.0.157}/rumdl/py.typed +0 -0
  111. {rumdl-0.0.156 → rumdl-0.0.157}/rumdl.schema.json +0 -0
  112. {rumdl-0.0.156 → rumdl-0.0.157}/rumdl.toml.example +0 -0
  113. {rumdl-0.0.156 → rumdl-0.0.157}/rust-toolchain.toml +0 -0
  114. {rumdl-0.0.156 → rumdl-0.0.157}/scripts/extract-changelog.sh +0 -0
  115. {rumdl-0.0.156 → rumdl-0.0.157}/scripts/generate-downloads-table.sh +0 -0
  116. {rumdl-0.0.156 → rumdl-0.0.157}/scripts/pre-release.sh +0 -0
  117. {rumdl-0.0.156 → rumdl-0.0.157}/scripts/prepare-release.sh +0 -0
  118. {rumdl-0.0.156 → rumdl-0.0.157}/scripts/setup-pre-commit.sh +0 -0
  119. {rumdl-0.0.156 → rumdl-0.0.157}/scripts/update-pre-commit-docs.sh +0 -0
  120. {rumdl-0.0.156 → rumdl-0.0.157}/src/exit_codes.rs +0 -0
  121. {rumdl-0.0.156 → rumdl-0.0.157}/src/fix_coordinator.rs +0 -0
  122. {rumdl-0.0.156 → rumdl-0.0.157}/src/inline_config.rs +0 -0
  123. {rumdl-0.0.156 → rumdl-0.0.157}/src/lib.rs +0 -0
  124. {rumdl-0.0.156 → rumdl-0.0.157}/src/lint_context.rs +0 -0
  125. {rumdl-0.0.156 → rumdl-0.0.157}/src/lsp/mod.rs +0 -0
  126. {rumdl-0.0.156 → rumdl-0.0.157}/src/lsp/types.rs +0 -0
  127. {rumdl-0.0.156 → rumdl-0.0.157}/src/markdownlint_config.rs +0 -0
  128. {rumdl-0.0.156 → rumdl-0.0.157}/src/output/formatters/azure.rs +0 -0
  129. {rumdl-0.0.156 → rumdl-0.0.157}/src/output/formatters/concise.rs +0 -0
  130. {rumdl-0.0.156 → rumdl-0.0.157}/src/output/formatters/github.rs +0 -0
  131. {rumdl-0.0.156 → rumdl-0.0.157}/src/output/formatters/gitlab.rs +0 -0
  132. {rumdl-0.0.156 → rumdl-0.0.157}/src/output/formatters/grouped.rs +0 -0
  133. {rumdl-0.0.156 → rumdl-0.0.157}/src/output/formatters/json.rs +0 -0
  134. {rumdl-0.0.156 → rumdl-0.0.157}/src/output/formatters/json_lines.rs +0 -0
  135. {rumdl-0.0.156 → rumdl-0.0.157}/src/output/formatters/junit.rs +0 -0
  136. {rumdl-0.0.156 → rumdl-0.0.157}/src/output/formatters/mod.rs +0 -0
  137. {rumdl-0.0.156 → rumdl-0.0.157}/src/output/formatters/pylint.rs +0 -0
  138. {rumdl-0.0.156 → rumdl-0.0.157}/src/output/formatters/sarif.rs +0 -0
  139. {rumdl-0.0.156 → rumdl-0.0.157}/src/output/formatters/text.rs +0 -0
  140. {rumdl-0.0.156 → rumdl-0.0.157}/src/output/mod.rs +0 -0
  141. {rumdl-0.0.156 → rumdl-0.0.157}/src/parallel.rs +0 -0
  142. {rumdl-0.0.156 → rumdl-0.0.157}/src/performance.rs +0 -0
  143. {rumdl-0.0.156 → rumdl-0.0.157}/src/profiling.rs +0 -0
  144. {rumdl-0.0.156 → rumdl-0.0.157}/src/rule.rs +0 -0
  145. {rumdl-0.0.156 → rumdl-0.0.157}/src/rule_config.rs +0 -0
  146. {rumdl-0.0.156 → rumdl-0.0.157}/src/rule_config_serde.rs +0 -0
  147. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/blockquote_utils.rs +0 -0
  148. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/code_block_utils.rs +0 -0
  149. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/code_fence_utils.rs +0 -0
  150. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/emphasis_style.rs +0 -0
  151. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/front_matter_utils.rs +0 -0
  152. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/heading_utils.rs +0 -0
  153. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/list_utils.rs +0 -0
  154. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md001_heading_increment.rs +0 -0
  155. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md002_first_heading_h1/md002_config.rs +0 -0
  156. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md002_first_heading_h1.rs +0 -0
  157. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md003_heading_style/md003_config.rs +0 -0
  158. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md003_heading_style.rs +0 -0
  159. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md004_unordered_list_style/md004_config.rs +0 -0
  160. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md004_unordered_list_style.rs +0 -0
  161. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md005_list_indent.rs +0 -0
  162. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md006_start_bullets.rs +0 -0
  163. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md007_ul_indent/md007_config.rs +0 -0
  164. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md007_ul_indent.rs +0 -0
  165. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md009_trailing_spaces/md009_config.rs +0 -0
  166. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md009_trailing_spaces.rs +0 -0
  167. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md010_no_hard_tabs/md010_config.rs +0 -0
  168. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md010_no_hard_tabs.rs +0 -0
  169. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md011_no_reversed_links.rs +0 -0
  170. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md012_no_multiple_blanks/md012_config.rs +0 -0
  171. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md012_no_multiple_blanks.rs +0 -0
  172. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md013_line_length/md013_config.rs +0 -0
  173. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md013_line_length.rs +0 -0
  174. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md014_commands_show_output/md014_config.rs +0 -0
  175. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md014_commands_show_output.rs +0 -0
  176. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md018_no_missing_space_atx.rs +0 -0
  177. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md019_no_multiple_space_atx.rs +0 -0
  178. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
  179. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
  180. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md022_blanks_around_headings/md022_config.rs +0 -0
  181. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md022_blanks_around_headings.rs +0 -0
  182. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md023_heading_start_left.rs +0 -0
  183. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md024_no_duplicate_heading/md024_config.rs +0 -0
  184. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md024_no_duplicate_heading.rs +0 -0
  185. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md025_single_title/md025_config.rs +0 -0
  186. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md025_single_title.rs +0 -0
  187. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md026_no_trailing_punctuation/md026_config.rs +0 -0
  188. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md026_no_trailing_punctuation.rs +0 -0
  189. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
  190. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md028_no_blanks_blockquote.rs +0 -0
  191. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md029_ordered_list_prefix/md029_config.rs +0 -0
  192. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md029_ordered_list_prefix.rs +0 -0
  193. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md030_list_marker_space/md030_config.rs +0 -0
  194. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md030_list_marker_space.rs +0 -0
  195. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md031_blanks_around_fences.rs +0 -0
  196. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md032_blanks_around_lists.rs +0 -0
  197. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md033_no_inline_html/md033_config.rs +0 -0
  198. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md033_no_inline_html.rs +0 -0
  199. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md035_hr_style/md035_config.rs +0 -0
  200. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md035_hr_style.rs +0 -0
  201. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md036_no_emphasis_only_first/md036_config.rs +0 -0
  202. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md036_no_emphasis_only_first.rs +0 -0
  203. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md037_spaces_around_emphasis.rs +0 -0
  204. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md038_no_space_in_code.rs +0 -0
  205. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md039_no_space_in_links.rs +0 -0
  206. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md040_fenced_code_language.rs +0 -0
  207. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md041_first_line_heading.rs +0 -0
  208. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md043_required_headings.rs +0 -0
  209. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md044_proper_names/md044_config.rs +0 -0
  210. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md044_proper_names.rs +0 -0
  211. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md045_no_alt_text/md045_config.rs +0 -0
  212. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md045_no_alt_text.rs +0 -0
  213. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md046_code_block_style/md046_config.rs +0 -0
  214. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md046_code_block_style.rs +0 -0
  215. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md047_single_trailing_newline.rs +0 -0
  216. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md048_code_fence_style/md048_config.rs +0 -0
  217. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md048_code_fence_style.rs +0 -0
  218. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md049_emphasis_style/md049_config.rs +0 -0
  219. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md049_emphasis_style.rs +0 -0
  220. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md050_strong_style/md050_config.rs +0 -0
  221. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md050_strong_style.rs +0 -0
  222. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md051_link_fragments.rs +0 -0
  223. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md052_reference_links_images.rs +0 -0
  224. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md053_link_image_reference_definitions.rs +0 -0
  225. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md054_link_image_style/md054_config.rs +0 -0
  226. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md054_link_image_style.rs +0 -0
  227. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md055_table_pipe_style/md055_config.rs +0 -0
  228. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md055_table_pipe_style.rs +0 -0
  229. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md056_table_column_count.rs +0 -0
  230. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md057_existing_relative_links/md057_config.rs +0 -0
  231. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md057_existing_relative_links.rs +0 -0
  232. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/md058_blanks_around_tables.rs +0 -0
  233. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/mod.rs +0 -0
  234. {rumdl-0.0.156 → rumdl-0.0.157}/src/rules/strong_style.rs +0 -0
  235. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/anchor_styles/github.rs +0 -0
  236. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/anchor_styles/jekyll.rs +0 -0
  237. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/anchor_styles/kramdown.rs +0 -0
  238. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/anchor_styles/kramdown_gfm.rs +0 -0
  239. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/anchor_styles/mod.rs +0 -0
  240. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/ast_utils.rs +0 -0
  241. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/document_structure.rs +0 -0
  242. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/early_returns.rs +0 -0
  243. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/element_cache.rs +0 -0
  244. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/emphasis_utils.rs +0 -0
  245. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/fix_utils.rs +0 -0
  246. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/header_id_utils.rs +0 -0
  247. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/jinja_utils.rs +0 -0
  248. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/kramdown_utils.rs +0 -0
  249. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/line_ending.rs +0 -0
  250. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/markdown_elements.rs +0 -0
  251. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/mkdocs_admonitions.rs +0 -0
  252. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/mkdocs_common.rs +0 -0
  253. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/mkdocs_critic.rs +0 -0
  254. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/mkdocs_footnotes.rs +0 -0
  255. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/mkdocs_snippets.rs +0 -0
  256. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/mkdocs_tabs.rs +0 -0
  257. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/mkdocs_test_utils.rs +0 -0
  258. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/mkdocstrings_refs.rs +0 -0
  259. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/mod.rs +0 -0
  260. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/range_utils.rs +0 -0
  261. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/regex_cache.rs +0 -0
  262. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/skip_context.rs +0 -0
  263. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/string_interner.rs +0 -0
  264. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/table_utils.rs +0 -0
  265. {rumdl-0.0.156 → rumdl-0.0.157}/src/utils/text_reflow.rs +0 -0
  266. {rumdl-0.0.156 → rumdl-0.0.157}/src/vscode.rs +0 -0
  267. {rumdl-0.0.156 → rumdl-0.0.157}/tests/advanced_integration_tests.rs +0 -0
  268. {rumdl-0.0.156 → rumdl-0.0.157}/tests/character_ranges/additional_tests.rs +0 -0
  269. {rumdl-0.0.156 → rumdl-0.0.157}/tests/character_ranges/basic_tests.rs +0 -0
  270. {rumdl-0.0.156 → rumdl-0.0.157}/tests/character_ranges/comprehensive_tests.rs +0 -0
  271. {rumdl-0.0.156 → rumdl-0.0.157}/tests/character_ranges/extended_tests.rs +0 -0
  272. {rumdl-0.0.156 → rumdl-0.0.157}/tests/character_ranges/mod.rs +0 -0
  273. {rumdl-0.0.156 → rumdl-0.0.157}/tests/character_ranges/unicode_utils.rs +0 -0
  274. {rumdl-0.0.156 → rumdl-0.0.157}/tests/cli_duplication_test.rs +0 -0
  275. {rumdl-0.0.156 → rumdl-0.0.157}/tests/cli_explain_test.rs +0 -0
  276. {rumdl-0.0.156 → rumdl-0.0.157}/tests/cli_flag_precedence_test.rs +0 -0
  277. {rumdl-0.0.156 → rumdl-0.0.157}/tests/cli_lsp_fix_consistency.rs +0 -0
  278. {rumdl-0.0.156 → rumdl-0.0.157}/tests/cli_statistics_test.rs +0 -0
  279. {rumdl-0.0.156 → rumdl-0.0.157}/tests/common/cli_test_utils.rs +0 -0
  280. {rumdl-0.0.156 → rumdl-0.0.157}/tests/common/fixtures.rs +0 -0
  281. {rumdl-0.0.156 → rumdl-0.0.157}/tests/common/mod.rs +0 -0
  282. {rumdl-0.0.156 → rumdl-0.0.157}/tests/common/test_utils.rs +0 -0
  283. {rumdl-0.0.156 → rumdl-0.0.157}/tests/commonmark_compliance_tests.rs +0 -0
  284. {rumdl-0.0.156 → rumdl-0.0.157}/tests/comprehensive_integration_tests.rs +0 -0
  285. {rumdl-0.0.156 → rumdl-0.0.157}/tests/comprehensive_output_format_tests.rs +0 -0
  286. {rumdl-0.0.156 → rumdl-0.0.157}/tests/config_application_tests.rs +0 -0
  287. {rumdl-0.0.156 → rumdl-0.0.157}/tests/config_file_command_test.rs +0 -0
  288. {rumdl-0.0.156 → rumdl-0.0.157}/tests/config_tests.rs +0 -0
  289. {rumdl-0.0.156 → rumdl-0.0.157}/tests/config_upward_traversal_test.rs +0 -0
  290. {rumdl-0.0.156 → rumdl-0.0.157}/tests/configuration_inheritance_tests.rs +0 -0
  291. {rumdl-0.0.156 → rumdl-0.0.157}/tests/consistency_regression_tests.rs +0 -0
  292. {rumdl-0.0.156 → rumdl-0.0.157}/tests/cross_platform_compatibility_tests.rs +0 -0
  293. {rumdl-0.0.156 → rumdl-0.0.157}/tests/deeply_nested_lists_performance_test.rs +0 -0
  294. {rumdl-0.0.156 → rumdl-0.0.157}/tests/escaped_brackets_test.rs +0 -0
  295. {rumdl-0.0.156 → rumdl-0.0.157}/tests/final_confidence_assessment.rs +0 -0
  296. {rumdl-0.0.156 → rumdl-0.0.157}/tests/fix_counting_test.rs +0 -0
  297. {rumdl-0.0.156 → rumdl-0.0.157}/tests/fix_performance_baseline_test.rs +0 -0
  298. {rumdl-0.0.156 → rumdl-0.0.157}/tests/fixable_unfixable_config_test.rs +0 -0
  299. {rumdl-0.0.156 → rumdl-0.0.157}/tests/init_command_test.rs +0 -0
  300. {rumdl-0.0.156 → rumdl-0.0.157}/tests/init_tests.rs +0 -0
  301. {rumdl-0.0.156 → rumdl-0.0.157}/tests/inline_config_blocks_test.rs +0 -0
  302. {rumdl-0.0.156 → rumdl-0.0.157}/tests/inline_config_test.rs +0 -0
  303. {rumdl-0.0.156 → rumdl-0.0.157}/tests/integration_tests.rs +0 -0
  304. {rumdl-0.0.156 → rumdl-0.0.157}/tests/json_output_test.rs +0 -0
  305. {rumdl-0.0.156 → rumdl-0.0.157}/tests/kramdown_integration_test.rs +0 -0
  306. {rumdl-0.0.156 → rumdl-0.0.157}/tests/lib.rs +0 -0
  307. {rumdl-0.0.156 → rumdl-0.0.157}/tests/lsp_editor_integration_tests.rs +0 -0
  308. {rumdl-0.0.156 → rumdl-0.0.157}/tests/lsp_formatting_tests.rs +0 -0
  309. {rumdl-0.0.156 → rumdl-0.0.157}/tests/lsp_initialization_options_test.rs +0 -0
  310. {rumdl-0.0.156 → rumdl-0.0.157}/tests/lsp_integration_tests.rs +0 -0
  311. {rumdl-0.0.156 → rumdl-0.0.157}/tests/lsp_memory_leak_tests.rs +0 -0
  312. {rumdl-0.0.156 → rumdl-0.0.157}/tests/lsp_mkdocs_flavor_test.rs +0 -0
  313. {rumdl-0.0.156 → rumdl-0.0.157}/tests/lsp_tests.rs +0 -0
  314. {rumdl-0.0.156 → rumdl-0.0.157}/tests/lsp_unopened_document_test.rs +0 -0
  315. {rumdl-0.0.156 → rumdl-0.0.157}/tests/malformed_markdown_stress_tests.rs +0 -0
  316. {rumdl-0.0.156 → rumdl-0.0.157}/tests/markdownlint_cli_integration.rs +0 -0
  317. {rumdl-0.0.156 → rumdl-0.0.157}/tests/markdownlint_config_test.rs +0 -0
  318. {rumdl-0.0.156 → rumdl-0.0.157}/tests/markdownlintignore_test.rs +0 -0
  319. {rumdl-0.0.156 → rumdl-0.0.157}/tests/md009_md013_integration_test.rs +0 -0
  320. {rumdl-0.0.156 → rumdl-0.0.157}/tests/md009_md013_order_test.rs +0 -0
  321. {rumdl-0.0.156 → rumdl-0.0.157}/tests/md013_hard_breaks_test.rs +0 -0
  322. {rumdl-0.0.156 → rumdl-0.0.157}/tests/md013_reflow_integration_test.rs +0 -0
  323. {rumdl-0.0.156 → rumdl-0.0.157}/tests/md032_edge_cases_test.rs +0 -0
  324. {rumdl-0.0.156 → rumdl-0.0.157}/tests/md032_ordered_list_bug_test.rs +0 -0
  325. {rumdl-0.0.156 → rumdl-0.0.157}/tests/md033_edge_cases_test.rs +0 -0
  326. {rumdl-0.0.156 → rumdl-0.0.157}/tests/md037_xxxx_regression_test.rs +0 -0
  327. {rumdl-0.0.156 → rumdl-0.0.157}/tests/md038_false_positive_test.rs +0 -0
  328. {rumdl-0.0.156 → rumdl-0.0.157}/tests/md051_issue_39_regression_test.rs +0 -0
  329. {rumdl-0.0.156 → rumdl-0.0.157}/tests/md051_readme_bug_test.rs +0 -0
  330. {rumdl-0.0.156 → rumdl-0.0.157}/tests/md051_toc_bug_test.rs +0 -0
  331. {rumdl-0.0.156 → rumdl-0.0.157}/tests/md052_literal_brackets_test.rs +0 -0
  332. {rumdl-0.0.156 → rumdl-0.0.157}/tests/md054_code_span_test.rs +0 -0
  333. {rumdl-0.0.156 → rumdl-0.0.157}/tests/nested_code_block_test.rs +0 -0
  334. {rumdl-0.0.156 → rumdl-0.0.157}/tests/output_format_integration_tests.rs +0 -0
  335. {rumdl-0.0.156 → rumdl-0.0.157}/tests/output_format_tests.rs +0 -0
  336. {rumdl-0.0.156 → rumdl-0.0.157}/tests/per_file_ignores_integration_test.rs +0 -0
  337. {rumdl-0.0.156 → rumdl-0.0.157}/tests/perf_check.rs +0 -0
  338. {rumdl-0.0.156 → rumdl-0.0.157}/tests/performance_validation_tests.rs +0 -0
  339. {rumdl-0.0.156 → rumdl-0.0.157}/tests/pyproject_config_tests.rs +0 -0
  340. {rumdl-0.0.156 → rumdl-0.0.157}/tests/real_world_repository_tests.rs +0 -0
  341. {rumdl-0.0.156 → rumdl-0.0.157}/tests/regression_prevention_tests.rs +0 -0
  342. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/emphasis_edge_cases_test.rs +0 -0
  343. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/heading_edge_cases_test.rs +0 -0
  344. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/inline_content_edge_cases_test.rs +0 -0
  345. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/list_rules_integration_test.rs +0 -0
  346. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md001_test.rs +0 -0
  347. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md001_unicode_test.rs +0 -0
  348. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md002_test.rs +0 -0
  349. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md003_test.rs +0 -0
  350. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md004_test.rs +0 -0
  351. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md005_dynamic_indent_test.rs +0 -0
  352. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md005_test.rs +0 -0
  353. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md005_unicode_test.rs +0 -0
  354. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md006_test.rs +0 -0
  355. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md006_unicode_test.rs +0 -0
  356. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md007_test.rs +0 -0
  357. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md009_test.rs +0 -0
  358. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md010_test.rs +0 -0
  359. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md011_test.rs +0 -0
  360. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md012_test.rs +0 -0
  361. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md013_test.rs +0 -0
  362. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md014_test.rs +0 -0
  363. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md018_test.rs +0 -0
  364. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md019_test.rs +0 -0
  365. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md020_test.rs +0 -0
  366. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md021_test.rs +0 -0
  367. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md022_test.rs +0 -0
  368. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md023_extended_test.rs +0 -0
  369. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md023_test.rs +0 -0
  370. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md024_test.rs +0 -0
  371. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md025_test.rs +0 -0
  372. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md026_kramdown_test.rs +0 -0
  373. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md026_test.rs +0 -0
  374. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md027_test.rs +0 -0
  375. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md028_md009_interaction_test.rs +0 -0
  376. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md028_test.rs +0 -0
  377. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md029_code_block_separation_test.rs +0 -0
  378. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md029_fix_test.rs +0 -0
  379. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md029_issue42_test.rs +0 -0
  380. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md029_markdownlint_parity_test.rs +0 -0
  381. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md029_pathological_edge_cases_test.rs +0 -0
  382. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md029_test.rs +0 -0
  383. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md029_unicode_test.rs +0 -0
  384. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md030_test.rs +0 -0
  385. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md031_kramdown_test.rs +0 -0
  386. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md031_test.rs +0 -0
  387. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md032_test.rs +0 -0
  388. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md033_extended_test.rs +0 -0
  389. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md033_kramdown_test.rs +0 -0
  390. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md033_test.rs +0 -0
  391. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md034_ipv6_test.rs +0 -0
  392. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md035_test.rs +0 -0
  393. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md036_test.rs +0 -0
  394. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md037_kramdown_test.rs +0 -0
  395. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md037_test.rs +0 -0
  396. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md038_nested_backticks_test.rs +0 -0
  397. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md038_test.rs +0 -0
  398. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md039_test.rs +0 -0
  399. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md040_test.rs +0 -0
  400. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md041_test.rs +0 -0
  401. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md043_test.rs +0 -0
  402. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md044_test.rs +0 -0
  403. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md045_test.rs +0 -0
  404. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md046_test.rs +0 -0
  405. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md047_test.rs +0 -0
  406. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md048_test.rs +0 -0
  407. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md049_test.rs +0 -0
  408. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md050_test.rs +0 -0
  409. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md051_critical_edge_cases_test.rs +0 -0
  410. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md051_edge_cases_test.rs +0 -0
  411. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md051_issue_39_regression_test.rs +0 -0
  412. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md051_performance_edge_cases_test.rs +0 -0
  413. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md051_property_based_test.rs +0 -0
  414. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md051_regression_prevention_test.rs +0 -0
  415. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md051_test.rs +0 -0
  416. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md051_unicode_security_test.rs +0 -0
  417. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md052_test.rs +0 -0
  418. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md053_additional_test.rs +0 -0
  419. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md053_proptest.rs +0 -0
  420. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md053_test.rs +0 -0
  421. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md054_test.rs +0 -0
  422. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md054_unicode_test.rs +0 -0
  423. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md055_test.rs +0 -0
  424. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md056_test.rs +0 -0
  425. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md057_test.rs +0 -0
  426. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md058_kramdown_test.rs +0 -0
  427. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/md058_test.rs +0 -0
  428. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/mkdocs_admonitions_test.rs +0 -0
  429. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/mkdocs_edge_cases_test.rs +0 -0
  430. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/mkdocs_extensions_test.rs +0 -0
  431. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/mkdocs_snippets_test.rs +0 -0
  432. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules/rule_interaction_test.rs +0 -0
  433. {rumdl-0.0.156 → rumdl-0.0.157}/tests/rules_mod_test.rs +0 -0
  434. {rumdl-0.0.156 → rumdl-0.0.157}/tests/sentence_per_line_test.rs +0 -0
  435. {rumdl-0.0.156 → rumdl-0.0.157}/tests/skip_context_tests.rs +0 -0
  436. {rumdl-0.0.156 → rumdl-0.0.157}/tests/test_ast_code_block_issue.rs +0 -0
  437. {rumdl-0.0.156 → rumdl-0.0.157}/tests/test_gfm_vs_default_parsing.rs +0 -0
  438. {rumdl-0.0.156 → rumdl-0.0.157}/tests/test_lint_context_flow.rs +0 -0
  439. {rumdl-0.0.156 → rumdl-0.0.157}/tests/test_list_ast_structure.rs +0 -0
  440. {rumdl-0.0.156 → rumdl-0.0.157}/tests/test_multiline_ast.rs +0 -0
  441. {rumdl-0.0.156 → rumdl-0.0.157}/tests/test_underscore_edge_cases.rs +0 -0
  442. {rumdl-0.0.156 → rumdl-0.0.157}/tests/thread_safety_tests.rs +0 -0
  443. {rumdl-0.0.156 → rumdl-0.0.157}/tests/unfixable_rules_test.rs +0 -0
  444. {rumdl-0.0.156 → rumdl-0.0.157}/tests/unicode_edge_case_tests.rs +0 -0
  445. {rumdl-0.0.156 → rumdl-0.0.157}/tests/utf8_boundary_tests.rs +0 -0
  446. {rumdl-0.0.156 → rumdl-0.0.157}/tests/utils/blockquote_utils_test.rs +0 -0
  447. {rumdl-0.0.156 → rumdl-0.0.157}/tests/utils/code_block_utils_extended_test.rs +0 -0
  448. {rumdl-0.0.156 → rumdl-0.0.157}/tests/utils/code_block_utils_test.rs +0 -0
  449. {rumdl-0.0.156 → rumdl-0.0.157}/tests/utils/core_utils_test.rs +0 -0
  450. {rumdl-0.0.156 → rumdl-0.0.157}/tests/utils/front_matter_utils_test.rs +0 -0
  451. {rumdl-0.0.156 → rumdl-0.0.157}/tests/utils/line_index_test.rs +0 -0
  452. {rumdl-0.0.156 → rumdl-0.0.157}/tests/utils/mod.rs +0 -0
  453. {rumdl-0.0.156 → rumdl-0.0.157}/tests/utils_markdown_edge_cases.rs +0 -0
  454. {rumdl-0.0.156 → rumdl-0.0.157}/tests/utils_tests.rs +0 -0
  455. {rumdl-0.0.156 → rumdl-0.0.157}/tests/vscode_extension_fixes.rs +0 -0
  456. {rumdl-0.0.156 → rumdl-0.0.157}/tests/vscode_test.rs +0 -0
  457. {rumdl-0.0.156 → rumdl-0.0.157}/tests/vscode_tests.rs +0 -0
  458. {rumdl-0.0.156 → rumdl-0.0.157}/tests/vscode_windows_comprehensive_test.rs +0 -0
  459. {rumdl-0.0.156 → rumdl-0.0.157}/tests/vscode_windows_test.rs +0 -0
@@ -7,6 +7,191 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.0.157] - 2025-10-13 (unreleased)
11
+
12
+ ### Added
13
+
14
+ - **MD042**: Full support for MkDocs paragraph anchors (#100)
15
+ - Recognize Python-Markdown `attr_list` extension syntax: `[](){ #anchor }`
16
+ - Support for both anchor IDs (`#id`) and CSS classes (`.class`)
17
+ - Support optional colon syntax: `[](){: #anchor }`
18
+ - UTF-8 boundary validation and DoS prevention (500 char limit)
19
+ - 28 comprehensive tests covering edge cases
20
+ - Complete documentation with links to official Python-Markdown specs
21
+ - References: [attr_list](https://python-markdown.github.io/extensions/attr_list/), [mkdocs-autorefs](https://mkdocstrings.github.io/autorefs/)
22
+
23
+ - **MD042**: Smart URL detection in empty links (#104)
24
+ - When link text looks like a URL (e.g., `[https://example.com]()`), use it as the destination
25
+ - Supports http://, https://, ftp://, ftps:// protocols
26
+ - More intelligent fixes than placeholder URLs
27
+
28
+ - **Always respect exclude patterns by default** (#99)
29
+ - Exclude patterns now always respected, even for explicitly provided files
30
+ - Matches behavior of ESLint, Pylint, Mypy
31
+ - Added `--no-exclude` flag to disable all exclusions when needed
32
+ - LSP support for exclude patterns
33
+ - Shows warnings with actionable hints when excluding files
34
+
35
+ - **Hidden directory scanning** (#102)
36
+ - Now scans hidden directories (like `.documentation`) by default
37
+ - More thorough markdown file discovery
38
+
39
+ ### Fixed
40
+
41
+ - **MD033**: Code blocks in blockquotes false positives (#105)
42
+ - Fixed incorrect flagging of HTML tags inside fenced code blocks within blockquotes
43
+ - Properly strips blockquote markers before detecting fence markers
44
+ - 25 new tests covering nested blockquotes and edge cases
45
+
46
+ - **MD034**: Empty link construct false positives (#104)
47
+ - Fixed incorrect flagging of URLs in `[url]()` and `[url][]` patterns
48
+ - Prevents text corruption during formatting
49
+ - Added patterns to properly exclude empty link constructs
50
+
51
+ - **MD042**: Improved fix quality
52
+ - Removed "useless" placeholder fixes that just create new problems
53
+ - Only provides fixes when we have enough information for valid links
54
+ - No longer auto-fixes `[]()` or `[text]()` with placeholders
55
+
56
+ ### Changed
57
+
58
+ - **BREAKING**: Exclude patterns now always respected by default
59
+ - Previously: `--force-exclude` flag needed to respect excludes for explicit files
60
+ - Now: Excludes always respected by default
61
+ - Migration: Use `--no-exclude` flag if you need the old behavior
62
+
63
+ ## [0.0.156] - 2025-10-08
64
+
65
+ ### Fixed
66
+
67
+ - **Build**: Removed feature-gated benchmark binaries that were causing unnecessary reinstalls
68
+ - Benchmark binaries now only built when explicitly requested
69
+ - Reduces package size and installation time
70
+
71
+ ## [0.0.155] - 2025-10-08
72
+
73
+ ### Fixed
74
+
75
+ - **PyPI Package**: Fixed package structure by removing unused cdylib and dependencies
76
+ - Removed unnecessary C dynamic library configuration
77
+ - Cleaner Python package distribution
78
+
79
+ ## [0.0.154] - 2025-10-08
80
+
81
+ ### Fixed
82
+
83
+ - **MD013**: Implemented segment-based reflow to preserve hard breaks
84
+ - Properly handles double-space line breaks
85
+ - Integration tests updated for new behavior
86
+
87
+ ### Performance
88
+
89
+ - **MD034**: Reuse buffers to reduce per-line allocations
90
+ - **MD005**: Eliminate LineIndex creation overhead
91
+ - **MD030**: Eliminate O(n²) complexity by caching line collection
92
+
93
+ ### Documentation
94
+
95
+ - Organized LintContext optimization documentation
96
+
97
+ ## [0.0.153] - 2025-10-07
98
+
99
+ ### Performance
100
+
101
+ - **Major optimization**: 54 rules now use LintContext character frequency caching
102
+ - Significant performance improvement across the board
103
+ - Reduced redundant scanning of document content
104
+
105
+ - **MD051**: Optimized link fragment validation
106
+ - Faster processing of heading anchors and fragments
107
+
108
+ ### Fixed
109
+
110
+ - **MD013**: Improved nested list handling in reflow mode
111
+ - Better preservation of list structure during reformatting
112
+
113
+ ## [0.0.152] - 2025-10-06
114
+
115
+ ### Fixed
116
+
117
+ - **MD013**: Multi-paragraph list reflow improvements and refactoring
118
+ - Better handling of complex list structures
119
+ - More reliable paragraph detection within lists
120
+
121
+ ## [0.0.151] - 2025-10-05
122
+
123
+ ### Fixed
124
+
125
+ - **MD007**: Fixed tab indentation and cascade behavior
126
+ - Properly handles tabs in list indentation
127
+ - Correct cascade behavior matching markdownlint
128
+
129
+ ## [0.0.150] - 2025-10-04
130
+
131
+ ### Fixed
132
+
133
+ - **MD007**: Multiple fixes for list indentation
134
+ - Correct blockquote list handling
135
+ - Fixed text-aligned indentation to match markdownlint cascade behavior
136
+ - Updated test expectations for cascade behavior
137
+
138
+ ## [0.0.149] - 2025-10-03
139
+
140
+ ### Added
141
+
142
+ - **Configuration**: JSON Schema for rumdl.toml configuration (#89)
143
+ - IDE autocomplete and validation support
144
+ - Better configuration documentation
145
+
146
+ - **Configuration**: Per-file rule ignores (#92)
147
+ - Glob pattern support for ignoring rules on specific files
148
+ - Example: `[per-file-ignores] "docs/*.md" = ["MD013"]`
149
+
150
+ ## [0.0.148] - 2025-10-02
151
+
152
+ ### Fixed
153
+
154
+ - **MD042**: Display improvements
155
+ - Show exact source text in error messages
156
+ - Correct display of shorthand reference links
157
+
158
+ - **MkDocs**: Strip backticks from MkDocs auto-references (#97)
159
+ - Prevents false positives on `` [`module.Class`][] `` patterns
160
+
161
+ ## [0.0.147] - 2025-10-01
162
+
163
+ ### Added
164
+
165
+ - **MkDocs**: Added mkdocstrings support (#94)
166
+ - Recognizes mkdocstrings YAML options
167
+ - Multiple rules migrated to use LintContext for better MkDocs handling
168
+
169
+ ### Fixed
170
+
171
+ - **MD041**: Removed auto-fix capability (#93)
172
+ - Auto-fixing front-heading violations was unreliable
173
+ - Now only reports issues without attempting fixes
174
+
175
+ - **MD026**: Corrected documentation to match implementation (#95)
176
+ - Documentation now accurately reflects punctuation handling
177
+
178
+ - **Jinja2**: Added Jinja2 template support (#96)
179
+ - Prevents false positives in template syntax
180
+ - Better support for MkDocs projects using Jinja2
181
+
182
+ - **MD013**: Prevent false positives for already-reflowed content
183
+ - Smarter detection of intentional line breaks
184
+
185
+ - **MD034**: Properly excludes URLs/emails in code spans and HTML
186
+ - No more false positives on inline code URLs
187
+
188
+ - **MD054**: Fixed column indexing bug
189
+ - Correct error position reporting
190
+
191
+ - **MD033 & MD032**: Resolved false positives (#90, #91)
192
+ - More accurate HTML tag detection
193
+ - Better handling of code blocks
194
+
10
195
  ## [0.0.146] - 2025-09-24
11
196
 
12
197
  ### Added
@@ -1566,7 +1566,7 @@ checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001"
1566
1566
 
1567
1567
  [[package]]
1568
1568
  name = "rumdl"
1569
- version = "0.0.156"
1569
+ version = "0.0.157"
1570
1570
  dependencies = [
1571
1571
  "anyhow",
1572
1572
  "assert_cmd",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "rumdl"
3
- version = "0.0.156"
3
+ version = "0.0.157"
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)"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rumdl
3
- Version: 0.0.156
3
+ Version: 0.0.157
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -67,6 +67,34 @@ When enabled, this rule will:
67
67
  - Reference-style links are checked for both parts
68
68
  - Links with only whitespace are considered empty
69
69
 
70
+ ### MkDocs mode
71
+
72
+ When using MkDocs flavor (`flavor = "mkdocs"`), this rule recognizes valid MkDocs-specific syntax:
73
+
74
+ **Auto-references** (backtick-wrapped Python identifiers):
75
+
76
+ ```markdown
77
+ [`module.Class`][] <!-- Valid MkDocs auto-reference -->
78
+ [`str`][] <!-- Valid Python type reference -->
79
+ [`api.function`][] <!-- Valid API reference -->
80
+ ```
81
+
82
+ **Paragraph anchors** (using Python-Markdown attr_list extension):
83
+
84
+ ```markdown
85
+ [](){ #my-anchor } <!-- Valid anchor point -->
86
+ [](){ #anchor .class } <!-- Valid anchor with CSS class -->
87
+ [](){: #anchor } <!-- Valid with colon syntax -->
88
+ ```
89
+
90
+ These patterns create anchor points in documentation and are widely used in MkDocs projects with the `attr_list` extension.
91
+
92
+ **References:**
93
+
94
+ - [Python-Markdown attr_list extension](https://python-markdown.github.io/extensions/attr_list/)
95
+ - [mkdocs-autorefs plugin](https://mkdocstrings.github.io/autorefs/)
96
+ - [MkDocs auto-references discussion](https://github.com/mkdocs/mkdocs/discussions/3754)
97
+
70
98
  ## Learn more
71
99
 
72
100
  - [CommonMark specification for links](https://spec.commonmark.org/0.31.2/#links)
@@ -251,11 +251,12 @@ pub struct GlobalConfig {
251
251
  #[serde(default)]
252
252
  pub flavor: MarkdownFlavor,
253
253
 
254
- /// Whether to enforce exclude and extend-exclude patterns even for paths that are passed explicitly.
255
- /// By default (false), rumdl will lint any paths passed in directly, even if they would typically be excluded.
256
- /// Setting this to true will cause rumdl to respect exclusions unequivocally.
257
- /// This is useful for pre-commit, which explicitly passes all changed files.
254
+ /// [DEPRECATED] Whether to enforce exclude patterns for explicitly passed paths.
255
+ /// This option is deprecated as of v0.0.156 and has no effect.
256
+ /// Exclude patterns are now always respected, even for explicitly provided files.
257
+ /// This prevents duplication between rumdl config and tool configs like pre-commit.
258
258
  #[serde(default)]
259
+ #[deprecated(since = "0.0.156", note = "Exclude patterns are now always respected")]
259
260
  pub force_exclude: bool,
260
261
  }
261
262
 
@@ -269,6 +270,7 @@ fn default_line_length() -> u64 {
269
270
 
270
271
  // Add the Default impl
271
272
  impl Default for GlobalConfig {
273
+ #[allow(deprecated)]
272
274
  fn default() -> Self {
273
275
  Self {
274
276
  enable: Vec::new(),
@@ -1962,6 +1964,7 @@ impl From<SourcedConfig> for Config {
1962
1964
  }
1963
1965
  rules.insert(normalized_rule_name, RuleConfig { values });
1964
1966
  }
1967
+ #[allow(deprecated)]
1965
1968
  let global = GlobalConfig {
1966
1969
  enable: sourced.global.enable.value,
1967
1970
  disable: sourced.global.disable.value,
@@ -41,7 +41,8 @@ pub struct RumdlLanguageServer {
41
41
  /// Configuration for the LSP server
42
42
  config: Arc<RwLock<RumdlLspConfig>>,
43
43
  /// Rumdl core configuration
44
- rumdl_config: Arc<RwLock<Config>>,
44
+ #[cfg_attr(test, allow(dead_code))]
45
+ pub(crate) rumdl_config: Arc<RwLock<Config>>,
45
46
  /// Document store for open files and cached disk files
46
47
  documents: Arc<RwLock<HashMap<Url, DocumentEntry>>>,
47
48
  }
@@ -118,8 +119,63 @@ impl RumdlLanguageServer {
118
119
  filtered_rules
119
120
  }
120
121
 
122
+ /// Check if a file URI should be excluded based on exclude patterns
123
+ async fn should_exclude_uri(&self, uri: &Url) -> bool {
124
+ // Try to convert URI to file path
125
+ let file_path = match uri.to_file_path() {
126
+ Ok(path) => path,
127
+ Err(_) => return false, // If we can't get a path, don't exclude
128
+ };
129
+
130
+ let rumdl_config = self.rumdl_config.read().await;
131
+ let exclude_patterns = &rumdl_config.global.exclude;
132
+
133
+ // If no exclude patterns, don't exclude
134
+ if exclude_patterns.is_empty() {
135
+ return false;
136
+ }
137
+
138
+ // Convert path to relative path for pattern matching
139
+ // This matches the CLI behavior in find_markdown_files
140
+ let path_to_check = if file_path.is_absolute() {
141
+ // Try to make it relative to the current directory
142
+ if let Ok(cwd) = std::env::current_dir() {
143
+ // Canonicalize both paths to handle symlinks
144
+ if let (Ok(canonical_cwd), Ok(canonical_path)) = (cwd.canonicalize(), file_path.canonicalize()) {
145
+ if let Ok(relative) = canonical_path.strip_prefix(&canonical_cwd) {
146
+ relative.to_string_lossy().to_string()
147
+ } else {
148
+ // Path is absolute but not under cwd
149
+ file_path.to_string_lossy().to_string()
150
+ }
151
+ } else {
152
+ // Canonicalization failed
153
+ file_path.to_string_lossy().to_string()
154
+ }
155
+ } else {
156
+ file_path.to_string_lossy().to_string()
157
+ }
158
+ } else {
159
+ // Already relative
160
+ file_path.to_string_lossy().to_string()
161
+ };
162
+
163
+ // Check if path matches any exclude pattern
164
+ for pattern in exclude_patterns {
165
+ if let Ok(glob) = globset::Glob::new(pattern) {
166
+ let matcher = glob.compile_matcher();
167
+ if matcher.is_match(&path_to_check) {
168
+ log::debug!("Excluding file from LSP linting: {path_to_check}");
169
+ return true;
170
+ }
171
+ }
172
+ }
173
+
174
+ false
175
+ }
176
+
121
177
  /// Lint a document and return diagnostics
122
- async fn lint_document(&self, uri: &Url, text: &str) -> Result<Vec<Diagnostic>> {
178
+ pub(crate) async fn lint_document(&self, uri: &Url, text: &str) -> Result<Vec<Diagnostic>> {
123
179
  let config_guard = self.config.read().await;
124
180
 
125
181
  // Skip linting if disabled
@@ -130,6 +186,11 @@ impl RumdlLanguageServer {
130
186
  let lsp_config = config_guard.clone();
131
187
  drop(config_guard); // Release config lock early
132
188
 
189
+ // Check if file should be excluded based on exclude patterns
190
+ if self.should_exclude_uri(uri).await {
191
+ return Ok(Vec::new());
192
+ }
193
+
133
194
  // Get rumdl configuration
134
195
  let rumdl_config = self.rumdl_config.read().await;
135
196
  let all_rules = rules::all_rules(&rumdl_config);
@@ -168,7 +229,12 @@ impl RumdlLanguageServer {
168
229
  }
169
230
 
170
231
  /// Apply all available fixes to a document
171
- async fn apply_all_fixes(&self, _uri: &Url, text: &str) -> Result<Option<String>> {
232
+ async fn apply_all_fixes(&self, uri: &Url, text: &str) -> Result<Option<String>> {
233
+ // Check if file should be excluded based on exclude patterns
234
+ if self.should_exclude_uri(uri).await {
235
+ return Ok(None);
236
+ }
237
+
172
238
  let config_guard = self.config.read().await;
173
239
  let lsp_config = config_guard.clone();
174
240
  drop(config_guard);
@@ -254,6 +254,10 @@ struct CheckArgs {
254
254
  #[arg(long)]
255
255
  exclude: Option<String>,
256
256
 
257
+ /// Disable all exclude patterns (lint all files regardless of exclude configuration)
258
+ #[arg(long, help = "Disable all exclude patterns")]
259
+ no_exclude: bool,
260
+
257
261
  /// Include only specific files or directories (comma-separated glob patterns).
258
262
  #[arg(long)]
259
263
  include: Option<String>,
@@ -532,8 +536,10 @@ fn find_markdown_files(
532
536
  Vec::new()
533
537
  };
534
538
 
535
- // Exclude patterns: CLI > Config
536
- let final_exclude_patterns: Vec<String> = if let Some(cli_exclude) = args.exclude.as_deref() {
539
+ // Exclude patterns: CLI > Config (but disabled if --no-exclude is set)
540
+ let final_exclude_patterns: Vec<String> = if args.no_exclude {
541
+ Vec::new() // Disable all exclusions
542
+ } else if let Some(cli_exclude) = args.exclude.as_deref() {
537
543
  cli_exclude
538
544
  .split(',')
539
545
  .map(|p| p.trim().to_string())
@@ -599,7 +605,7 @@ fn find_markdown_files(
599
605
  walk_builder.git_global(use_gitignore); // Enable/disable global gitignore
600
606
  walk_builder.git_exclude(use_gitignore); // Enable/disable .git/info/exclude
601
607
  walk_builder.parents(use_gitignore); // Enable/disable parent ignores
602
- walk_builder.hidden(true); // Keep hidden files ignored unconditionally
608
+ walk_builder.hidden(false); // Include hidden files and directories
603
609
  walk_builder.require_git(false); // Process git ignores even if no repo detected
604
610
 
605
611
  // Add support for .markdownlintignore file
@@ -608,8 +614,7 @@ fn find_markdown_files(
608
614
  // --- Pre-check for explicit file paths ---
609
615
  // If not in discovery mode, validate that specified paths exist
610
616
  if !is_discovery_mode {
611
- // Check if we should apply excludes to explicitly provided files
612
- let should_force_exclude = args.force_exclude || config.global.force_exclude;
617
+ let mut processed_explicit_files = false;
613
618
 
614
619
  for path_str in paths {
615
620
  let path = Path::new(path_str);
@@ -621,42 +626,68 @@ fn find_markdown_files(
621
626
  && let Some(ext) = path.extension()
622
627
  && (ext == "md" || ext == "markdown")
623
628
  {
624
- let cleaned_path = if let Some(stripped) = path_str.strip_prefix("./") {
629
+ processed_explicit_files = true;
630
+ // Convert to relative path for pattern matching
631
+ // This ensures patterns like "docs/*" work with both relative and absolute paths
632
+ let cleaned_path = if path.is_absolute() {
633
+ // Try to make it relative to the current directory
634
+ // Use canonicalized paths to handle symlinks (e.g., /tmp -> /private/tmp on macOS)
635
+ if let Ok(cwd) = std::env::current_dir() {
636
+ // Canonicalize both paths to resolve symlinks
637
+ if let (Ok(canonical_cwd), Ok(canonical_path)) = (cwd.canonicalize(), path.canonicalize()) {
638
+ if let Ok(relative) = canonical_path.strip_prefix(&canonical_cwd) {
639
+ relative.to_string_lossy().to_string()
640
+ } else {
641
+ // Path is absolute but not under cwd, keep as-is
642
+ path_str.clone()
643
+ }
644
+ } else {
645
+ // Canonicalization failed, keep path as-is
646
+ path_str.clone()
647
+ }
648
+ } else {
649
+ path_str.clone()
650
+ }
651
+ } else if let Some(stripped) = path_str.strip_prefix("./") {
625
652
  stripped.to_string()
626
653
  } else {
627
654
  path_str.clone()
628
655
  };
629
656
 
630
- // If force_exclude is enabled, check if this file should be excluded
631
- if should_force_exclude && !final_exclude_patterns.is_empty() {
632
- let mut should_exclude = false;
657
+ // Check if this file should be excluded based on exclude patterns
658
+ // This is the default behavior to match user expectations and avoid
659
+ // duplication between rumdl config and pre-commit config (issue #99)
660
+ if !final_exclude_patterns.is_empty() {
661
+ let mut matching_pattern: Option<&str> = None;
633
662
  for pattern in &final_exclude_patterns {
634
663
  // Use globset for pattern matching
635
664
  if let Ok(glob) = globset::Glob::new(pattern) {
636
665
  let matcher = glob.compile_matcher();
637
666
  if matcher.is_match(&cleaned_path) {
638
- should_exclude = true;
639
- if args.verbose {
640
- eprintln!(
641
- "Excluding explicitly provided file due to force_exclude: {cleaned_path}"
642
- );
643
- }
667
+ matching_pattern = Some(pattern);
644
668
  break;
645
669
  }
646
670
  }
647
671
  }
648
- if !should_exclude {
672
+ if let Some(pattern) = matching_pattern {
673
+ // Always print a warning when excluding explicitly provided files
674
+ // This matches ESLint's behavior and helps users understand why the file wasn't linted
675
+ eprintln!(
676
+ "warning: {cleaned_path} ignored because of exclude pattern '{pattern}'. Use --no-exclude to override"
677
+ );
678
+ } else {
649
679
  file_paths.push(cleaned_path);
650
680
  }
651
681
  } else {
652
- // Default behavior: add all explicitly provided files
682
+ // No exclude patterns, add the file
653
683
  file_paths.push(cleaned_path);
654
684
  }
655
685
  }
656
686
  }
657
687
 
658
- // If we found files directly, skip the walker
659
- if !file_paths.is_empty() || should_force_exclude {
688
+ // If we processed explicit files, return the results (even if empty due to exclusions)
689
+ // This prevents the walker from running when explicit files were provided
690
+ if processed_explicit_files {
660
691
  file_paths.sort();
661
692
  file_paths.dedup();
662
693
  return Ok(file_paths);
@@ -2532,6 +2563,16 @@ fn run_check(args: &CheckArgs, global_config_path: Option<&str>, isolated: bool)
2532
2563
  exit::tool_error();
2533
2564
  }
2534
2565
 
2566
+ // Warn about deprecated --force-exclude flag
2567
+ if args.force_exclude {
2568
+ eprintln!(
2569
+ "{}: --force-exclude is deprecated and has no effect",
2570
+ "warning".yellow().bold()
2571
+ );
2572
+ eprintln!("Exclude patterns are now always respected by default (as of v0.0.156)");
2573
+ eprintln!("Use --no-exclude if you want to disable exclusions");
2574
+ }
2575
+
2535
2576
  // Check for watch mode
2536
2577
  if args.watch {
2537
2578
  run_watch_mode(args, global_config_path, isolated, quiet);
@@ -11,6 +11,8 @@ use crate::lint_context::LintContext;
11
11
  const URL_QUICK_CHECK_STR: &str = r#"(?:https?|ftps?)://|@"#;
12
12
  const CUSTOM_PROTOCOL_PATTERN_STR: &str = r#"(?:grpc|ws|wss|ssh|git|svn|file|data|javascript|vscode|chrome|about|slack|discord|matrix|irc|redis|mongodb|postgresql|mysql|kafka|nats|amqp|mqtt|custom|app|api|service)://"#;
13
13
  const MARKDOWN_LINK_PATTERN_STR: &str = r#"\[(?:[^\[\]]|\[[^\]]*\])*\]\(([^)\s]+)(?:\s+(?:\"[^\"]*\"|\'[^\']*\'))?\)"#;
14
+ const MARKDOWN_EMPTY_LINK_PATTERN_STR: &str = r#"\[(?:[^\[\]]|\[[^\]]*\])*\]\(\)"#;
15
+ const MARKDOWN_EMPTY_REF_PATTERN_STR: &str = r#"\[(?:[^\[\]]|\[[^\]]*\])*\]\[\]"#;
14
16
  const ANGLE_LINK_PATTERN_STR: &str =
15
17
  r#"<((?:https?|ftps?)://(?:\[[0-9a-fA-F:]+(?:%[a-zA-Z0-9]+)?\]|[^>]+)|[^@\s]+@[^@\s]+\.[^@\s>]+)>"#;
16
18
  const BADGE_LINK_LINE_STR: &str = r#"^\s*\[!\[[^\]]*\]\([^)]*\)\]\([^)]*\)\s*$"#;
@@ -163,6 +165,19 @@ impl MD034NoBareUrls {
163
165
  }
164
166
  }
165
167
 
168
+ // Also include empty link patterns like [text]() and [text][]
169
+ if let Ok(re) = get_cached_regex(MARKDOWN_EMPTY_LINK_PATTERN_STR) {
170
+ for mat in re.find_iter(line) {
171
+ buffers.markdown_link_ranges.push((mat.start(), mat.end()));
172
+ }
173
+ }
174
+
175
+ if let Ok(re) = get_cached_regex(MARKDOWN_EMPTY_REF_PATTERN_STR) {
176
+ for mat in re.find_iter(line) {
177
+ buffers.markdown_link_ranges.push((mat.start(), mat.end()));
178
+ }
179
+ }
180
+
166
181
  if let Ok(re) = get_cached_regex(ANGLE_LINK_PATTERN_STR) {
167
182
  for cap in re.captures_iter(line) {
168
183
  if let Some(mat) = cap.get(0) {