rumdl 0.0.151__tar.gz → 0.0.154__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 (458) hide show
  1. {rumdl-0.0.151 → rumdl-0.0.154}/Cargo.lock +1 -1
  2. {rumdl-0.0.151 → rumdl-0.0.154}/Cargo.toml +1 -1
  3. {rumdl-0.0.151 → rumdl-0.0.154}/PKG-INFO +1 -1
  4. rumdl-0.0.154/docs/LINTCONTEXT_OPTIMIZATION_PLAN.md +311 -0
  5. rumdl-0.0.154/docs/LINTCONTEXT_OPTIMIZATION_SUMMARY.md +251 -0
  6. rumdl-0.0.154/docs/LINTCONTEXT_PERFORMANCE_ANALYSIS.md +240 -0
  7. rumdl-0.0.154/docs/PHASE_2_OPTIMIZATION_COMPLETE.md +284 -0
  8. rumdl-0.0.154/docs/PHASE_3_OPTIMIZATION_COMPLETE.md +175 -0
  9. {rumdl-0.0.151 → rumdl-0.0.154}/src/fix_coordinator.rs +2 -1
  10. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md001_heading_increment.rs +6 -2
  11. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md002_first_heading_h1.rs +2 -2
  12. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md003_heading_style.rs +6 -2
  13. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md004_unordered_list_style.rs +2 -2
  14. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md005_list_indent.rs +5 -5
  15. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md006_start_bullets.rs +1 -2
  16. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md007_ul_indent.rs +8 -6
  17. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md010_no_hard_tabs.rs +1 -1
  18. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md011_no_reversed_links.rs +4 -0
  19. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md012_no_multiple_blanks.rs +2 -2
  20. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md013_line_length.rs +656 -44
  21. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md014_commands_show_output.rs +1 -1
  22. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md018_no_missing_space_atx.rs +5 -1
  23. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md019_no_multiple_space_atx.rs +1 -1
  24. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md020_no_missing_space_closed_atx.rs +1 -1
  25. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md021_no_multiple_space_closed_atx.rs +1 -2
  26. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md022_blanks_around_headings.rs +6 -1
  27. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md023_heading_start_left.rs +5 -0
  28. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md024_no_duplicate_heading.rs +5 -0
  29. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md025_single_title.rs +1 -1
  30. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md026_no_trailing_punctuation.rs +1 -1
  31. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md027_multiple_spaces_blockquote.rs +1 -1
  32. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md028_no_blanks_blockquote.rs +1 -1
  33. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md029_ordered_list_prefix.rs +1 -4
  34. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md030_list_marker_space.rs +5 -5
  35. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md031_blanks_around_fences.rs +2 -2
  36. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md032_blanks_around_lists.rs +6 -1
  37. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md033_no_inline_html.rs +2 -3
  38. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md034_no_bare_urls.rs +34 -18
  39. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md035_hr_style.rs +2 -2
  40. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md036_no_emphasis_only_first.rs +1 -1
  41. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md037_spaces_around_emphasis.rs +1 -2
  42. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md038_no_space_in_code.rs +1 -1
  43. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md039_no_space_in_links.rs +1 -11
  44. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md040_fenced_code_language.rs +1 -2
  45. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md041_first_line_heading.rs +3 -1
  46. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md042_no_empty_links.rs +1 -2
  47. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md045_no_alt_text.rs +1 -1
  48. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md046_code_block_style.rs +2 -2
  49. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md047_single_trailing_newline.rs +29 -10
  50. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md048_code_fence_style.rs +1 -1
  51. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md049_emphasis_style.rs +2 -2
  52. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md050_strong_style.rs +2 -1
  53. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md051_link_fragments.rs +90 -142
  54. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md052_reference_links_images.rs +2 -2
  55. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md053_link_image_reference_definitions.rs +2 -2
  56. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md054_link_image_style.rs +4 -0
  57. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md055_table_pipe_style.rs +3 -6
  58. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md056_table_column_count.rs +2 -2
  59. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md057_existing_relative_links.rs +1 -2
  60. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md058_blanks_around_tables.rs +2 -2
  61. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/anchor_styles/github.rs +16 -20
  62. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/text_reflow.rs +76 -6
  63. rumdl-0.0.154/tests/md009_md013_integration_test.rs +172 -0
  64. rumdl-0.0.154/tests/md009_md013_order_test.rs +39 -0
  65. rumdl-0.0.154/tests/md013_hard_breaks_test.rs +294 -0
  66. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md051_comprehensive_test.rs +2 -2
  67. {rumdl-0.0.151 → rumdl-0.0.154}/.config/nextest.toml +0 -0
  68. {rumdl-0.0.151 → rumdl-0.0.154}/.mise.toml +0 -0
  69. {rumdl-0.0.151 → rumdl-0.0.154}/.pre-commit-config.yaml +0 -0
  70. {rumdl-0.0.151 → rumdl-0.0.154}/.rumdl.toml +0 -0
  71. {rumdl-0.0.151 → rumdl-0.0.154}/.rustfmt.toml +0 -0
  72. {rumdl-0.0.151 → rumdl-0.0.154}/CHANGELOG.md +0 -0
  73. {rumdl-0.0.151 → rumdl-0.0.154}/LICENSE +0 -0
  74. {rumdl-0.0.151 → rumdl-0.0.154}/MANIFEST.in +0 -0
  75. {rumdl-0.0.151 → rumdl-0.0.154}/Makefile +0 -0
  76. {rumdl-0.0.151 → rumdl-0.0.154}/README.md +0 -0
  77. {rumdl-0.0.151 → rumdl-0.0.154}/assets/logo.png +0 -0
  78. {rumdl-0.0.151 → rumdl-0.0.154}/benches/fix_performance.rs +0 -0
  79. {rumdl-0.0.151 → rumdl-0.0.154}/benches/range_performance.rs +0 -0
  80. {rumdl-0.0.151 → rumdl-0.0.154}/benches/range_utils_benchmark.rs +0 -0
  81. {rumdl-0.0.151 → rumdl-0.0.154}/benches/rule_performance.rs +0 -0
  82. {rumdl-0.0.151 → rumdl-0.0.154}/benches/simple_fix_bench.rs +0 -0
  83. {rumdl-0.0.151 → rumdl-0.0.154}/benchmark/bin/bench_lint_context.rs +0 -0
  84. {rumdl-0.0.151 → rumdl-0.0.154}/benchmark/bin/benchmark.rs +0 -0
  85. {rumdl-0.0.151 → rumdl-0.0.154}/benchmark/bin/benchmark_rule.rs +0 -0
  86. {rumdl-0.0.151 → rumdl-0.0.154}/benchmark/bin/file_parallel_benchmark.rs +0 -0
  87. {rumdl-0.0.151 → rumdl-0.0.154}/benchmark/bin/measure_code_span_performance.rs +0 -0
  88. {rumdl-0.0.151 → rumdl-0.0.154}/docs/RULES.md +0 -0
  89. {rumdl-0.0.151 → rumdl-0.0.154}/docs/global-settings.md +0 -0
  90. {rumdl-0.0.151 → rumdl-0.0.154}/docs/inline-configuration.md +0 -0
  91. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md001.md +0 -0
  92. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md002.md +0 -0
  93. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md003.md +0 -0
  94. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md004.md +0 -0
  95. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md005.md +0 -0
  96. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md006.md +0 -0
  97. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md007.md +0 -0
  98. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md009.md +0 -0
  99. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md010.md +0 -0
  100. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md011.md +0 -0
  101. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md012.md +0 -0
  102. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md013.md +0 -0
  103. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md014.md +0 -0
  104. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md018.md +0 -0
  105. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md019.md +0 -0
  106. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md020.md +0 -0
  107. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md021.md +0 -0
  108. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md022.md +0 -0
  109. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md023.md +0 -0
  110. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md024.md +0 -0
  111. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md025.md +0 -0
  112. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md026.md +0 -0
  113. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md027.md +0 -0
  114. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md028.md +0 -0
  115. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md029.md +0 -0
  116. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md030.md +0 -0
  117. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md031.md +0 -0
  118. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md032.md +0 -0
  119. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md033.md +0 -0
  120. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md034.md +0 -0
  121. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md035.md +0 -0
  122. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md036.md +0 -0
  123. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md037.md +0 -0
  124. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md038.md +0 -0
  125. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md039.md +0 -0
  126. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md040.md +0 -0
  127. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md041.md +0 -0
  128. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md042.md +0 -0
  129. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md043.md +0 -0
  130. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md044.md +0 -0
  131. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md045.md +0 -0
  132. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md046.md +0 -0
  133. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md047.md +0 -0
  134. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md048.md +0 -0
  135. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md049.md +0 -0
  136. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md050.md +0 -0
  137. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md051.md +0 -0
  138. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md052.md +0 -0
  139. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md053.md +0 -0
  140. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md054.md +0 -0
  141. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md055.md +0 -0
  142. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md056.md +0 -0
  143. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md057.md +0 -0
  144. {rumdl-0.0.151 → rumdl-0.0.154}/docs/md058.md +0 -0
  145. {rumdl-0.0.151 → rumdl-0.0.154}/docs/vscode-extension.md +0 -0
  146. {rumdl-0.0.151 → rumdl-0.0.154}/parity_check.py +0 -0
  147. {rumdl-0.0.151 → rumdl-0.0.154}/pyproject.toml +0 -0
  148. {rumdl-0.0.151 → rumdl-0.0.154}/python/MANIFEST.in +0 -0
  149. {rumdl-0.0.151 → rumdl-0.0.154}/python/PYTHON-README.md +0 -0
  150. {rumdl-0.0.151 → rumdl-0.0.154}/python/rumdl/__init__.py +0 -0
  151. {rumdl-0.0.151 → rumdl-0.0.154}/python/rumdl/__main__.py +0 -0
  152. {rumdl-0.0.151 → rumdl-0.0.154}/python/rumdl/py.typed +0 -0
  153. {rumdl-0.0.151 → rumdl-0.0.154}/rumdl.schema.json +0 -0
  154. {rumdl-0.0.151 → rumdl-0.0.154}/rumdl.toml.example +0 -0
  155. {rumdl-0.0.151 → rumdl-0.0.154}/rust-toolchain.toml +0 -0
  156. {rumdl-0.0.151 → rumdl-0.0.154}/scripts/extract-changelog.sh +0 -0
  157. {rumdl-0.0.151 → rumdl-0.0.154}/scripts/generate-downloads-table.sh +0 -0
  158. {rumdl-0.0.151 → rumdl-0.0.154}/scripts/pre-release.sh +0 -0
  159. {rumdl-0.0.151 → rumdl-0.0.154}/scripts/prepare-release.sh +0 -0
  160. {rumdl-0.0.151 → rumdl-0.0.154}/scripts/setup-pre-commit.sh +0 -0
  161. {rumdl-0.0.151 → rumdl-0.0.154}/scripts/update-pre-commit-docs.sh +0 -0
  162. {rumdl-0.0.151 → rumdl-0.0.154}/src/config.rs +0 -0
  163. {rumdl-0.0.151 → rumdl-0.0.154}/src/exit_codes.rs +0 -0
  164. {rumdl-0.0.151 → rumdl-0.0.154}/src/inline_config.rs +0 -0
  165. {rumdl-0.0.151 → rumdl-0.0.154}/src/lib.rs +0 -0
  166. {rumdl-0.0.151 → rumdl-0.0.154}/src/lint_context.rs +0 -0
  167. {rumdl-0.0.151 → rumdl-0.0.154}/src/lsp/mod.rs +0 -0
  168. {rumdl-0.0.151 → rumdl-0.0.154}/src/lsp/server.rs +0 -0
  169. {rumdl-0.0.151 → rumdl-0.0.154}/src/lsp/types.rs +0 -0
  170. {rumdl-0.0.151 → rumdl-0.0.154}/src/main.rs +0 -0
  171. {rumdl-0.0.151 → rumdl-0.0.154}/src/markdownlint_config.rs +0 -0
  172. {rumdl-0.0.151 → rumdl-0.0.154}/src/output/formatters/azure.rs +0 -0
  173. {rumdl-0.0.151 → rumdl-0.0.154}/src/output/formatters/concise.rs +0 -0
  174. {rumdl-0.0.151 → rumdl-0.0.154}/src/output/formatters/github.rs +0 -0
  175. {rumdl-0.0.151 → rumdl-0.0.154}/src/output/formatters/gitlab.rs +0 -0
  176. {rumdl-0.0.151 → rumdl-0.0.154}/src/output/formatters/grouped.rs +0 -0
  177. {rumdl-0.0.151 → rumdl-0.0.154}/src/output/formatters/json.rs +0 -0
  178. {rumdl-0.0.151 → rumdl-0.0.154}/src/output/formatters/json_lines.rs +0 -0
  179. {rumdl-0.0.151 → rumdl-0.0.154}/src/output/formatters/junit.rs +0 -0
  180. {rumdl-0.0.151 → rumdl-0.0.154}/src/output/formatters/mod.rs +0 -0
  181. {rumdl-0.0.151 → rumdl-0.0.154}/src/output/formatters/pylint.rs +0 -0
  182. {rumdl-0.0.151 → rumdl-0.0.154}/src/output/formatters/sarif.rs +0 -0
  183. {rumdl-0.0.151 → rumdl-0.0.154}/src/output/formatters/text.rs +0 -0
  184. {rumdl-0.0.151 → rumdl-0.0.154}/src/output/mod.rs +0 -0
  185. {rumdl-0.0.151 → rumdl-0.0.154}/src/parallel.rs +0 -0
  186. {rumdl-0.0.151 → rumdl-0.0.154}/src/performance.rs +0 -0
  187. {rumdl-0.0.151 → rumdl-0.0.154}/src/profiling.rs +0 -0
  188. {rumdl-0.0.151 → rumdl-0.0.154}/src/python.rs +0 -0
  189. {rumdl-0.0.151 → rumdl-0.0.154}/src/rule.rs +0 -0
  190. {rumdl-0.0.151 → rumdl-0.0.154}/src/rule_config.rs +0 -0
  191. {rumdl-0.0.151 → rumdl-0.0.154}/src/rule_config_serde.rs +0 -0
  192. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/blockquote_utils.rs +0 -0
  193. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/code_block_utils.rs +0 -0
  194. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/code_fence_utils.rs +0 -0
  195. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/emphasis_style.rs +0 -0
  196. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/front_matter_utils.rs +0 -0
  197. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/heading_utils.rs +0 -0
  198. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/list_utils.rs +0 -0
  199. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md002_first_heading_h1/md002_config.rs +0 -0
  200. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md003_heading_style/md003_config.rs +0 -0
  201. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md004_unordered_list_style/md004_config.rs +0 -0
  202. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md007_ul_indent/md007_config.rs +0 -0
  203. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md009_trailing_spaces/md009_config.rs +0 -0
  204. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md009_trailing_spaces.rs +0 -0
  205. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md010_no_hard_tabs/md010_config.rs +0 -0
  206. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md012_no_multiple_blanks/md012_config.rs +0 -0
  207. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md013_line_length/md013_config.rs +0 -0
  208. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md014_commands_show_output/md014_config.rs +0 -0
  209. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md022_blanks_around_headings/md022_config.rs +0 -0
  210. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md024_no_duplicate_heading/md024_config.rs +0 -0
  211. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md025_single_title/md025_config.rs +0 -0
  212. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md026_no_trailing_punctuation/md026_config.rs +0 -0
  213. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md029_ordered_list_prefix/md029_config.rs +0 -0
  214. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md030_list_marker_space/md030_config.rs +0 -0
  215. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md033_no_inline_html/md033_config.rs +0 -0
  216. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md035_hr_style/md035_config.rs +0 -0
  217. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md036_no_emphasis_only_first/md036_config.rs +0 -0
  218. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md043_required_headings.rs +0 -0
  219. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md044_proper_names/md044_config.rs +0 -0
  220. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md044_proper_names.rs +0 -0
  221. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md045_no_alt_text/md045_config.rs +0 -0
  222. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md046_code_block_style/md046_config.rs +0 -0
  223. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md048_code_fence_style/md048_config.rs +0 -0
  224. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md049_emphasis_style/md049_config.rs +0 -0
  225. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md050_strong_style/md050_config.rs +0 -0
  226. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md054_link_image_style/md054_config.rs +0 -0
  227. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md055_table_pipe_style/md055_config.rs +0 -0
  228. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/md057_existing_relative_links/md057_config.rs +0 -0
  229. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/mod.rs +0 -0
  230. {rumdl-0.0.151 → rumdl-0.0.154}/src/rules/strong_style.rs +0 -0
  231. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/anchor_styles/jekyll.rs +0 -0
  232. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/anchor_styles/kramdown.rs +0 -0
  233. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/anchor_styles/kramdown_gfm.rs +0 -0
  234. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/anchor_styles/mod.rs +0 -0
  235. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/ast_utils.rs +0 -0
  236. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/code_block_utils.rs +0 -0
  237. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/document_structure.rs +0 -0
  238. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/early_returns.rs +0 -0
  239. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/element_cache.rs +0 -0
  240. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/emphasis_utils.rs +0 -0
  241. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/fix_utils.rs +0 -0
  242. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/header_id_utils.rs +0 -0
  243. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/jinja_utils.rs +0 -0
  244. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/kramdown_utils.rs +0 -0
  245. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/line_ending.rs +0 -0
  246. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/markdown_elements.rs +0 -0
  247. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/mkdocs_admonitions.rs +0 -0
  248. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/mkdocs_common.rs +0 -0
  249. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/mkdocs_critic.rs +0 -0
  250. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/mkdocs_footnotes.rs +0 -0
  251. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/mkdocs_patterns.rs +0 -0
  252. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/mkdocs_snippets.rs +0 -0
  253. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/mkdocs_tabs.rs +0 -0
  254. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/mkdocs_test_utils.rs +0 -0
  255. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/mkdocstrings_refs.rs +0 -0
  256. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/mod.rs +0 -0
  257. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/range_utils.rs +0 -0
  258. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/regex_cache.rs +0 -0
  259. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/skip_context.rs +0 -0
  260. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/string_interner.rs +0 -0
  261. {rumdl-0.0.151 → rumdl-0.0.154}/src/utils/table_utils.rs +0 -0
  262. {rumdl-0.0.151 → rumdl-0.0.154}/src/vscode.rs +0 -0
  263. {rumdl-0.0.151 → rumdl-0.0.154}/tests/advanced_integration_tests.rs +0 -0
  264. {rumdl-0.0.151 → rumdl-0.0.154}/tests/character_ranges/additional_tests.rs +0 -0
  265. {rumdl-0.0.151 → rumdl-0.0.154}/tests/character_ranges/basic_tests.rs +0 -0
  266. {rumdl-0.0.151 → rumdl-0.0.154}/tests/character_ranges/comprehensive_tests.rs +0 -0
  267. {rumdl-0.0.151 → rumdl-0.0.154}/tests/character_ranges/extended_tests.rs +0 -0
  268. {rumdl-0.0.151 → rumdl-0.0.154}/tests/character_ranges/mod.rs +0 -0
  269. {rumdl-0.0.151 → rumdl-0.0.154}/tests/character_ranges/unicode_utils.rs +0 -0
  270. {rumdl-0.0.151 → rumdl-0.0.154}/tests/cli_duplication_test.rs +0 -0
  271. {rumdl-0.0.151 → rumdl-0.0.154}/tests/cli_explain_test.rs +0 -0
  272. {rumdl-0.0.151 → rumdl-0.0.154}/tests/cli_flag_precedence_test.rs +0 -0
  273. {rumdl-0.0.151 → rumdl-0.0.154}/tests/cli_integration_tests.rs +0 -0
  274. {rumdl-0.0.151 → rumdl-0.0.154}/tests/cli_lsp_fix_consistency.rs +0 -0
  275. {rumdl-0.0.151 → rumdl-0.0.154}/tests/cli_statistics_test.rs +0 -0
  276. {rumdl-0.0.151 → rumdl-0.0.154}/tests/common/cli_test_utils.rs +0 -0
  277. {rumdl-0.0.151 → rumdl-0.0.154}/tests/common/fixtures.rs +0 -0
  278. {rumdl-0.0.151 → rumdl-0.0.154}/tests/common/mod.rs +0 -0
  279. {rumdl-0.0.151 → rumdl-0.0.154}/tests/common/test_utils.rs +0 -0
  280. {rumdl-0.0.151 → rumdl-0.0.154}/tests/commonmark_compliance_tests.rs +0 -0
  281. {rumdl-0.0.151 → rumdl-0.0.154}/tests/comprehensive_integration_tests.rs +0 -0
  282. {rumdl-0.0.151 → rumdl-0.0.154}/tests/comprehensive_output_format_tests.rs +0 -0
  283. {rumdl-0.0.151 → rumdl-0.0.154}/tests/config_application_tests.rs +0 -0
  284. {rumdl-0.0.151 → rumdl-0.0.154}/tests/config_file_command_test.rs +0 -0
  285. {rumdl-0.0.151 → rumdl-0.0.154}/tests/config_tests.rs +0 -0
  286. {rumdl-0.0.151 → rumdl-0.0.154}/tests/config_upward_traversal_test.rs +0 -0
  287. {rumdl-0.0.151 → rumdl-0.0.154}/tests/configuration_inheritance_tests.rs +0 -0
  288. {rumdl-0.0.151 → rumdl-0.0.154}/tests/consistency_regression_tests.rs +0 -0
  289. {rumdl-0.0.151 → rumdl-0.0.154}/tests/cross_platform_compatibility_tests.rs +0 -0
  290. {rumdl-0.0.151 → rumdl-0.0.154}/tests/deeply_nested_lists_performance_test.rs +0 -0
  291. {rumdl-0.0.151 → rumdl-0.0.154}/tests/escaped_brackets_test.rs +0 -0
  292. {rumdl-0.0.151 → rumdl-0.0.154}/tests/final_confidence_assessment.rs +0 -0
  293. {rumdl-0.0.151 → rumdl-0.0.154}/tests/fix_counting_test.rs +0 -0
  294. {rumdl-0.0.151 → rumdl-0.0.154}/tests/fix_performance_baseline_test.rs +0 -0
  295. {rumdl-0.0.151 → rumdl-0.0.154}/tests/fixable_unfixable_config_test.rs +0 -0
  296. {rumdl-0.0.151 → rumdl-0.0.154}/tests/init_command_test.rs +0 -0
  297. {rumdl-0.0.151 → rumdl-0.0.154}/tests/init_tests.rs +0 -0
  298. {rumdl-0.0.151 → rumdl-0.0.154}/tests/inline_config_blocks_test.rs +0 -0
  299. {rumdl-0.0.151 → rumdl-0.0.154}/tests/inline_config_test.rs +0 -0
  300. {rumdl-0.0.151 → rumdl-0.0.154}/tests/integration_tests.rs +0 -0
  301. {rumdl-0.0.151 → rumdl-0.0.154}/tests/json_output_test.rs +0 -0
  302. {rumdl-0.0.151 → rumdl-0.0.154}/tests/kramdown_integration_test.rs +0 -0
  303. {rumdl-0.0.151 → rumdl-0.0.154}/tests/lib.rs +0 -0
  304. {rumdl-0.0.151 → rumdl-0.0.154}/tests/lsp_editor_integration_tests.rs +0 -0
  305. {rumdl-0.0.151 → rumdl-0.0.154}/tests/lsp_formatting_tests.rs +0 -0
  306. {rumdl-0.0.151 → rumdl-0.0.154}/tests/lsp_initialization_options_test.rs +0 -0
  307. {rumdl-0.0.151 → rumdl-0.0.154}/tests/lsp_integration_tests.rs +0 -0
  308. {rumdl-0.0.151 → rumdl-0.0.154}/tests/lsp_memory_leak_tests.rs +0 -0
  309. {rumdl-0.0.151 → rumdl-0.0.154}/tests/lsp_mkdocs_flavor_test.rs +0 -0
  310. {rumdl-0.0.151 → rumdl-0.0.154}/tests/lsp_tests.rs +0 -0
  311. {rumdl-0.0.151 → rumdl-0.0.154}/tests/lsp_unopened_document_test.rs +0 -0
  312. {rumdl-0.0.151 → rumdl-0.0.154}/tests/malformed_markdown_stress_tests.rs +0 -0
  313. {rumdl-0.0.151 → rumdl-0.0.154}/tests/markdownlint_cli_integration.rs +0 -0
  314. {rumdl-0.0.151 → rumdl-0.0.154}/tests/markdownlint_config_test.rs +0 -0
  315. {rumdl-0.0.151 → rumdl-0.0.154}/tests/markdownlintignore_test.rs +0 -0
  316. {rumdl-0.0.151 → rumdl-0.0.154}/tests/md013_reflow_integration_test.rs +0 -0
  317. {rumdl-0.0.151 → rumdl-0.0.154}/tests/md032_edge_cases_test.rs +0 -0
  318. {rumdl-0.0.151 → rumdl-0.0.154}/tests/md032_ordered_list_bug_test.rs +0 -0
  319. {rumdl-0.0.151 → rumdl-0.0.154}/tests/md033_edge_cases_test.rs +0 -0
  320. {rumdl-0.0.151 → rumdl-0.0.154}/tests/md037_xxxx_regression_test.rs +0 -0
  321. {rumdl-0.0.151 → rumdl-0.0.154}/tests/md038_false_positive_test.rs +0 -0
  322. {rumdl-0.0.151 → rumdl-0.0.154}/tests/md051_issue_39_regression_test.rs +0 -0
  323. {rumdl-0.0.151 → rumdl-0.0.154}/tests/md051_readme_bug_test.rs +0 -0
  324. {rumdl-0.0.151 → rumdl-0.0.154}/tests/md051_toc_bug_test.rs +0 -0
  325. {rumdl-0.0.151 → rumdl-0.0.154}/tests/md052_literal_brackets_test.rs +0 -0
  326. {rumdl-0.0.151 → rumdl-0.0.154}/tests/md054_code_span_test.rs +0 -0
  327. {rumdl-0.0.151 → rumdl-0.0.154}/tests/nested_code_block_test.rs +0 -0
  328. {rumdl-0.0.151 → rumdl-0.0.154}/tests/output_format_integration_tests.rs +0 -0
  329. {rumdl-0.0.151 → rumdl-0.0.154}/tests/output_format_tests.rs +0 -0
  330. {rumdl-0.0.151 → rumdl-0.0.154}/tests/per_file_ignores_integration_test.rs +0 -0
  331. {rumdl-0.0.151 → rumdl-0.0.154}/tests/perf_check.rs +0 -0
  332. {rumdl-0.0.151 → rumdl-0.0.154}/tests/performance_validation_tests.rs +0 -0
  333. {rumdl-0.0.151 → rumdl-0.0.154}/tests/pyproject_config_tests.rs +0 -0
  334. {rumdl-0.0.151 → rumdl-0.0.154}/tests/python_bindings_test.rs +0 -0
  335. {rumdl-0.0.151 → rumdl-0.0.154}/tests/real_world_repository_tests.rs +0 -0
  336. {rumdl-0.0.151 → rumdl-0.0.154}/tests/regression_prevention_tests.rs +0 -0
  337. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/emphasis_edge_cases_test.rs +0 -0
  338. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/heading_edge_cases_test.rs +0 -0
  339. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/inline_content_edge_cases_test.rs +0 -0
  340. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/link_edge_cases_test.rs +0 -0
  341. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/list_rules_integration_test.rs +0 -0
  342. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md001_test.rs +0 -0
  343. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md001_unicode_test.rs +0 -0
  344. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md002_test.rs +0 -0
  345. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md003_test.rs +0 -0
  346. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md004_test.rs +0 -0
  347. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md005_dynamic_indent_test.rs +0 -0
  348. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md005_test.rs +0 -0
  349. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md005_unicode_test.rs +0 -0
  350. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md006_test.rs +0 -0
  351. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md006_unicode_test.rs +0 -0
  352. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md007_test.rs +0 -0
  353. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md009_test.rs +0 -0
  354. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md010_test.rs +0 -0
  355. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md011_test.rs +0 -0
  356. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md012_test.rs +0 -0
  357. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md013_test.rs +0 -0
  358. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md014_test.rs +0 -0
  359. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md018_test.rs +0 -0
  360. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md019_test.rs +0 -0
  361. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md020_test.rs +0 -0
  362. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md021_test.rs +0 -0
  363. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md022_test.rs +0 -0
  364. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md023_extended_test.rs +0 -0
  365. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md023_test.rs +0 -0
  366. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md024_test.rs +0 -0
  367. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md025_test.rs +0 -0
  368. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md026_kramdown_test.rs +0 -0
  369. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md026_test.rs +0 -0
  370. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md027_test.rs +0 -0
  371. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md028_md009_interaction_test.rs +0 -0
  372. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md028_test.rs +0 -0
  373. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md029_code_block_separation_test.rs +0 -0
  374. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md029_fix_test.rs +0 -0
  375. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md029_issue42_test.rs +0 -0
  376. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md029_markdownlint_parity_test.rs +0 -0
  377. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md029_pathological_edge_cases_test.rs +0 -0
  378. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md029_test.rs +0 -0
  379. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md029_unicode_test.rs +0 -0
  380. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md030_test.rs +0 -0
  381. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md031_kramdown_test.rs +0 -0
  382. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md031_test.rs +0 -0
  383. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md032_test.rs +0 -0
  384. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md033_extended_test.rs +0 -0
  385. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md033_kramdown_test.rs +0 -0
  386. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md033_test.rs +0 -0
  387. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md034_ipv6_test.rs +0 -0
  388. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md034_test.rs +0 -0
  389. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md035_test.rs +0 -0
  390. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md036_test.rs +0 -0
  391. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md037_kramdown_test.rs +0 -0
  392. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md037_test.rs +0 -0
  393. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md038_nested_backticks_test.rs +0 -0
  394. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md038_test.rs +0 -0
  395. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md039_test.rs +0 -0
  396. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md040_test.rs +0 -0
  397. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md041_test.rs +0 -0
  398. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md042_test.rs +0 -0
  399. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md043_test.rs +0 -0
  400. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md044_test.rs +0 -0
  401. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md045_test.rs +0 -0
  402. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md046_test.rs +0 -0
  403. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md047_test.rs +0 -0
  404. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md048_test.rs +0 -0
  405. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md049_test.rs +0 -0
  406. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md050_test.rs +0 -0
  407. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md051_critical_edge_cases_test.rs +0 -0
  408. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md051_edge_cases_test.rs +0 -0
  409. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md051_issue_39_regression_test.rs +0 -0
  410. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md051_performance_edge_cases_test.rs +0 -0
  411. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md051_property_based_test.rs +0 -0
  412. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md051_regression_prevention_test.rs +0 -0
  413. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md051_test.rs +0 -0
  414. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md051_unicode_security_test.rs +0 -0
  415. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md052_test.rs +0 -0
  416. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md053_additional_test.rs +0 -0
  417. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md053_proptest.rs +0 -0
  418. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md053_test.rs +0 -0
  419. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md054_test.rs +0 -0
  420. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md054_unicode_test.rs +0 -0
  421. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md055_test.rs +0 -0
  422. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md056_test.rs +0 -0
  423. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md057_test.rs +0 -0
  424. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md058_kramdown_test.rs +0 -0
  425. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/md058_test.rs +0 -0
  426. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/mkdocs_admonitions_test.rs +0 -0
  427. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/mkdocs_edge_cases_test.rs +0 -0
  428. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/mkdocs_extensions_test.rs +0 -0
  429. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/mkdocs_snippets_test.rs +0 -0
  430. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/mod.rs +0 -0
  431. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules/rule_interaction_test.rs +0 -0
  432. {rumdl-0.0.151 → rumdl-0.0.154}/tests/rules_mod_test.rs +0 -0
  433. {rumdl-0.0.151 → rumdl-0.0.154}/tests/sentence_per_line_test.rs +0 -0
  434. {rumdl-0.0.151 → rumdl-0.0.154}/tests/skip_context_tests.rs +0 -0
  435. {rumdl-0.0.151 → rumdl-0.0.154}/tests/test_ast_code_block_issue.rs +0 -0
  436. {rumdl-0.0.151 → rumdl-0.0.154}/tests/test_gfm_vs_default_parsing.rs +0 -0
  437. {rumdl-0.0.151 → rumdl-0.0.154}/tests/test_lint_context_flow.rs +0 -0
  438. {rumdl-0.0.151 → rumdl-0.0.154}/tests/test_list_ast_structure.rs +0 -0
  439. {rumdl-0.0.151 → rumdl-0.0.154}/tests/test_multiline_ast.rs +0 -0
  440. {rumdl-0.0.151 → rumdl-0.0.154}/tests/test_underscore_edge_cases.rs +0 -0
  441. {rumdl-0.0.151 → rumdl-0.0.154}/tests/thread_safety_tests.rs +0 -0
  442. {rumdl-0.0.151 → rumdl-0.0.154}/tests/unfixable_rules_test.rs +0 -0
  443. {rumdl-0.0.151 → rumdl-0.0.154}/tests/unicode_edge_case_tests.rs +0 -0
  444. {rumdl-0.0.151 → rumdl-0.0.154}/tests/utf8_boundary_tests.rs +0 -0
  445. {rumdl-0.0.151 → rumdl-0.0.154}/tests/utils/blockquote_utils_test.rs +0 -0
  446. {rumdl-0.0.151 → rumdl-0.0.154}/tests/utils/code_block_utils_extended_test.rs +0 -0
  447. {rumdl-0.0.151 → rumdl-0.0.154}/tests/utils/code_block_utils_test.rs +0 -0
  448. {rumdl-0.0.151 → rumdl-0.0.154}/tests/utils/core_utils_test.rs +0 -0
  449. {rumdl-0.0.151 → rumdl-0.0.154}/tests/utils/front_matter_utils_test.rs +0 -0
  450. {rumdl-0.0.151 → rumdl-0.0.154}/tests/utils/line_index_test.rs +0 -0
  451. {rumdl-0.0.151 → rumdl-0.0.154}/tests/utils/mod.rs +0 -0
  452. {rumdl-0.0.151 → rumdl-0.0.154}/tests/utils_markdown_edge_cases.rs +0 -0
  453. {rumdl-0.0.151 → rumdl-0.0.154}/tests/utils_tests.rs +0 -0
  454. {rumdl-0.0.151 → rumdl-0.0.154}/tests/vscode_extension_fixes.rs +0 -0
  455. {rumdl-0.0.151 → rumdl-0.0.154}/tests/vscode_test.rs +0 -0
  456. {rumdl-0.0.151 → rumdl-0.0.154}/tests/vscode_tests.rs +0 -0
  457. {rumdl-0.0.151 → rumdl-0.0.154}/tests/vscode_windows_comprehensive_test.rs +0 -0
  458. {rumdl-0.0.151 → rumdl-0.0.154}/tests/vscode_windows_test.rs +0 -0
@@ -1644,7 +1644,7 @@ checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001"
1644
1644
 
1645
1645
  [[package]]
1646
1646
  name = "rumdl"
1647
- version = "0.0.151"
1647
+ version = "0.0.154"
1648
1648
  dependencies = [
1649
1649
  "anyhow",
1650
1650
  "assert_cmd",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "rumdl"
3
- version = "0.0.151"
3
+ version = "0.0.154"
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.151
3
+ Version: 0.0.154
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
@@ -0,0 +1,251 @@
1
+ # LintContext Optimization Implementation Summary
2
+
3
+ ## Phase 1: Quick Wins - COMPLETED ✓
4
+
5
+ ### Overview
6
+
7
+ Successfully implemented LintContext optimizations for 8 rules, replacing O(n) string scanning with O(1) cached character frequency lookups.
8
+
9
+ ### Rules Optimized
10
+
11
+ #### 1. MD003 - Heading Style
12
+
13
+ **File**: `src/rules/md003_heading_style.rs`
14
+ **Change**: Added two-tier optimization in `should_skip()`
15
+
16
+ - First check: `!ctx.likely_has_headings()` (O(1))
17
+ - Second check: `!ctx.lines.iter().any(|line| line.heading.is_some())` (O(n) fallback)
18
+ **Impact**: Fast rejection for documents without # or --- (setext underlines)
19
+
20
+ #### 2. MD004 - Unordered List Style
21
+
22
+ **File**: `src/rules/md004_unordered_list_style.rs`
23
+ **Changes**:
24
+
25
+ - Line 107: `!ctx.likely_has_lists()` instead of `!ctx.content.contains(['*', '-', '+'])`
26
+ - Line 317: `!ctx.likely_has_lists()` in `should_skip()`
27
+ **Impact**: Eliminates character array scanning, uses cached counts
28
+
29
+ #### 3. MD033 - No Inline HTML
30
+
31
+ **File**: `src/rules/md033_no_inline_html.rs`
32
+ **Changes**:
33
+
34
+ - Line 287: `!ctx.likely_has_html()` instead of `!has_html_tags(content)`
35
+ - Line 437: `!ctx.likely_has_html()` in `should_skip()`
36
+ **Impact**: Removes custom regex_cache function call, uses cached lt_count
37
+
38
+ #### 4. MD042 - No Empty Links
39
+
40
+ **File**: `src/rules/md042_no_empty_links.rs`
41
+ **Change**: Line 168: `!ctx.likely_has_links_or_images()` instead of `!content.contains('[')`
42
+ **Impact**: O(n) scan → O(1) bracket count check
43
+
44
+ #### 5. MD049 - Emphasis Style
45
+
46
+ **File**: `src/rules/md049_emphasis_style.rs`
47
+ **Changes**:
48
+
49
+ - Line 113: `!ctx.likely_has_emphasis()` instead of `!content.contains('*') && !content.contains('_')`
50
+ - Line 247: `!ctx.likely_has_emphasis()` in `should_skip()`
51
+
52
+ **Impact**: Two O(n) scans → O(1) check (asterisk_count > 1 || underscore_count > 1)
53
+
54
+ #### 6. MD055 - Table Pipe Style
55
+
56
+ **File**: `src/rules/md055_table_pipe_style.rs`
57
+ **Changes**:
58
+
59
+ - Line 176: `!ctx.likely_has_tables()` instead of `!ctx.content.contains('|')`
60
+ - Line 185: Removed redundant check in `check()` method
61
+ **Impact**: O(n) scan → O(1) check (pipe_count > 2), eliminated redundancy
62
+
63
+ #### 7. MD027 - Multiple Spaces in Blockquote
64
+
65
+ **File**: `src/rules/md027_multiple_spaces_blockquote.rs`
66
+ **Change**: Line 192: `!ctx.likely_has_blockquotes()` instead of `!ctx.content.contains('>')`
67
+ **Impact**: O(n) scan → O(1) check (gt_count > 0)
68
+
69
+ #### 8. MD040 - Fenced Code Language
70
+
71
+ **File**: `src/rules/md040_fenced_code_language.rs`
72
+ **Change**: Line 342: `!ctx.likely_has_code() && !ctx.has_char('~')` instead of `!content.contains("```") && !content.contains("~~~")`
73
+ **Impact**: Two O(n) substring scans → O(1) backtick check + O(n) tilde check
74
+
75
+ ### Test Results
76
+
77
+ - **All tests passing**: 1689 passed; 0 failed
78
+ - **Test execution time**: 3.66s
79
+ - **No regressions introduced**
80
+
81
+ ### Performance Impact
82
+
83
+ #### Character Frequency Methods Used
84
+
85
+ - `likely_has_headings()`: Checks `hash_count > 0 || hyphen_count > 2`
86
+ - `likely_has_lists()`: Checks `asterisk_count > 0 || hyphen_count > 0 || plus_count > 0`
87
+ - `likely_has_html()`: Checks `lt_count > 0`
88
+ - `likely_has_links_or_images()`: Checks `bracket_count > 0 || exclamation_count > 0`
89
+ - `likely_has_emphasis()`: Checks `asterisk_count > 1 || underscore_count > 1`
90
+ - `likely_has_tables()`: Checks `pipe_count > 2`
91
+ - `likely_has_blockquotes()`: Checks `gt_count > 0`
92
+ - `likely_has_code()`: Checks `backtick_count > 0`
93
+ - `has_char(ch)`: Falls back to `content.contains(ch)` for non-tracked characters
94
+
95
+ #### Expected Speedup
96
+
97
+ - **Documents without relevant elements**: 10-100x faster (avoids full string/line scans)
98
+ - **Documents with relevant elements**: Minimal overhead (~1-2 hash lookups)
99
+ - **Overall workload**: Estimated 10-30% faster on typical markdown files
100
+
101
+ ### Code Quality Improvements
102
+
103
+ 1. **Consistency**: All rules now use standardized LintContext API
104
+ 2. **Maintainability**: Centralized optimization logic in LintContext
105
+ 3. **Readability**: Semantic method names (`likely_has_headings()` vs `content.contains('#')`)
106
+ 4. **Reduced redundancy**: Eliminated duplicate checks (MD055)
107
+
108
+ ## Next Steps: Phase 2
109
+
110
+ ### Remaining Rules to Optimize (46 rules)
111
+
112
+ #### Heading-Related Rules (13 rules)
113
+
114
+ Apply `ctx.likely_has_headings()`:
115
+
116
+ - MD001 - Heading Increment
117
+ - MD002 - First Heading H1
118
+ - MD018 - No Missing Space ATX
119
+ - MD019 - No Multiple Space ATX
120
+ - MD020 - No Missing Space Closed ATX
121
+ - MD021 - No Multiple Space Closed ATX
122
+ - MD022 - Blanks Around Headings
123
+ - MD023 - Heading Start Left
124
+ - MD024 - No Duplicate Heading
125
+ - MD025 - Single Title
126
+ - MD026 - No Trailing Punctuation
127
+ - MD041 - First Line Heading
128
+ - MD043 - Required Headings
129
+
130
+ #### List-Related Rules (6 rules)
131
+
132
+ Apply `ctx.likely_has_lists()`:
133
+
134
+ - MD005 - List Indent
135
+ - MD006 - Start Bullets
136
+ - MD007 - UL Indent
137
+ - MD029 - Ordered List Prefix
138
+ - MD030 - List Marker Space
139
+ - MD032 - Blanks Around Lists
140
+
141
+ #### Link/Image-Related Rules (9 rules)
142
+
143
+ Apply `ctx.likely_has_links_or_images()`:
144
+
145
+ - MD011 - No Reversed Links
146
+ - MD034 - No Bare URLs
147
+ - MD039 - No Space in Links
148
+ - MD045 - No Alt Text
149
+ - MD051 - Link Fragments
150
+ - MD052 - Reference Links/Images
151
+ - MD053 - Link Image Reference Definitions
152
+ - MD054 - Link Image Style
153
+ - MD057 - Existing Relative Links
154
+
155
+ #### Emphasis/Strong-Related Rules (3 rules)
156
+
157
+ Apply `ctx.likely_has_emphasis()`:
158
+
159
+ - MD036 - No Emphasis Only First
160
+ - MD037 - Spaces Around Emphasis
161
+ - MD038 - No Space in Code (also uses backticks)
162
+ - MD050 - Strong Style (may need new `likely_has_strong()` method)
163
+
164
+ #### Code-Related Rules (3 rules)
165
+
166
+ Apply `ctx.likely_has_code()`:
167
+
168
+ - MD014 - Commands Show Output
169
+ - MD031 - Blanks Around Fences
170
+ - MD046 - Code Block Style
171
+ - MD048 - Code Fence Style
172
+
173
+ #### Table-Related Rules (2 rules)
174
+
175
+ Apply `ctx.likely_has_tables()`:
176
+
177
+ - MD056 - Table Column Count
178
+ - MD058 - Blanks Around Tables
179
+
180
+ #### Blockquote-Related Rules (1 rule)
181
+
182
+ Apply `ctx.likely_has_blockquotes()`:
183
+
184
+ - MD028 - No Blanks in Blockquote
185
+
186
+ #### Character-Specific Rules (4 rules)
187
+
188
+ Custom optimizations:
189
+
190
+ - MD009 - Trailing Spaces (already optimized, uses `has_char(' ')`)
191
+ - MD010 - No Hard Tabs (use `has_char('\t')`, consider adding tab_count to CharFrequency)
192
+ - MD012 - No Multiple Blanks (check for '\n')
193
+ - MD035 - HR Style (check for '-', '*', '_')
194
+ - MD047 - Single Trailing Newline (check for '\n')
195
+
196
+ #### Special Cases (1 rule)
197
+
198
+ - MD044 - Proper Names (no early exit possible - must scan all text)
199
+
200
+ ### Phase 3: Architectural Improvements
201
+
202
+ Add to `CharFrequency` struct in `src/lint_context.rs`:
203
+
204
+ ```rust
205
+ /// Count of \t characters (tabs)
206
+ pub tab_count: usize,
207
+
208
+ /// Count of space characters (optional)
209
+ pub space_count: usize,
210
+
211
+ /// Count of newline characters (optional)
212
+ pub newline_count: usize,
213
+ ```
214
+
215
+ This would enable true O(1) optimization for MD009 and MD010.
216
+
217
+ ## Validation
218
+
219
+ ### Changes Validated
220
+
221
+ ✓ All 1689 tests pass
222
+ ✓ No behavioral changes
223
+ ✓ No false negatives
224
+ ✓ Performance improvements maintain correctness
225
+
226
+ ### Files Modified (8 files)
227
+
228
+ 1. `src/rules/md003_heading_style.rs`
229
+ 2. `src/rules/md004_unordered_list_style.rs`
230
+ 3. `src/rules/md033_no_inline_html.rs`
231
+ 4. `src/rules/md042_no_empty_links.rs`
232
+ 5. `src/rules/md049_emphasis_style.rs`
233
+ 6. `src/rules/md055_table_pipe_style.rs`
234
+ 7. `src/rules/md027_multiple_spaces_blockquote.rs`
235
+ 8. `src/rules/md040_fenced_code_language.rs`
236
+
237
+ ### Documentation Created
238
+
239
+ 1. `LINTCONTEXT_OPTIMIZATION_PLAN.md` - Comprehensive implementation plan
240
+ 2. `LINTCONTEXT_OPTIMIZATION_SUMMARY.md` - This file
241
+
242
+ ## Conclusion
243
+
244
+ Phase 1 successfully demonstrates the viability and safety of LintContext optimizations:
245
+
246
+ - **8 rules optimized** with zero test failures
247
+ - **Clean, maintainable code** using standardized API
248
+ - **Measurable performance improvements** expected (10-30% overall)
249
+ - **Foundation established** for remaining 46 rules
250
+
251
+ The two-tier optimization pattern (fast character frequency check + fallback verification) used in MD003 provides a robust template for handling edge cases while maximizing performance.