rumdl 0.0.153__tar.gz → 0.0.155__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.153 → rumdl-0.0.155}/Cargo.lock +1 -113
  2. {rumdl-0.0.153 → rumdl-0.0.155}/Cargo.toml +2 -8
  3. {rumdl-0.0.153 → rumdl-0.0.155}/PKG-INFO +1 -1
  4. rumdl-0.0.155/docs/LINTCONTEXT_OPTIMIZATION_PLAN.md +311 -0
  5. rumdl-0.0.155/docs/LINTCONTEXT_OPTIMIZATION_SUMMARY.md +251 -0
  6. rumdl-0.0.155/docs/LINTCONTEXT_PERFORMANCE_ANALYSIS.md +240 -0
  7. rumdl-0.0.155/docs/PHASE_2_OPTIMIZATION_COMPLETE.md +284 -0
  8. rumdl-0.0.155/docs/PHASE_3_OPTIMIZATION_COMPLETE.md +175 -0
  9. {rumdl-0.0.153 → rumdl-0.0.155}/pyproject.toml +1 -1
  10. rumdl-0.0.155/rumdl/__init__.py +11 -0
  11. {rumdl-0.0.153 → rumdl-0.0.155}/src/fix_coordinator.rs +2 -1
  12. {rumdl-0.0.153 → rumdl-0.0.155}/src/lib.rs +0 -3
  13. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md005_list_indent.rs +5 -5
  14. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md013_line_length.rs +114 -23
  15. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md030_list_marker_space.rs +4 -4
  16. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md034_no_bare_urls.rs +28 -16
  17. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/text_reflow.rs +76 -6
  18. {rumdl-0.0.153 → rumdl-0.0.155}/src/vscode.rs +1 -5
  19. rumdl-0.0.155/tests/md009_md013_integration_test.rs +172 -0
  20. rumdl-0.0.155/tests/md009_md013_order_test.rs +39 -0
  21. rumdl-0.0.155/tests/md013_hard_breaks_test.rs +294 -0
  22. rumdl-0.0.153/python/MANIFEST.in +0 -9
  23. rumdl-0.0.153/python/PYTHON-README.md +0 -57
  24. rumdl-0.0.153/python/rumdl/__init__.py +0 -5
  25. rumdl-0.0.153/src/python.rs +0 -246
  26. rumdl-0.0.153/tests/python_bindings_test.rs +0 -40
  27. {rumdl-0.0.153 → rumdl-0.0.155}/.config/nextest.toml +0 -0
  28. {rumdl-0.0.153 → rumdl-0.0.155}/.mise.toml +0 -0
  29. {rumdl-0.0.153 → rumdl-0.0.155}/.pre-commit-config.yaml +0 -0
  30. {rumdl-0.0.153 → rumdl-0.0.155}/.rumdl.toml +0 -0
  31. {rumdl-0.0.153 → rumdl-0.0.155}/.rustfmt.toml +0 -0
  32. {rumdl-0.0.153 → rumdl-0.0.155}/CHANGELOG.md +0 -0
  33. {rumdl-0.0.153 → rumdl-0.0.155}/LICENSE +0 -0
  34. {rumdl-0.0.153 → rumdl-0.0.155}/MANIFEST.in +0 -0
  35. {rumdl-0.0.153 → rumdl-0.0.155}/Makefile +0 -0
  36. {rumdl-0.0.153 → rumdl-0.0.155}/README.md +0 -0
  37. {rumdl-0.0.153 → rumdl-0.0.155}/assets/logo.png +0 -0
  38. {rumdl-0.0.153 → rumdl-0.0.155}/benches/fix_performance.rs +0 -0
  39. {rumdl-0.0.153 → rumdl-0.0.155}/benches/range_performance.rs +0 -0
  40. {rumdl-0.0.153 → rumdl-0.0.155}/benches/range_utils_benchmark.rs +0 -0
  41. {rumdl-0.0.153 → rumdl-0.0.155}/benches/rule_performance.rs +0 -0
  42. {rumdl-0.0.153 → rumdl-0.0.155}/benches/simple_fix_bench.rs +0 -0
  43. {rumdl-0.0.153 → rumdl-0.0.155}/benchmark/bin/bench_lint_context.rs +0 -0
  44. {rumdl-0.0.153 → rumdl-0.0.155}/benchmark/bin/benchmark.rs +0 -0
  45. {rumdl-0.0.153 → rumdl-0.0.155}/benchmark/bin/benchmark_rule.rs +0 -0
  46. {rumdl-0.0.153 → rumdl-0.0.155}/benchmark/bin/file_parallel_benchmark.rs +0 -0
  47. {rumdl-0.0.153 → rumdl-0.0.155}/benchmark/bin/measure_code_span_performance.rs +0 -0
  48. {rumdl-0.0.153 → rumdl-0.0.155}/docs/RULES.md +0 -0
  49. {rumdl-0.0.153 → rumdl-0.0.155}/docs/global-settings.md +0 -0
  50. {rumdl-0.0.153 → rumdl-0.0.155}/docs/inline-configuration.md +0 -0
  51. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md001.md +0 -0
  52. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md002.md +0 -0
  53. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md003.md +0 -0
  54. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md004.md +0 -0
  55. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md005.md +0 -0
  56. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md006.md +0 -0
  57. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md007.md +0 -0
  58. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md009.md +0 -0
  59. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md010.md +0 -0
  60. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md011.md +0 -0
  61. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md012.md +0 -0
  62. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md013.md +0 -0
  63. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md014.md +0 -0
  64. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md018.md +0 -0
  65. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md019.md +0 -0
  66. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md020.md +0 -0
  67. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md021.md +0 -0
  68. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md022.md +0 -0
  69. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md023.md +0 -0
  70. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md024.md +0 -0
  71. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md025.md +0 -0
  72. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md026.md +0 -0
  73. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md027.md +0 -0
  74. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md028.md +0 -0
  75. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md029.md +0 -0
  76. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md030.md +0 -0
  77. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md031.md +0 -0
  78. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md032.md +0 -0
  79. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md033.md +0 -0
  80. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md034.md +0 -0
  81. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md035.md +0 -0
  82. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md036.md +0 -0
  83. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md037.md +0 -0
  84. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md038.md +0 -0
  85. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md039.md +0 -0
  86. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md040.md +0 -0
  87. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md041.md +0 -0
  88. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md042.md +0 -0
  89. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md043.md +0 -0
  90. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md044.md +0 -0
  91. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md045.md +0 -0
  92. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md046.md +0 -0
  93. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md047.md +0 -0
  94. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md048.md +0 -0
  95. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md049.md +0 -0
  96. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md050.md +0 -0
  97. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md051.md +0 -0
  98. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md052.md +0 -0
  99. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md053.md +0 -0
  100. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md054.md +0 -0
  101. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md055.md +0 -0
  102. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md056.md +0 -0
  103. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md057.md +0 -0
  104. {rumdl-0.0.153 → rumdl-0.0.155}/docs/md058.md +0 -0
  105. {rumdl-0.0.153 → rumdl-0.0.155}/docs/vscode-extension.md +0 -0
  106. {rumdl-0.0.153 → rumdl-0.0.155}/parity_check.py +0 -0
  107. {rumdl-0.0.153/python → rumdl-0.0.155}/rumdl/__main__.py +0 -0
  108. {rumdl-0.0.153/python → rumdl-0.0.155}/rumdl/py.typed +0 -0
  109. {rumdl-0.0.153 → rumdl-0.0.155}/rumdl.schema.json +0 -0
  110. {rumdl-0.0.153 → rumdl-0.0.155}/rumdl.toml.example +0 -0
  111. {rumdl-0.0.153 → rumdl-0.0.155}/rust-toolchain.toml +0 -0
  112. {rumdl-0.0.153 → rumdl-0.0.155}/scripts/extract-changelog.sh +0 -0
  113. {rumdl-0.0.153 → rumdl-0.0.155}/scripts/generate-downloads-table.sh +0 -0
  114. {rumdl-0.0.153 → rumdl-0.0.155}/scripts/pre-release.sh +0 -0
  115. {rumdl-0.0.153 → rumdl-0.0.155}/scripts/prepare-release.sh +0 -0
  116. {rumdl-0.0.153 → rumdl-0.0.155}/scripts/setup-pre-commit.sh +0 -0
  117. {rumdl-0.0.153 → rumdl-0.0.155}/scripts/update-pre-commit-docs.sh +0 -0
  118. {rumdl-0.0.153 → rumdl-0.0.155}/src/config.rs +0 -0
  119. {rumdl-0.0.153 → rumdl-0.0.155}/src/exit_codes.rs +0 -0
  120. {rumdl-0.0.153 → rumdl-0.0.155}/src/inline_config.rs +0 -0
  121. {rumdl-0.0.153 → rumdl-0.0.155}/src/lint_context.rs +0 -0
  122. {rumdl-0.0.153 → rumdl-0.0.155}/src/lsp/mod.rs +0 -0
  123. {rumdl-0.0.153 → rumdl-0.0.155}/src/lsp/server.rs +0 -0
  124. {rumdl-0.0.153 → rumdl-0.0.155}/src/lsp/types.rs +0 -0
  125. {rumdl-0.0.153 → rumdl-0.0.155}/src/main.rs +0 -0
  126. {rumdl-0.0.153 → rumdl-0.0.155}/src/markdownlint_config.rs +0 -0
  127. {rumdl-0.0.153 → rumdl-0.0.155}/src/output/formatters/azure.rs +0 -0
  128. {rumdl-0.0.153 → rumdl-0.0.155}/src/output/formatters/concise.rs +0 -0
  129. {rumdl-0.0.153 → rumdl-0.0.155}/src/output/formatters/github.rs +0 -0
  130. {rumdl-0.0.153 → rumdl-0.0.155}/src/output/formatters/gitlab.rs +0 -0
  131. {rumdl-0.0.153 → rumdl-0.0.155}/src/output/formatters/grouped.rs +0 -0
  132. {rumdl-0.0.153 → rumdl-0.0.155}/src/output/formatters/json.rs +0 -0
  133. {rumdl-0.0.153 → rumdl-0.0.155}/src/output/formatters/json_lines.rs +0 -0
  134. {rumdl-0.0.153 → rumdl-0.0.155}/src/output/formatters/junit.rs +0 -0
  135. {rumdl-0.0.153 → rumdl-0.0.155}/src/output/formatters/mod.rs +0 -0
  136. {rumdl-0.0.153 → rumdl-0.0.155}/src/output/formatters/pylint.rs +0 -0
  137. {rumdl-0.0.153 → rumdl-0.0.155}/src/output/formatters/sarif.rs +0 -0
  138. {rumdl-0.0.153 → rumdl-0.0.155}/src/output/formatters/text.rs +0 -0
  139. {rumdl-0.0.153 → rumdl-0.0.155}/src/output/mod.rs +0 -0
  140. {rumdl-0.0.153 → rumdl-0.0.155}/src/parallel.rs +0 -0
  141. {rumdl-0.0.153 → rumdl-0.0.155}/src/performance.rs +0 -0
  142. {rumdl-0.0.153 → rumdl-0.0.155}/src/profiling.rs +0 -0
  143. {rumdl-0.0.153 → rumdl-0.0.155}/src/rule.rs +0 -0
  144. {rumdl-0.0.153 → rumdl-0.0.155}/src/rule_config.rs +0 -0
  145. {rumdl-0.0.153 → rumdl-0.0.155}/src/rule_config_serde.rs +0 -0
  146. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/blockquote_utils.rs +0 -0
  147. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/code_block_utils.rs +0 -0
  148. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/code_fence_utils.rs +0 -0
  149. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/emphasis_style.rs +0 -0
  150. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/front_matter_utils.rs +0 -0
  151. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/heading_utils.rs +0 -0
  152. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/list_utils.rs +0 -0
  153. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md001_heading_increment.rs +0 -0
  154. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md002_first_heading_h1/md002_config.rs +0 -0
  155. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md002_first_heading_h1.rs +0 -0
  156. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md003_heading_style/md003_config.rs +0 -0
  157. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md003_heading_style.rs +0 -0
  158. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md004_unordered_list_style/md004_config.rs +0 -0
  159. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md004_unordered_list_style.rs +0 -0
  160. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md006_start_bullets.rs +0 -0
  161. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md007_ul_indent/md007_config.rs +0 -0
  162. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md007_ul_indent.rs +0 -0
  163. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md009_trailing_spaces/md009_config.rs +0 -0
  164. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md009_trailing_spaces.rs +0 -0
  165. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md010_no_hard_tabs/md010_config.rs +0 -0
  166. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md010_no_hard_tabs.rs +0 -0
  167. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md011_no_reversed_links.rs +0 -0
  168. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md012_no_multiple_blanks/md012_config.rs +0 -0
  169. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md012_no_multiple_blanks.rs +0 -0
  170. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md013_line_length/md013_config.rs +0 -0
  171. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md014_commands_show_output/md014_config.rs +0 -0
  172. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md014_commands_show_output.rs +0 -0
  173. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md018_no_missing_space_atx.rs +0 -0
  174. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md019_no_multiple_space_atx.rs +0 -0
  175. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
  176. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
  177. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md022_blanks_around_headings/md022_config.rs +0 -0
  178. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md022_blanks_around_headings.rs +0 -0
  179. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md023_heading_start_left.rs +0 -0
  180. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md024_no_duplicate_heading/md024_config.rs +0 -0
  181. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md024_no_duplicate_heading.rs +0 -0
  182. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md025_single_title/md025_config.rs +0 -0
  183. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md025_single_title.rs +0 -0
  184. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md026_no_trailing_punctuation/md026_config.rs +0 -0
  185. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md026_no_trailing_punctuation.rs +0 -0
  186. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
  187. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md028_no_blanks_blockquote.rs +0 -0
  188. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md029_ordered_list_prefix/md029_config.rs +0 -0
  189. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md029_ordered_list_prefix.rs +0 -0
  190. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md030_list_marker_space/md030_config.rs +0 -0
  191. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md031_blanks_around_fences.rs +0 -0
  192. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md032_blanks_around_lists.rs +0 -0
  193. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md033_no_inline_html/md033_config.rs +0 -0
  194. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md033_no_inline_html.rs +0 -0
  195. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md035_hr_style/md035_config.rs +0 -0
  196. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md035_hr_style.rs +0 -0
  197. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md036_no_emphasis_only_first/md036_config.rs +0 -0
  198. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md036_no_emphasis_only_first.rs +0 -0
  199. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md037_spaces_around_emphasis.rs +0 -0
  200. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md038_no_space_in_code.rs +0 -0
  201. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md039_no_space_in_links.rs +0 -0
  202. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md040_fenced_code_language.rs +0 -0
  203. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md041_first_line_heading.rs +0 -0
  204. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md042_no_empty_links.rs +0 -0
  205. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md043_required_headings.rs +0 -0
  206. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md044_proper_names/md044_config.rs +0 -0
  207. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md044_proper_names.rs +0 -0
  208. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md045_no_alt_text/md045_config.rs +0 -0
  209. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md045_no_alt_text.rs +0 -0
  210. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md046_code_block_style/md046_config.rs +0 -0
  211. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md046_code_block_style.rs +0 -0
  212. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md047_single_trailing_newline.rs +0 -0
  213. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md048_code_fence_style/md048_config.rs +0 -0
  214. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md048_code_fence_style.rs +0 -0
  215. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md049_emphasis_style/md049_config.rs +0 -0
  216. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md049_emphasis_style.rs +0 -0
  217. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md050_strong_style/md050_config.rs +0 -0
  218. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md050_strong_style.rs +0 -0
  219. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md051_link_fragments.rs +0 -0
  220. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md052_reference_links_images.rs +0 -0
  221. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md053_link_image_reference_definitions.rs +0 -0
  222. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md054_link_image_style/md054_config.rs +0 -0
  223. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md054_link_image_style.rs +0 -0
  224. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md055_table_pipe_style/md055_config.rs +0 -0
  225. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md055_table_pipe_style.rs +0 -0
  226. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md056_table_column_count.rs +0 -0
  227. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md057_existing_relative_links/md057_config.rs +0 -0
  228. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md057_existing_relative_links.rs +0 -0
  229. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/md058_blanks_around_tables.rs +0 -0
  230. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/mod.rs +0 -0
  231. {rumdl-0.0.153 → rumdl-0.0.155}/src/rules/strong_style.rs +0 -0
  232. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/anchor_styles/github.rs +0 -0
  233. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/anchor_styles/jekyll.rs +0 -0
  234. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/anchor_styles/kramdown.rs +0 -0
  235. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/anchor_styles/kramdown_gfm.rs +0 -0
  236. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/anchor_styles/mod.rs +0 -0
  237. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/ast_utils.rs +0 -0
  238. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/code_block_utils.rs +0 -0
  239. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/document_structure.rs +0 -0
  240. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/early_returns.rs +0 -0
  241. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/element_cache.rs +0 -0
  242. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/emphasis_utils.rs +0 -0
  243. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/fix_utils.rs +0 -0
  244. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/header_id_utils.rs +0 -0
  245. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/jinja_utils.rs +0 -0
  246. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/kramdown_utils.rs +0 -0
  247. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/line_ending.rs +0 -0
  248. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/markdown_elements.rs +0 -0
  249. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/mkdocs_admonitions.rs +0 -0
  250. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/mkdocs_common.rs +0 -0
  251. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/mkdocs_critic.rs +0 -0
  252. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/mkdocs_footnotes.rs +0 -0
  253. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/mkdocs_patterns.rs +0 -0
  254. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/mkdocs_snippets.rs +0 -0
  255. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/mkdocs_tabs.rs +0 -0
  256. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/mkdocs_test_utils.rs +0 -0
  257. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/mkdocstrings_refs.rs +0 -0
  258. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/mod.rs +0 -0
  259. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/range_utils.rs +0 -0
  260. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/regex_cache.rs +0 -0
  261. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/skip_context.rs +0 -0
  262. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/string_interner.rs +0 -0
  263. {rumdl-0.0.153 → rumdl-0.0.155}/src/utils/table_utils.rs +0 -0
  264. {rumdl-0.0.153 → rumdl-0.0.155}/tests/advanced_integration_tests.rs +0 -0
  265. {rumdl-0.0.153 → rumdl-0.0.155}/tests/character_ranges/additional_tests.rs +0 -0
  266. {rumdl-0.0.153 → rumdl-0.0.155}/tests/character_ranges/basic_tests.rs +0 -0
  267. {rumdl-0.0.153 → rumdl-0.0.155}/tests/character_ranges/comprehensive_tests.rs +0 -0
  268. {rumdl-0.0.153 → rumdl-0.0.155}/tests/character_ranges/extended_tests.rs +0 -0
  269. {rumdl-0.0.153 → rumdl-0.0.155}/tests/character_ranges/mod.rs +0 -0
  270. {rumdl-0.0.153 → rumdl-0.0.155}/tests/character_ranges/unicode_utils.rs +0 -0
  271. {rumdl-0.0.153 → rumdl-0.0.155}/tests/cli_duplication_test.rs +0 -0
  272. {rumdl-0.0.153 → rumdl-0.0.155}/tests/cli_explain_test.rs +0 -0
  273. {rumdl-0.0.153 → rumdl-0.0.155}/tests/cli_flag_precedence_test.rs +0 -0
  274. {rumdl-0.0.153 → rumdl-0.0.155}/tests/cli_integration_tests.rs +0 -0
  275. {rumdl-0.0.153 → rumdl-0.0.155}/tests/cli_lsp_fix_consistency.rs +0 -0
  276. {rumdl-0.0.153 → rumdl-0.0.155}/tests/cli_statistics_test.rs +0 -0
  277. {rumdl-0.0.153 → rumdl-0.0.155}/tests/common/cli_test_utils.rs +0 -0
  278. {rumdl-0.0.153 → rumdl-0.0.155}/tests/common/fixtures.rs +0 -0
  279. {rumdl-0.0.153 → rumdl-0.0.155}/tests/common/mod.rs +0 -0
  280. {rumdl-0.0.153 → rumdl-0.0.155}/tests/common/test_utils.rs +0 -0
  281. {rumdl-0.0.153 → rumdl-0.0.155}/tests/commonmark_compliance_tests.rs +0 -0
  282. {rumdl-0.0.153 → rumdl-0.0.155}/tests/comprehensive_integration_tests.rs +0 -0
  283. {rumdl-0.0.153 → rumdl-0.0.155}/tests/comprehensive_output_format_tests.rs +0 -0
  284. {rumdl-0.0.153 → rumdl-0.0.155}/tests/config_application_tests.rs +0 -0
  285. {rumdl-0.0.153 → rumdl-0.0.155}/tests/config_file_command_test.rs +0 -0
  286. {rumdl-0.0.153 → rumdl-0.0.155}/tests/config_tests.rs +0 -0
  287. {rumdl-0.0.153 → rumdl-0.0.155}/tests/config_upward_traversal_test.rs +0 -0
  288. {rumdl-0.0.153 → rumdl-0.0.155}/tests/configuration_inheritance_tests.rs +0 -0
  289. {rumdl-0.0.153 → rumdl-0.0.155}/tests/consistency_regression_tests.rs +0 -0
  290. {rumdl-0.0.153 → rumdl-0.0.155}/tests/cross_platform_compatibility_tests.rs +0 -0
  291. {rumdl-0.0.153 → rumdl-0.0.155}/tests/deeply_nested_lists_performance_test.rs +0 -0
  292. {rumdl-0.0.153 → rumdl-0.0.155}/tests/escaped_brackets_test.rs +0 -0
  293. {rumdl-0.0.153 → rumdl-0.0.155}/tests/final_confidence_assessment.rs +0 -0
  294. {rumdl-0.0.153 → rumdl-0.0.155}/tests/fix_counting_test.rs +0 -0
  295. {rumdl-0.0.153 → rumdl-0.0.155}/tests/fix_performance_baseline_test.rs +0 -0
  296. {rumdl-0.0.153 → rumdl-0.0.155}/tests/fixable_unfixable_config_test.rs +0 -0
  297. {rumdl-0.0.153 → rumdl-0.0.155}/tests/init_command_test.rs +0 -0
  298. {rumdl-0.0.153 → rumdl-0.0.155}/tests/init_tests.rs +0 -0
  299. {rumdl-0.0.153 → rumdl-0.0.155}/tests/inline_config_blocks_test.rs +0 -0
  300. {rumdl-0.0.153 → rumdl-0.0.155}/tests/inline_config_test.rs +0 -0
  301. {rumdl-0.0.153 → rumdl-0.0.155}/tests/integration_tests.rs +0 -0
  302. {rumdl-0.0.153 → rumdl-0.0.155}/tests/json_output_test.rs +0 -0
  303. {rumdl-0.0.153 → rumdl-0.0.155}/tests/kramdown_integration_test.rs +0 -0
  304. {rumdl-0.0.153 → rumdl-0.0.155}/tests/lib.rs +0 -0
  305. {rumdl-0.0.153 → rumdl-0.0.155}/tests/lsp_editor_integration_tests.rs +0 -0
  306. {rumdl-0.0.153 → rumdl-0.0.155}/tests/lsp_formatting_tests.rs +0 -0
  307. {rumdl-0.0.153 → rumdl-0.0.155}/tests/lsp_initialization_options_test.rs +0 -0
  308. {rumdl-0.0.153 → rumdl-0.0.155}/tests/lsp_integration_tests.rs +0 -0
  309. {rumdl-0.0.153 → rumdl-0.0.155}/tests/lsp_memory_leak_tests.rs +0 -0
  310. {rumdl-0.0.153 → rumdl-0.0.155}/tests/lsp_mkdocs_flavor_test.rs +0 -0
  311. {rumdl-0.0.153 → rumdl-0.0.155}/tests/lsp_tests.rs +0 -0
  312. {rumdl-0.0.153 → rumdl-0.0.155}/tests/lsp_unopened_document_test.rs +0 -0
  313. {rumdl-0.0.153 → rumdl-0.0.155}/tests/malformed_markdown_stress_tests.rs +0 -0
  314. {rumdl-0.0.153 → rumdl-0.0.155}/tests/markdownlint_cli_integration.rs +0 -0
  315. {rumdl-0.0.153 → rumdl-0.0.155}/tests/markdownlint_config_test.rs +0 -0
  316. {rumdl-0.0.153 → rumdl-0.0.155}/tests/markdownlintignore_test.rs +0 -0
  317. {rumdl-0.0.153 → rumdl-0.0.155}/tests/md013_reflow_integration_test.rs +0 -0
  318. {rumdl-0.0.153 → rumdl-0.0.155}/tests/md032_edge_cases_test.rs +0 -0
  319. {rumdl-0.0.153 → rumdl-0.0.155}/tests/md032_ordered_list_bug_test.rs +0 -0
  320. {rumdl-0.0.153 → rumdl-0.0.155}/tests/md033_edge_cases_test.rs +0 -0
  321. {rumdl-0.0.153 → rumdl-0.0.155}/tests/md037_xxxx_regression_test.rs +0 -0
  322. {rumdl-0.0.153 → rumdl-0.0.155}/tests/md038_false_positive_test.rs +0 -0
  323. {rumdl-0.0.153 → rumdl-0.0.155}/tests/md051_issue_39_regression_test.rs +0 -0
  324. {rumdl-0.0.153 → rumdl-0.0.155}/tests/md051_readme_bug_test.rs +0 -0
  325. {rumdl-0.0.153 → rumdl-0.0.155}/tests/md051_toc_bug_test.rs +0 -0
  326. {rumdl-0.0.153 → rumdl-0.0.155}/tests/md052_literal_brackets_test.rs +0 -0
  327. {rumdl-0.0.153 → rumdl-0.0.155}/tests/md054_code_span_test.rs +0 -0
  328. {rumdl-0.0.153 → rumdl-0.0.155}/tests/nested_code_block_test.rs +0 -0
  329. {rumdl-0.0.153 → rumdl-0.0.155}/tests/output_format_integration_tests.rs +0 -0
  330. {rumdl-0.0.153 → rumdl-0.0.155}/tests/output_format_tests.rs +0 -0
  331. {rumdl-0.0.153 → rumdl-0.0.155}/tests/per_file_ignores_integration_test.rs +0 -0
  332. {rumdl-0.0.153 → rumdl-0.0.155}/tests/perf_check.rs +0 -0
  333. {rumdl-0.0.153 → rumdl-0.0.155}/tests/performance_validation_tests.rs +0 -0
  334. {rumdl-0.0.153 → rumdl-0.0.155}/tests/pyproject_config_tests.rs +0 -0
  335. {rumdl-0.0.153 → rumdl-0.0.155}/tests/real_world_repository_tests.rs +0 -0
  336. {rumdl-0.0.153 → rumdl-0.0.155}/tests/regression_prevention_tests.rs +0 -0
  337. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/emphasis_edge_cases_test.rs +0 -0
  338. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/heading_edge_cases_test.rs +0 -0
  339. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/inline_content_edge_cases_test.rs +0 -0
  340. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/link_edge_cases_test.rs +0 -0
  341. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/list_rules_integration_test.rs +0 -0
  342. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md001_test.rs +0 -0
  343. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md001_unicode_test.rs +0 -0
  344. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md002_test.rs +0 -0
  345. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md003_test.rs +0 -0
  346. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md004_test.rs +0 -0
  347. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md005_dynamic_indent_test.rs +0 -0
  348. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md005_test.rs +0 -0
  349. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md005_unicode_test.rs +0 -0
  350. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md006_test.rs +0 -0
  351. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md006_unicode_test.rs +0 -0
  352. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md007_test.rs +0 -0
  353. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md009_test.rs +0 -0
  354. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md010_test.rs +0 -0
  355. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md011_test.rs +0 -0
  356. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md012_test.rs +0 -0
  357. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md013_test.rs +0 -0
  358. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md014_test.rs +0 -0
  359. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md018_test.rs +0 -0
  360. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md019_test.rs +0 -0
  361. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md020_test.rs +0 -0
  362. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md021_test.rs +0 -0
  363. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md022_test.rs +0 -0
  364. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md023_extended_test.rs +0 -0
  365. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md023_test.rs +0 -0
  366. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md024_test.rs +0 -0
  367. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md025_test.rs +0 -0
  368. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md026_kramdown_test.rs +0 -0
  369. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md026_test.rs +0 -0
  370. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md027_test.rs +0 -0
  371. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md028_md009_interaction_test.rs +0 -0
  372. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md028_test.rs +0 -0
  373. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md029_code_block_separation_test.rs +0 -0
  374. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md029_fix_test.rs +0 -0
  375. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md029_issue42_test.rs +0 -0
  376. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md029_markdownlint_parity_test.rs +0 -0
  377. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md029_pathological_edge_cases_test.rs +0 -0
  378. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md029_test.rs +0 -0
  379. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md029_unicode_test.rs +0 -0
  380. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md030_test.rs +0 -0
  381. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md031_kramdown_test.rs +0 -0
  382. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md031_test.rs +0 -0
  383. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md032_test.rs +0 -0
  384. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md033_extended_test.rs +0 -0
  385. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md033_kramdown_test.rs +0 -0
  386. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md033_test.rs +0 -0
  387. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md034_ipv6_test.rs +0 -0
  388. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md034_test.rs +0 -0
  389. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md035_test.rs +0 -0
  390. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md036_test.rs +0 -0
  391. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md037_kramdown_test.rs +0 -0
  392. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md037_test.rs +0 -0
  393. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md038_nested_backticks_test.rs +0 -0
  394. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md038_test.rs +0 -0
  395. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md039_test.rs +0 -0
  396. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md040_test.rs +0 -0
  397. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md041_test.rs +0 -0
  398. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md042_test.rs +0 -0
  399. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md043_test.rs +0 -0
  400. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md044_test.rs +0 -0
  401. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md045_test.rs +0 -0
  402. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md046_test.rs +0 -0
  403. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md047_test.rs +0 -0
  404. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md048_test.rs +0 -0
  405. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md049_test.rs +0 -0
  406. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md050_test.rs +0 -0
  407. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md051_comprehensive_test.rs +0 -0
  408. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md051_critical_edge_cases_test.rs +0 -0
  409. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md051_edge_cases_test.rs +0 -0
  410. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md051_issue_39_regression_test.rs +0 -0
  411. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md051_performance_edge_cases_test.rs +0 -0
  412. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md051_property_based_test.rs +0 -0
  413. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md051_regression_prevention_test.rs +0 -0
  414. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md051_test.rs +0 -0
  415. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md051_unicode_security_test.rs +0 -0
  416. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md052_test.rs +0 -0
  417. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md053_additional_test.rs +0 -0
  418. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md053_proptest.rs +0 -0
  419. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md053_test.rs +0 -0
  420. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md054_test.rs +0 -0
  421. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md054_unicode_test.rs +0 -0
  422. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md055_test.rs +0 -0
  423. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md056_test.rs +0 -0
  424. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md057_test.rs +0 -0
  425. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md058_kramdown_test.rs +0 -0
  426. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/md058_test.rs +0 -0
  427. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/mkdocs_admonitions_test.rs +0 -0
  428. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/mkdocs_edge_cases_test.rs +0 -0
  429. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/mkdocs_extensions_test.rs +0 -0
  430. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/mkdocs_snippets_test.rs +0 -0
  431. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/mod.rs +0 -0
  432. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules/rule_interaction_test.rs +0 -0
  433. {rumdl-0.0.153 → rumdl-0.0.155}/tests/rules_mod_test.rs +0 -0
  434. {rumdl-0.0.153 → rumdl-0.0.155}/tests/sentence_per_line_test.rs +0 -0
  435. {rumdl-0.0.153 → rumdl-0.0.155}/tests/skip_context_tests.rs +0 -0
  436. {rumdl-0.0.153 → rumdl-0.0.155}/tests/test_ast_code_block_issue.rs +0 -0
  437. {rumdl-0.0.153 → rumdl-0.0.155}/tests/test_gfm_vs_default_parsing.rs +0 -0
  438. {rumdl-0.0.153 → rumdl-0.0.155}/tests/test_lint_context_flow.rs +0 -0
  439. {rumdl-0.0.153 → rumdl-0.0.155}/tests/test_list_ast_structure.rs +0 -0
  440. {rumdl-0.0.153 → rumdl-0.0.155}/tests/test_multiline_ast.rs +0 -0
  441. {rumdl-0.0.153 → rumdl-0.0.155}/tests/test_underscore_edge_cases.rs +0 -0
  442. {rumdl-0.0.153 → rumdl-0.0.155}/tests/thread_safety_tests.rs +0 -0
  443. {rumdl-0.0.153 → rumdl-0.0.155}/tests/unfixable_rules_test.rs +0 -0
  444. {rumdl-0.0.153 → rumdl-0.0.155}/tests/unicode_edge_case_tests.rs +0 -0
  445. {rumdl-0.0.153 → rumdl-0.0.155}/tests/utf8_boundary_tests.rs +0 -0
  446. {rumdl-0.0.153 → rumdl-0.0.155}/tests/utils/blockquote_utils_test.rs +0 -0
  447. {rumdl-0.0.153 → rumdl-0.0.155}/tests/utils/code_block_utils_extended_test.rs +0 -0
  448. {rumdl-0.0.153 → rumdl-0.0.155}/tests/utils/code_block_utils_test.rs +0 -0
  449. {rumdl-0.0.153 → rumdl-0.0.155}/tests/utils/core_utils_test.rs +0 -0
  450. {rumdl-0.0.153 → rumdl-0.0.155}/tests/utils/front_matter_utils_test.rs +0 -0
  451. {rumdl-0.0.153 → rumdl-0.0.155}/tests/utils/line_index_test.rs +0 -0
  452. {rumdl-0.0.153 → rumdl-0.0.155}/tests/utils/mod.rs +0 -0
  453. {rumdl-0.0.153 → rumdl-0.0.155}/tests/utils_markdown_edge_cases.rs +0 -0
  454. {rumdl-0.0.153 → rumdl-0.0.155}/tests/utils_tests.rs +0 -0
  455. {rumdl-0.0.153 → rumdl-0.0.155}/tests/vscode_extension_fixes.rs +0 -0
  456. {rumdl-0.0.153 → rumdl-0.0.155}/tests/vscode_test.rs +0 -0
  457. {rumdl-0.0.153 → rumdl-0.0.155}/tests/vscode_tests.rs +0 -0
  458. {rumdl-0.0.153 → rumdl-0.0.155}/tests/vscode_windows_comprehensive_test.rs +0 -0
  459. {rumdl-0.0.153 → rumdl-0.0.155}/tests/vscode_windows_test.rs +0 -0
@@ -901,12 +901,6 @@ dependencies = [
901
901
  "hashbrown 0.16.0",
902
902
  ]
903
903
 
904
- [[package]]
905
- name = "indoc"
906
- version = "2.0.6"
907
- source = "registry+https://github.com/rust-lang/crates.io-index"
908
- checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd"
909
-
910
904
  [[package]]
911
905
  name = "inotify"
912
906
  version = "0.9.6"
@@ -1131,15 +1125,6 @@ dependencies = [
1131
1125
  "libc",
1132
1126
  ]
1133
1127
 
1134
- [[package]]
1135
- name = "memoffset"
1136
- version = "0.9.1"
1137
- source = "registry+https://github.com/rust-lang/crates.io-index"
1138
- checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
1139
- dependencies = [
1140
- "autocfg",
1141
- ]
1142
-
1143
1128
  [[package]]
1144
1129
  name = "mimalloc"
1145
1130
  version = "0.1.48"
@@ -1462,69 +1447,6 @@ version = "0.11.0"
1462
1447
  source = "registry+https://github.com/rust-lang/crates.io-index"
1463
1448
  checksum = "007d8adb5ddab6f8e3f491ac63566a7d5002cc7ed73901f72057943fa71ae1ae"
1464
1449
 
1465
- [[package]]
1466
- name = "pyo3"
1467
- version = "0.24.2"
1468
- source = "registry+https://github.com/rust-lang/crates.io-index"
1469
- checksum = "e5203598f366b11a02b13aa20cab591229ff0a89fd121a308a5df751d5fc9219"
1470
- dependencies = [
1471
- "cfg-if",
1472
- "indoc",
1473
- "libc",
1474
- "memoffset",
1475
- "once_cell",
1476
- "portable-atomic",
1477
- "pyo3-build-config",
1478
- "pyo3-ffi",
1479
- "pyo3-macros",
1480
- "unindent",
1481
- ]
1482
-
1483
- [[package]]
1484
- name = "pyo3-build-config"
1485
- version = "0.24.2"
1486
- source = "registry+https://github.com/rust-lang/crates.io-index"
1487
- checksum = "99636d423fa2ca130fa5acde3059308006d46f98caac629418e53f7ebb1e9999"
1488
- dependencies = [
1489
- "once_cell",
1490
- "target-lexicon",
1491
- ]
1492
-
1493
- [[package]]
1494
- name = "pyo3-ffi"
1495
- version = "0.24.2"
1496
- source = "registry+https://github.com/rust-lang/crates.io-index"
1497
- checksum = "78f9cf92ba9c409279bc3305b5409d90db2d2c22392d443a87df3a1adad59e33"
1498
- dependencies = [
1499
- "libc",
1500
- "pyo3-build-config",
1501
- ]
1502
-
1503
- [[package]]
1504
- name = "pyo3-macros"
1505
- version = "0.24.2"
1506
- source = "registry+https://github.com/rust-lang/crates.io-index"
1507
- checksum = "0b999cb1a6ce21f9a6b147dcf1be9ffedf02e0043aec74dc390f3007047cecd9"
1508
- dependencies = [
1509
- "proc-macro2",
1510
- "pyo3-macros-backend",
1511
- "quote",
1512
- "syn",
1513
- ]
1514
-
1515
- [[package]]
1516
- name = "pyo3-macros-backend"
1517
- version = "0.24.2"
1518
- source = "registry+https://github.com/rust-lang/crates.io-index"
1519
- checksum = "822ece1c7e1012745607d5cf0bcb2874769f0f7cb34c4cde03b9358eb9ef911a"
1520
- dependencies = [
1521
- "heck",
1522
- "proc-macro2",
1523
- "pyo3-build-config",
1524
- "quote",
1525
- "syn",
1526
- ]
1527
-
1528
1450
  [[package]]
1529
1451
  name = "quick-error"
1530
1452
  version = "1.2.3"
@@ -1644,7 +1566,7 @@ checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001"
1644
1566
 
1645
1567
  [[package]]
1646
1568
  name = "rumdl"
1647
- version = "0.0.153"
1569
+ version = "0.0.155"
1648
1570
  dependencies = [
1649
1571
  "anyhow",
1650
1572
  "assert_cmd",
@@ -1671,12 +1593,10 @@ dependencies = [
1671
1593
  "pretty_assertions",
1672
1594
  "proptest",
1673
1595
  "pulldown-cmark",
1674
- "pyo3",
1675
1596
  "rand",
1676
1597
  "rayon",
1677
1598
  "regex",
1678
1599
  "schemars",
1679
- "seahash",
1680
1600
  "serde",
1681
1601
  "serde_json",
1682
1602
  "serde_yaml",
@@ -1691,8 +1611,6 @@ dependencies = [
1691
1611
  "tower 0.5.2",
1692
1612
  "tower-lsp",
1693
1613
  "tower-service",
1694
- "unicode-bidi",
1695
- "unicode-blocks",
1696
1614
  "unicode-normalization",
1697
1615
  "unicode-segmentation",
1698
1616
  "unicode-width",
@@ -1781,12 +1699,6 @@ version = "1.2.0"
1781
1699
  source = "registry+https://github.com/rust-lang/crates.io-index"
1782
1700
  checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
1783
1701
 
1784
- [[package]]
1785
- name = "seahash"
1786
- version = "4.1.0"
1787
- source = "registry+https://github.com/rust-lang/crates.io-index"
1788
- checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
1789
-
1790
1702
  [[package]]
1791
1703
  name = "serde"
1792
1704
  version = "1.0.226"
@@ -1945,12 +1857,6 @@ dependencies = [
1945
1857
  "syn",
1946
1858
  ]
1947
1859
 
1948
- [[package]]
1949
- name = "target-lexicon"
1950
- version = "0.13.3"
1951
- source = "registry+https://github.com/rust-lang/crates.io-index"
1952
- checksum = "df7f62577c25e07834649fc3b39fafdc597c0a3527dc1c60129201ccfcbaa50c"
1953
-
1954
1860
  [[package]]
1955
1861
  name = "tempfile"
1956
1862
  version = "3.22.0"
@@ -2243,18 +2149,6 @@ version = "2.8.1"
2243
2149
  source = "registry+https://github.com/rust-lang/crates.io-index"
2244
2150
  checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539"
2245
2151
 
2246
- [[package]]
2247
- name = "unicode-bidi"
2248
- version = "0.3.18"
2249
- source = "registry+https://github.com/rust-lang/crates.io-index"
2250
- checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5"
2251
-
2252
- [[package]]
2253
- name = "unicode-blocks"
2254
- version = "0.1.9"
2255
- source = "registry+https://github.com/rust-lang/crates.io-index"
2256
- checksum = "6b12e05d9e06373163a9bb6bb8c263c261b396643a99445fe6b9811fd376581b"
2257
-
2258
2152
  [[package]]
2259
2153
  name = "unicode-id"
2260
2154
  version = "0.3.6"
@@ -2288,12 +2182,6 @@ version = "0.2.1"
2288
2182
  source = "registry+https://github.com/rust-lang/crates.io-index"
2289
2183
  checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c"
2290
2184
 
2291
- [[package]]
2292
- name = "unindent"
2293
- version = "0.2.4"
2294
- source = "registry+https://github.com/rust-lang/crates.io-index"
2295
- checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3"
2296
-
2297
2185
  [[package]]
2298
2186
  name = "unsafe-libyaml"
2299
2187
  version = "0.2.11"
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "rumdl"
3
- version = "0.0.153"
3
+ version = "0.0.155"
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)"
@@ -18,7 +18,7 @@ default-run = "rumdl" # Default binary for cargo run
18
18
 
19
19
  [lib]
20
20
  name = "rumdl_lib"
21
- crate-type = ["cdylib", "rlib"]
21
+ crate-type = ["rlib"]
22
22
 
23
23
  [[bin]]
24
24
  name = "rumdl"
@@ -91,7 +91,6 @@ serde_yaml = "0.9.34"
91
91
  serde_json = "1.0"
92
92
  toml = "0.8.20"
93
93
  strsim = "0.11"
94
- pyo3 = { version = "0.24.1", features = ["extension-module", "abi3-py37"], optional = true }
95
94
  thiserror = "2.0.12"
96
95
  once_cell = "1.21.3"
97
96
  globset = "0.4.16"
@@ -105,7 +104,6 @@ dyn-clone = "1"
105
104
  url = { version = "2", features = ["serde"] }
106
105
  unicode-normalization = "0.1"
107
106
  memmap2 = "0.9"
108
- seahash = "4.1"
109
107
  schemars = "0.8"
110
108
 
111
109
  # LSP dependencies
@@ -124,8 +122,6 @@ etcetera = "0.8"
124
122
  default = ["parallel"]
125
123
  parallel = ["rayon"]
126
124
  profiling = []
127
- python = ["pyo3"]
128
- structure_preprocessing = []
129
125
  build-benchmarks = []
130
126
 
131
127
  [dev-dependencies]
@@ -138,8 +134,6 @@ rand = "0.9.1"
138
134
  pretty_assertions = "1.4"
139
135
  unicode-segmentation = "1.12"
140
136
  unicode-width = "0.2"
141
- unicode-blocks = "0.1"
142
- unicode-bidi = "0.3"
143
137
 
144
138
  [target.'cfg(not(target_env = "msvc"))'.dependencies]
145
139
  tikv-jemallocator = "0.6"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rumdl
3
- Version: 0.0.153
3
+ Version: 0.0.155
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -0,0 +1,311 @@
1
+ # LintContext Optimization Implementation Plan
2
+
3
+ ## Overview
4
+
5
+ This document outlines the plan to optimize 54 rules that aren't using LintContext's early-exit optimization methods. The optimizations replace O(n) string scanning with O(1) cached character
6
+ frequency lookups.
7
+
8
+ ## Analysis Summary
9
+
10
+ - **Total rules analyzed**: 54 rules without LintContext optimizations
11
+ - **Agent analysis completed**: 10 representative rules across different categories
12
+ - **Expected impact**: 10-100x speedup for documents without relevant markdown elements
13
+
14
+ ## Optimization Categories
15
+
16
+ ### Category 1: Direct Replacements (High Impact, Low Risk)
17
+
18
+ These rules can directly replace string scanning with LintContext methods.
19
+
20
+ #### 1. MD003 - Heading Style
21
+
22
+ **File**: `src/rules/md003_heading_style.rs`
23
+ **Current**: `!ctx.lines.iter().any(|line| line.heading.is_some())`
24
+ **Optimized**: `!ctx.likely_has_headings()`
25
+ **Location**: Line 237-240 in `should_skip()`
26
+ **Impact**: O(n) line iteration → O(1) character frequency check
27
+
28
+ #### 2. MD004 - Unordered List Style
29
+
30
+ **File**: `src/rules/md004_unordered_list_style.rs`
31
+ **Current**: `!ctx.content.contains(['*', '-', '+'])`
32
+ **Optimized**: `!ctx.likely_has_lists()`
33
+ **Locations**:
34
+
35
+ - Line 107-109 in `check()`
36
+ - Line 317 in `should_skip()`
37
+ **Impact**: O(n) string scan → O(1) integer comparison
38
+
39
+ #### 3. MD033 - No Inline HTML
40
+
41
+ **File**: `src/rules/md033_no_inline_html.rs`
42
+ **Current**: `!has_html_tags(content)` (custom function)
43
+ **Optimized**: `!ctx.likely_has_html()`
44
+ **Locations**:
45
+
46
+ - Line 287 in `check()`
47
+ - Line 438 in `should_skip()`
48
+ **Impact**: Eliminates redundant '<' character scanning
49
+
50
+ #### 4. MD042 - No Empty Links
51
+
52
+ **File**: `src/rules/md042_no_empty_links.rs`
53
+ **Current**: `!content.contains('[')`
54
+ **Optimized**: `!ctx.likely_has_links_or_images()`
55
+ **Location**: `should_skip()` method
56
+ **Impact**: O(n) string scan → O(1) bracket count check
57
+
58
+ #### 5. MD049 - Emphasis Style
59
+
60
+ **File**: `src/rules/md049_emphasis_style.rs`
61
+ **Current**: `!ctx.content.contains('*') && !ctx.content.contains('_')`
62
+ **Optimized**: `!ctx.likely_has_emphasis()`
63
+ **Locations**:
64
+
65
+ - Line 113-115 in `check()`
66
+ - Line 247 in `should_skip()`
67
+
68
+ **Impact**: Two O(n) scans → O(1) check (asterisk_count > 1 || underscore_count > 1)
69
+
70
+ #### 6. MD050 - Strong Style
71
+
72
+ **File**: `src/rules/md050_strong_style.rs`
73
+ **Current**: Similar to MD049 (checks for ** and __)
74
+ **Optimized**: Create `ctx.likely_has_strong()` or use `likely_has_emphasis()`
75
+ **Impact**: Same as MD049
76
+
77
+ #### 7. MD055 - Table Pipe Style
78
+
79
+ **File**: `src/rules/md055_table_pipe_style.rs`
80
+ **Current**: `!ctx.content.contains('|')`
81
+ **Optimized**: `!ctx.likely_has_tables()`
82
+ **Locations**:
83
+
84
+ - Line 174-177 in `should_skip()`
85
+ - Line 185-187 in `check()` (remove - redundant)
86
+ **Impact**: O(n) scan → O(1) check (pipe_count > 2)
87
+
88
+ #### 8. MD027 - Multiple Spaces in Blockquote
89
+
90
+ **File**: `src/rules/md027_multiple_spaces_blockquote.rs`
91
+ **Current**: `!ctx.content.contains('>')`
92
+ **Optimized**: `!ctx.likely_has_blockquotes()`
93
+ **Location**: Line 192 in `should_skip()`
94
+ **Impact**: O(n) scan → O(1) check (gt_count > 0)
95
+
96
+ ### Category 2: Compound Checks (Medium Impact)
97
+
98
+ #### 9. MD040 - Fenced Code Language
99
+
100
+ **File**: `src/rules/md040_fenced_code_language.rs`
101
+ **Current**: `!content.contains("```") && !content.contains("~~~")`
102
+ **Optimized**: `!ctx.likely_has_code() && !ctx.has_char('~')`
103
+ **Location**: Line 341-344 in `should_skip()`
104
+ **Impact**: Two O(n) substring scans → O(1) + O(n) character check
105
+ **Note**: `likely_has_code()` only checks backticks; need separate tilde check
106
+
107
+ #### 10. MD031 - Blanks Around Fences
108
+
109
+ **File**: `src/rules/md031_blanks_around_fences.rs`
110
+ **Current**: TBD (needs analysis)
111
+ **Optimized**: Use `ctx.likely_has_code()`
112
+ **Impact**: TBD
113
+
114
+ #### 11. MD046 - Code Block Style
115
+
116
+ **File**: `src/rules/md046_code_block_style.rs`
117
+ **Current**: TBD (needs analysis)
118
+ **Optimized**: Use `ctx.likely_has_code()`
119
+ **Impact**: TBD
120
+
121
+ #### 12. MD048 - Code Fence Style
122
+
123
+ **File**: `src/rules/md048_code_fence_style.rs`
124
+ **Current**: TBD (needs analysis)
125
+ **Optimized**: Use `ctx.likely_has_code()`
126
+ **Impact**: TBD
127
+
128
+ ### Category 3: Heading-Related Rules
129
+
130
+ Apply `ctx.likely_has_headings()` to these rules:
131
+
132
+ - MD001 - Heading Increment
133
+ - MD002 - First Heading H1
134
+ - MD018 - No Missing Space ATX
135
+ - MD019 - No Multiple Space ATX
136
+ - MD020 - No Missing Space Closed ATX
137
+ - MD021 - No Multiple Space Closed ATX
138
+ - MD022 - Blanks Around Headings
139
+ - MD023 - Heading Start Left
140
+ - MD024 - No Duplicate Heading
141
+ - MD025 - Single Title
142
+ - MD026 - No Trailing Punctuation
143
+ - MD041 - First Line Heading
144
+ - MD043 - Required Headings
145
+
146
+ ### Category 4: List-Related Rules
147
+
148
+ Apply `ctx.likely_has_lists()` to these rules:
149
+
150
+ - MD005 - List Indent
151
+ - MD006 - Start Bullets
152
+ - MD007 - UL Indent
153
+ - MD029 - Ordered List Prefix
154
+ - MD030 - List Marker Space
155
+ - MD032 - Blanks Around Lists
156
+
157
+ ### Category 5: Link/Image-Related Rules
158
+
159
+ Apply `ctx.likely_has_links_or_images()` to these rules:
160
+
161
+ - MD011 - No Reversed Links
162
+ - MD034 - No Bare URLs
163
+ - MD039 - No Space in Links
164
+ - MD045 - No Alt Text
165
+ - MD051 - Link Fragments
166
+ - MD052 - Reference Links/Images
167
+ - MD053 - Link Image Reference Definitions
168
+ - MD054 - Link Image Style
169
+ - MD057 - Existing Relative Links
170
+
171
+ ### Category 6: Emphasis/Strong-Related Rules
172
+
173
+ Apply `ctx.likely_has_emphasis()` to these rules:
174
+
175
+ - MD036 - No Emphasis Only First
176
+ - MD037 - Spaces Around Emphasis
177
+ - MD038 - No Space in Code
178
+
179
+ ### Category 7: Blockquote-Related Rules
180
+
181
+ Apply `ctx.likely_has_blockquotes()` to these rules:
182
+
183
+ - MD028 - No Blanks in Blockquote
184
+
185
+ ### Category 8: Table-Related Rules
186
+
187
+ Apply `ctx.likely_has_tables()` to these rules:
188
+
189
+ - MD056 - Table Column Count
190
+ - MD058 - Blanks Around Tables
191
+
192
+ ### Category 9: Simple Character Checks
193
+
194
+ These rules need custom optimization using `has_char()`:
195
+
196
+ - MD009 - Trailing Spaces (already optimized, uses `has_char(' ')`)
197
+ - MD010 - No Hard Tabs (use `has_char('\t')`, consider adding tab_count to CharFrequency)
198
+ - MD012 - No Multiple Blanks (check for '\n')
199
+ - MD035 - HR Style (check for '-', '*', '_')
200
+ - MD047 - Single Trailing Newline (check for '\n')
201
+
202
+ ### Category 10: Special Cases
203
+
204
+ - MD014 - Commands Show Output (check for '```' or code blocks)
205
+ - MD044 - Proper Names (no early exit possible - must scan all text)
206
+
207
+ ## Architectural Improvements
208
+
209
+ ### Add tab_count to CharFrequency
210
+
211
+ **File**: `src/lint_context.rs`
212
+
213
+ Add to CharFrequency struct (around line 289):
214
+
215
+ ```rust
216
+ /// Count of \t characters (tabs)
217
+ pub tab_count: usize,
218
+ ```
219
+
220
+ Update `compute_char_frequency()` (around line 2240):
221
+
222
+ ```rust
223
+ '\t' => frequency.tab_count += 1,
224
+ ```
225
+
226
+ Update `has_char()` (around line 644):
227
+
228
+ ```rust
229
+ '\t' => self.char_frequency.tab_count > 0,
230
+ ```
231
+
232
+ Update `char_count()` (around line 663):
233
+
234
+ ```rust
235
+ '\t' => self.char_frequency.tab_count,
236
+ ```
237
+
238
+ ## Implementation Strategy
239
+
240
+ ### Phase 1: Quick Wins (Category 1 - 8 rules)
241
+
242
+ Implement direct replacements with minimal risk:
243
+
244
+ - MD003, MD004, MD033, MD042, MD049, MD055, MD027, MD040
245
+
246
+ ### Phase 2: Systematic Rollout (Categories 3-8 - ~40 rules)
247
+
248
+ Apply pattern-based optimizations to rule categories:
249
+
250
+ - Heading rules → `likely_has_headings()`
251
+ - List rules → `likely_has_lists()`
252
+ - Link/image rules → `likely_has_links_or_images()`
253
+ - Emphasis rules → `likely_has_emphasis()`
254
+ - Blockquote rules → `likely_has_blockquotes()`
255
+ - Table rules → `likely_has_tables()`
256
+
257
+ ### Phase 3: Architecture (Category 9)
258
+
259
+ - Add `tab_count` to CharFrequency
260
+ - Add `space_count` to CharFrequency (optional)
261
+ - Add `newline_count` to CharFrequency (optional)
262
+
263
+ ### Phase 4: Validation
264
+
265
+ - Run full test suite after each phase
266
+ - Benchmark performance improvements
267
+ - Verify no false negatives introduced
268
+
269
+ ## Expected Performance Impact
270
+
271
+ ### Documents Without Relevant Elements
272
+
273
+ - **Before**: O(n) string/line scanning on every rule
274
+ - **After**: O(1) character frequency check
275
+ - **Speedup**: 10-100x depending on document size
276
+
277
+ ### Documents With Relevant Elements
278
+
279
+ - **Before**: O(n) scan + rule processing
280
+ - **After**: O(1) check + rule processing
281
+ - **Speedup**: Minimal (rule still needs to run)
282
+
283
+ ### Overall Impact
284
+
285
+ - **Typical workload**: 10-30% faster (mix of documents with/without elements)
286
+ - **Best case**: 100x faster (processing large files without relevant markdown)
287
+ - **Worst case**: No regression (documents with elements still process normally)
288
+
289
+ ## Testing Strategy
290
+
291
+ For each optimized rule:
292
+
293
+ 1. Ensure existing tests pass
294
+ 2. Add test for empty document (should skip)
295
+ 3. Add test for document without relevant elements (should skip)
296
+ 4. Verify no false negatives (all violations still caught)
297
+
298
+ ## Rollout Plan
299
+
300
+ 1. **Week 1**: Implement Phase 1 (8 quick wins)
301
+ 2. **Week 2**: Implement Phase 2 (40 systematic rollouts)
302
+ 3. **Week 3**: Implement Phase 3 (architecture improvements)
303
+ 4. **Week 4**: Validation and benchmarking
304
+
305
+ ## Success Metrics
306
+
307
+ - All 54 rules use appropriate LintContext optimization methods
308
+ - Test suite passes with 100% success
309
+ - No false negatives introduced
310
+ - Measurable performance improvement (>10% on typical workloads)
311
+ - Code consistency across all rules