rumdl 0.0.108__tar.gz → 0.0.110__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 (373) hide show
  1. {rumdl-0.0.108 → rumdl-0.0.110}/.config/nextest.toml +20 -4
  2. {rumdl-0.0.108 → rumdl-0.0.110}/.mise.toml +2 -1
  3. {rumdl-0.0.108 → rumdl-0.0.110}/.pre-commit-config.yaml +5 -5
  4. {rumdl-0.0.108 → rumdl-0.0.110}/CHANGELOG.md +7 -1
  5. {rumdl-0.0.108 → rumdl-0.0.110}/Cargo.lock +8 -8
  6. {rumdl-0.0.108 → rumdl-0.0.110}/Cargo.toml +1 -1
  7. {rumdl-0.0.108 → rumdl-0.0.110}/Makefile +24 -2
  8. {rumdl-0.0.108 → rumdl-0.0.110}/PKG-INFO +1 -1
  9. {rumdl-0.0.108 → rumdl-0.0.110}/src/lint_context.rs +27 -35
  10. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md004_unordered_list_style.rs +8 -15
  11. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md006_start_bullets.rs +49 -21
  12. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md011_no_reversed_links.rs +15 -0
  13. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md029_ordered_list_prefix.rs +63 -19
  14. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md032_blanks_around_lists.rs +38 -2
  15. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md033_no_inline_html.rs +5 -0
  16. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md037_spaces_around_emphasis.rs +52 -8
  17. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md042_no_empty_links.rs +36 -0
  18. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md046_code_block_style.rs +1 -81
  19. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md051_link_fragments.rs +5 -0
  20. {rumdl-0.0.108 → rumdl-0.0.110}/src/utils/code_block_utils.rs +17 -3
  21. {rumdl-0.0.108 → rumdl-0.0.110}/src/utils/document_structure.rs +23 -15
  22. {rumdl-0.0.108 → rumdl-0.0.110}/src/utils/table_utils.rs +104 -5
  23. {rumdl-0.0.108 → rumdl-0.0.110}/tests/cli_integration_tests.rs +6 -45
  24. rumdl-0.0.110/tests/common/cli_test_utils.rs +257 -0
  25. rumdl-0.0.110/tests/common/fixtures.rs +92 -0
  26. rumdl-0.0.110/tests/common/mod.rs +3 -0
  27. rumdl-0.0.110/tests/common/test_utils.rs +160 -0
  28. {rumdl-0.0.108 → rumdl-0.0.110}/tests/lsp_memory_leak_tests.rs +14 -14
  29. {rumdl-0.0.108 → rumdl-0.0.110}/tests/markdownlint_cli_integration.rs +4 -15
  30. {rumdl-0.0.108 → rumdl-0.0.110}/tests/markdownlintignore_test.rs +3 -10
  31. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/list_rules_integration_test.rs +4 -6
  32. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md032_test.rs +86 -1
  33. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md046_test.rs +26 -0
  34. {rumdl-0.0.108 → rumdl-0.0.110}/tests/thread_safety_tests.rs +3 -3
  35. {rumdl-0.0.108 → rumdl-0.0.110}/.rumdl.toml +0 -0
  36. {rumdl-0.0.108 → rumdl-0.0.110}/.rustfmt.toml +0 -0
  37. {rumdl-0.0.108 → rumdl-0.0.110}/LICENSE +0 -0
  38. {rumdl-0.0.108 → rumdl-0.0.110}/MANIFEST.in +0 -0
  39. {rumdl-0.0.108 → rumdl-0.0.110}/README.md +0 -0
  40. {rumdl-0.0.108 → rumdl-0.0.110}/assets/logo.png +0 -0
  41. {rumdl-0.0.108 → rumdl-0.0.110}/benches/fix_performance.rs +0 -0
  42. {rumdl-0.0.108 → rumdl-0.0.110}/benches/range_performance.rs +0 -0
  43. {rumdl-0.0.108 → rumdl-0.0.110}/benches/range_utils_benchmark.rs +0 -0
  44. {rumdl-0.0.108 → rumdl-0.0.110}/benches/rule_performance.rs +0 -0
  45. {rumdl-0.0.108 → rumdl-0.0.110}/benches/simple_fix_bench.rs +0 -0
  46. {rumdl-0.0.108 → rumdl-0.0.110}/benchmark/bin/bench_lint_context.rs +0 -0
  47. {rumdl-0.0.108 → rumdl-0.0.110}/benchmark/bin/benchmark.rs +0 -0
  48. {rumdl-0.0.108 → rumdl-0.0.110}/benchmark/bin/benchmark_rule.rs +0 -0
  49. {rumdl-0.0.108 → rumdl-0.0.110}/benchmark/bin/file_parallel_benchmark.rs +0 -0
  50. {rumdl-0.0.108 → rumdl-0.0.110}/benchmark/bin/measure_code_span_performance.rs +0 -0
  51. {rumdl-0.0.108 → rumdl-0.0.110}/docs/RULES.md +0 -0
  52. {rumdl-0.0.108 → rumdl-0.0.110}/docs/global-settings.md +0 -0
  53. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md001.md +0 -0
  54. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md002.md +0 -0
  55. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md003.md +0 -0
  56. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md004.md +0 -0
  57. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md005.md +0 -0
  58. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md006.md +0 -0
  59. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md007.md +0 -0
  60. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md009.md +0 -0
  61. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md010.md +0 -0
  62. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md011.md +0 -0
  63. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md012.md +0 -0
  64. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md013.md +0 -0
  65. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md014.md +0 -0
  66. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md018.md +0 -0
  67. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md019.md +0 -0
  68. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md020.md +0 -0
  69. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md021.md +0 -0
  70. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md022.md +0 -0
  71. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md023.md +0 -0
  72. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md024.md +0 -0
  73. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md025.md +0 -0
  74. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md026.md +0 -0
  75. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md027.md +0 -0
  76. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md028.md +0 -0
  77. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md029.md +0 -0
  78. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md030.md +0 -0
  79. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md031.md +0 -0
  80. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md032.md +0 -0
  81. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md033.md +0 -0
  82. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md034.md +0 -0
  83. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md035.md +0 -0
  84. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md036.md +0 -0
  85. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md037.md +0 -0
  86. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md038.md +0 -0
  87. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md039.md +0 -0
  88. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md040.md +0 -0
  89. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md041.md +0 -0
  90. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md042.md +0 -0
  91. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md043.md +0 -0
  92. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md044.md +0 -0
  93. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md045.md +0 -0
  94. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md046.md +0 -0
  95. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md047.md +0 -0
  96. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md048.md +0 -0
  97. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md049.md +0 -0
  98. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md050.md +0 -0
  99. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md051.md +0 -0
  100. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md052.md +0 -0
  101. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md053.md +0 -0
  102. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md054.md +0 -0
  103. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md055.md +0 -0
  104. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md056.md +0 -0
  105. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md057.md +0 -0
  106. {rumdl-0.0.108 → rumdl-0.0.110}/docs/md058.md +0 -0
  107. {rumdl-0.0.108 → rumdl-0.0.110}/docs/vscode-extension.md +0 -0
  108. {rumdl-0.0.108 → rumdl-0.0.110}/parity_check.py +0 -0
  109. {rumdl-0.0.108 → rumdl-0.0.110}/pyproject.toml +0 -0
  110. {rumdl-0.0.108 → rumdl-0.0.110}/python/MANIFEST.in +0 -0
  111. {rumdl-0.0.108 → rumdl-0.0.110}/python/PYTHON-README.md +0 -0
  112. {rumdl-0.0.108 → rumdl-0.0.110}/python/rumdl/__init__.py +0 -0
  113. {rumdl-0.0.108 → rumdl-0.0.110}/python/rumdl/__main__.py +0 -0
  114. {rumdl-0.0.108 → rumdl-0.0.110}/python/rumdl/py.typed +0 -0
  115. {rumdl-0.0.108 → rumdl-0.0.110}/rumdl.toml.example +0 -0
  116. {rumdl-0.0.108 → rumdl-0.0.110}/rust-toolchain.toml +0 -0
  117. {rumdl-0.0.108 → rumdl-0.0.110}/scripts/extract-changelog.sh +0 -0
  118. {rumdl-0.0.108 → rumdl-0.0.110}/scripts/prepare-release.sh +0 -0
  119. {rumdl-0.0.108 → rumdl-0.0.110}/scripts/setup-pre-commit.sh +0 -0
  120. {rumdl-0.0.108 → rumdl-0.0.110}/scripts/update-pre-commit-docs.sh +0 -0
  121. {rumdl-0.0.108 → rumdl-0.0.110}/src/bin/debug_frontmatter.rs +0 -0
  122. {rumdl-0.0.108 → rumdl-0.0.110}/src/config.rs +0 -0
  123. {rumdl-0.0.108 → rumdl-0.0.110}/src/exit_codes.rs +0 -0
  124. {rumdl-0.0.108 → rumdl-0.0.110}/src/inline_config.rs +0 -0
  125. {rumdl-0.0.108 → rumdl-0.0.110}/src/lib.rs +0 -0
  126. {rumdl-0.0.108 → rumdl-0.0.110}/src/lsp/mod.rs +0 -0
  127. {rumdl-0.0.108 → rumdl-0.0.110}/src/lsp/server.rs +0 -0
  128. {rumdl-0.0.108 → rumdl-0.0.110}/src/lsp/types.rs +0 -0
  129. {rumdl-0.0.108 → rumdl-0.0.110}/src/main.rs +0 -0
  130. {rumdl-0.0.108 → rumdl-0.0.110}/src/markdownlint_config.rs +0 -0
  131. {rumdl-0.0.108 → rumdl-0.0.110}/src/output/formatters/azure.rs +0 -0
  132. {rumdl-0.0.108 → rumdl-0.0.110}/src/output/formatters/concise.rs +0 -0
  133. {rumdl-0.0.108 → rumdl-0.0.110}/src/output/formatters/github.rs +0 -0
  134. {rumdl-0.0.108 → rumdl-0.0.110}/src/output/formatters/gitlab.rs +0 -0
  135. {rumdl-0.0.108 → rumdl-0.0.110}/src/output/formatters/grouped.rs +0 -0
  136. {rumdl-0.0.108 → rumdl-0.0.110}/src/output/formatters/json.rs +0 -0
  137. {rumdl-0.0.108 → rumdl-0.0.110}/src/output/formatters/json_lines.rs +0 -0
  138. {rumdl-0.0.108 → rumdl-0.0.110}/src/output/formatters/junit.rs +0 -0
  139. {rumdl-0.0.108 → rumdl-0.0.110}/src/output/formatters/mod.rs +0 -0
  140. {rumdl-0.0.108 → rumdl-0.0.110}/src/output/formatters/pylint.rs +0 -0
  141. {rumdl-0.0.108 → rumdl-0.0.110}/src/output/formatters/sarif.rs +0 -0
  142. {rumdl-0.0.108 → rumdl-0.0.110}/src/output/formatters/text.rs +0 -0
  143. {rumdl-0.0.108 → rumdl-0.0.110}/src/output/mod.rs +0 -0
  144. {rumdl-0.0.108 → rumdl-0.0.110}/src/parallel.rs +0 -0
  145. {rumdl-0.0.108 → rumdl-0.0.110}/src/performance.rs +0 -0
  146. {rumdl-0.0.108 → rumdl-0.0.110}/src/profiling.rs +0 -0
  147. {rumdl-0.0.108 → rumdl-0.0.110}/src/python.rs +0 -0
  148. {rumdl-0.0.108 → rumdl-0.0.110}/src/rule.rs +0 -0
  149. {rumdl-0.0.108 → rumdl-0.0.110}/src/rule_config.rs +0 -0
  150. {rumdl-0.0.108 → rumdl-0.0.110}/src/rule_config_serde.rs +0 -0
  151. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/blockquote_utils.rs +0 -0
  152. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/code_block_utils.rs +0 -0
  153. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/code_fence_utils.rs +0 -0
  154. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/emphasis_style.rs +0 -0
  155. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/front_matter_utils.rs +0 -0
  156. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/heading_utils.rs +0 -0
  157. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/list_utils.rs +0 -0
  158. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md001_heading_increment.rs +0 -0
  159. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md002_first_heading_h1/md002_config.rs +0 -0
  160. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md002_first_heading_h1.rs +0 -0
  161. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md003_heading_style/md003_config.rs +0 -0
  162. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md003_heading_style.rs +0 -0
  163. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md004_unordered_list_style/md004_config.rs +0 -0
  164. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md005_list_indent.rs +0 -0
  165. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md007_ul_indent/md007_config.rs +0 -0
  166. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md007_ul_indent.rs +0 -0
  167. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md009_trailing_spaces/md009_config.rs +0 -0
  168. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md009_trailing_spaces.rs +0 -0
  169. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md010_no_hard_tabs/md010_config.rs +0 -0
  170. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md010_no_hard_tabs.rs +0 -0
  171. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md012_no_multiple_blanks/md012_config.rs +0 -0
  172. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md012_no_multiple_blanks.rs +0 -0
  173. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md013_line_length/md013_config.rs +0 -0
  174. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md013_line_length.rs +0 -0
  175. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md014_commands_show_output/md014_config.rs +0 -0
  176. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md014_commands_show_output.rs +0 -0
  177. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md018_no_missing_space_atx.rs +0 -0
  178. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md019_no_multiple_space_atx.rs +0 -0
  179. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
  180. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
  181. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md022_blanks_around_headings/md022_config.rs +0 -0
  182. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md022_blanks_around_headings.rs +0 -0
  183. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md023_heading_start_left.rs +0 -0
  184. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md024_no_duplicate_heading/md024_config.rs +0 -0
  185. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md024_no_duplicate_heading.rs +0 -0
  186. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md025_single_title/md025_config.rs +0 -0
  187. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md025_single_title.rs +0 -0
  188. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md026_no_trailing_punctuation/md026_config.rs +0 -0
  189. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md026_no_trailing_punctuation.rs +0 -0
  190. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
  191. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md028_no_blanks_blockquote.rs +0 -0
  192. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md029_ordered_list_prefix/md029_config.rs +0 -0
  193. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md030_list_marker_space/md030_config.rs +0 -0
  194. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md030_list_marker_space.rs +0 -0
  195. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md031_blanks_around_fences.rs +0 -0
  196. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md033_no_inline_html/md033_config.rs +0 -0
  197. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md034_no_bare_urls.rs +0 -0
  198. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md035_hr_style/md035_config.rs +0 -0
  199. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md035_hr_style.rs +0 -0
  200. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md036_no_emphasis_only_first/md036_config.rs +0 -0
  201. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md036_no_emphasis_only_first.rs +0 -0
  202. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md038_no_space_in_code.rs +0 -0
  203. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md039_no_space_in_links.rs +0 -0
  204. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md040_fenced_code_language.rs +0 -0
  205. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md041_first_line_heading.rs +0 -0
  206. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md043_required_headings.rs +0 -0
  207. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md044_proper_names/md044_config.rs +0 -0
  208. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md044_proper_names.rs +0 -0
  209. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md045_no_alt_text/md045_config.rs +0 -0
  210. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md045_no_alt_text.rs +0 -0
  211. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md046_code_block_style/md046_config.rs +0 -0
  212. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md047_single_trailing_newline.rs +0 -0
  213. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md048_code_fence_style/md048_config.rs +0 -0
  214. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md048_code_fence_style.rs +0 -0
  215. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md049_emphasis_style/md049_config.rs +0 -0
  216. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md049_emphasis_style.rs +0 -0
  217. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md050_strong_style/md050_config.rs +0 -0
  218. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md050_strong_style.rs +0 -0
  219. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md052_reference_links_images.rs +0 -0
  220. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md053_link_image_reference_definitions.rs +0 -0
  221. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md054_link_image_style/md054_config.rs +0 -0
  222. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md054_link_image_style.rs +0 -0
  223. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md055_table_pipe_style/md055_config.rs +0 -0
  224. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md055_table_pipe_style.rs +0 -0
  225. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md056_table_column_count.rs +0 -0
  226. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md057_existing_relative_links/md057_config.rs +0 -0
  227. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md057_existing_relative_links.rs +0 -0
  228. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/md058_blanks_around_tables.rs +0 -0
  229. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/mod.rs +0 -0
  230. {rumdl-0.0.108 → rumdl-0.0.110}/src/rules/strong_style.rs +0 -0
  231. {rumdl-0.0.108 → rumdl-0.0.110}/src/utils/ast_utils.rs +0 -0
  232. {rumdl-0.0.108 → rumdl-0.0.110}/src/utils/early_returns.rs +0 -0
  233. {rumdl-0.0.108 → rumdl-0.0.110}/src/utils/element_cache.rs +0 -0
  234. {rumdl-0.0.108 → rumdl-0.0.110}/src/utils/emphasis_utils.rs +0 -0
  235. {rumdl-0.0.108 → rumdl-0.0.110}/src/utils/fix_utils.rs +0 -0
  236. {rumdl-0.0.108 → rumdl-0.0.110}/src/utils/markdown_elements.rs +0 -0
  237. {rumdl-0.0.108 → rumdl-0.0.110}/src/utils/mod.rs +0 -0
  238. {rumdl-0.0.108 → rumdl-0.0.110}/src/utils/range_utils.rs +0 -0
  239. {rumdl-0.0.108 → rumdl-0.0.110}/src/utils/regex_cache.rs +0 -0
  240. {rumdl-0.0.108 → rumdl-0.0.110}/src/utils/string_interner.rs +0 -0
  241. {rumdl-0.0.108 → rumdl-0.0.110}/src/utils/text_reflow.rs +0 -0
  242. {rumdl-0.0.108 → rumdl-0.0.110}/src/vscode.rs +0 -0
  243. {rumdl-0.0.108 → rumdl-0.0.110}/tests/advanced_integration_tests.rs +0 -0
  244. {rumdl-0.0.108 → rumdl-0.0.110}/tests/character_ranges/additional_tests.rs +0 -0
  245. {rumdl-0.0.108 → rumdl-0.0.110}/tests/character_ranges/basic_tests.rs +0 -0
  246. {rumdl-0.0.108 → rumdl-0.0.110}/tests/character_ranges/comprehensive_tests.rs +0 -0
  247. {rumdl-0.0.108 → rumdl-0.0.110}/tests/character_ranges/extended_tests.rs +0 -0
  248. {rumdl-0.0.108 → rumdl-0.0.110}/tests/character_ranges/mod.rs +0 -0
  249. {rumdl-0.0.108 → rumdl-0.0.110}/tests/character_ranges/unicode_utils.rs +0 -0
  250. {rumdl-0.0.108 → rumdl-0.0.110}/tests/cli_duplication_test.rs +0 -0
  251. {rumdl-0.0.108 → rumdl-0.0.110}/tests/cli_explain_test.rs +0 -0
  252. {rumdl-0.0.108 → rumdl-0.0.110}/tests/cli_flag_precedence_test.rs +0 -0
  253. {rumdl-0.0.108 → rumdl-0.0.110}/tests/cli_lsp_fix_consistency.rs +0 -0
  254. {rumdl-0.0.108 → rumdl-0.0.110}/tests/cli_statistics_test.rs +0 -0
  255. {rumdl-0.0.108 → rumdl-0.0.110}/tests/commonmark_compliance_tests.rs +0 -0
  256. {rumdl-0.0.108 → rumdl-0.0.110}/tests/comprehensive_integration_tests.rs +0 -0
  257. {rumdl-0.0.108 → rumdl-0.0.110}/tests/comprehensive_output_format_tests.rs +0 -0
  258. {rumdl-0.0.108 → rumdl-0.0.110}/tests/config_application_tests.rs +0 -0
  259. {rumdl-0.0.108 → rumdl-0.0.110}/tests/config_file_command_test.rs +0 -0
  260. {rumdl-0.0.108 → rumdl-0.0.110}/tests/config_tests.rs +0 -0
  261. {rumdl-0.0.108 → rumdl-0.0.110}/tests/configuration_inheritance_tests.rs +0 -0
  262. {rumdl-0.0.108 → rumdl-0.0.110}/tests/consistency_regression_tests.rs +0 -0
  263. {rumdl-0.0.108 → rumdl-0.0.110}/tests/cross_platform_compatibility_tests.rs +0 -0
  264. {rumdl-0.0.108 → rumdl-0.0.110}/tests/deeply_nested_lists_performance_test.rs +0 -0
  265. {rumdl-0.0.108 → rumdl-0.0.110}/tests/escaped_brackets_test.rs +0 -0
  266. {rumdl-0.0.108 → rumdl-0.0.110}/tests/final_confidence_assessment.rs +0 -0
  267. {rumdl-0.0.108 → rumdl-0.0.110}/tests/init_command_test.rs +0 -0
  268. {rumdl-0.0.108 → rumdl-0.0.110}/tests/init_tests.rs +0 -0
  269. {rumdl-0.0.108 → rumdl-0.0.110}/tests/inline_config_blocks_test.rs +0 -0
  270. {rumdl-0.0.108 → rumdl-0.0.110}/tests/inline_config_test.rs +0 -0
  271. {rumdl-0.0.108 → rumdl-0.0.110}/tests/integration_tests.rs +0 -0
  272. {rumdl-0.0.108 → rumdl-0.0.110}/tests/json_output_test.rs +0 -0
  273. {rumdl-0.0.108 → rumdl-0.0.110}/tests/lib.rs +0 -0
  274. {rumdl-0.0.108 → rumdl-0.0.110}/tests/lsp_editor_integration_tests.rs +0 -0
  275. {rumdl-0.0.108 → rumdl-0.0.110}/tests/lsp_integration_tests.rs +0 -0
  276. {rumdl-0.0.108 → rumdl-0.0.110}/tests/lsp_tests.rs +0 -0
  277. {rumdl-0.0.108 → rumdl-0.0.110}/tests/malformed_markdown_stress_tests.rs +0 -0
  278. {rumdl-0.0.108 → rumdl-0.0.110}/tests/markdownlint_config_test.rs +0 -0
  279. {rumdl-0.0.108 → rumdl-0.0.110}/tests/md013_reflow_integration_test.rs +0 -0
  280. {rumdl-0.0.108 → rumdl-0.0.110}/tests/nested_code_block_test.rs +0 -0
  281. {rumdl-0.0.108 → rumdl-0.0.110}/tests/output_format_integration_tests.rs +0 -0
  282. {rumdl-0.0.108 → rumdl-0.0.110}/tests/output_format_tests.rs +0 -0
  283. {rumdl-0.0.108 → rumdl-0.0.110}/tests/perf_check.rs +0 -0
  284. {rumdl-0.0.108 → rumdl-0.0.110}/tests/performance_validation_tests.rs +0 -0
  285. {rumdl-0.0.108 → rumdl-0.0.110}/tests/pyproject_config_tests.rs +0 -0
  286. {rumdl-0.0.108 → rumdl-0.0.110}/tests/python_bindings_test.rs +0 -0
  287. {rumdl-0.0.108 → rumdl-0.0.110}/tests/real_world_repository_tests.rs +0 -0
  288. {rumdl-0.0.108 → rumdl-0.0.110}/tests/regression_prevention_tests.rs +0 -0
  289. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/emphasis_edge_cases_test.rs +0 -0
  290. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/heading_edge_cases_test.rs +0 -0
  291. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/inline_content_edge_cases_test.rs +0 -0
  292. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/link_edge_cases_test.rs +0 -0
  293. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md001_test.rs +0 -0
  294. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md001_unicode_test.rs +0 -0
  295. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md002_test.rs +0 -0
  296. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md003_test.rs +0 -0
  297. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md004_test.rs +0 -0
  298. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md005_test.rs +0 -0
  299. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md005_unicode_test.rs +0 -0
  300. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md006_test.rs +0 -0
  301. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md006_unicode_test.rs +0 -0
  302. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md007_test.rs +0 -0
  303. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md009_test.rs +0 -0
  304. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md010_test.rs +0 -0
  305. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md011_test.rs +0 -0
  306. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md012_test.rs +0 -0
  307. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md013_test.rs +0 -0
  308. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md014_test.rs +0 -0
  309. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md018_test.rs +0 -0
  310. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md019_test.rs +0 -0
  311. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md020_test.rs +0 -0
  312. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md021_test.rs +0 -0
  313. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md022_test.rs +0 -0
  314. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md023_extended_test.rs +0 -0
  315. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md023_test.rs +0 -0
  316. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md024_test.rs +0 -0
  317. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md025_test.rs +0 -0
  318. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md026_test.rs +0 -0
  319. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md027_test.rs +0 -0
  320. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md028_test.rs +0 -0
  321. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md029_test.rs +0 -0
  322. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md029_unicode_test.rs +0 -0
  323. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md030_test.rs +0 -0
  324. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md031_test.rs +0 -0
  325. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md033_extended_test.rs +0 -0
  326. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md033_test.rs +0 -0
  327. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md034_ipv6_test.rs +0 -0
  328. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md034_test.rs +0 -0
  329. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md035_test.rs +0 -0
  330. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md036_test.rs +0 -0
  331. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md037_test.rs +0 -0
  332. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md038_nested_backticks_test.rs +0 -0
  333. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md038_test.rs +0 -0
  334. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md039_test.rs +0 -0
  335. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md040_test.rs +0 -0
  336. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md041_test.rs +0 -0
  337. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md042_test.rs +0 -0
  338. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md043_test.rs +0 -0
  339. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md044_test.rs +0 -0
  340. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md045_test.rs +0 -0
  341. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md047_test.rs +0 -0
  342. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md048_test.rs +0 -0
  343. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md049_test.rs +0 -0
  344. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md050_test.rs +0 -0
  345. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md051_test.rs +0 -0
  346. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md051_unicode_test.rs +0 -0
  347. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md052_test.rs +0 -0
  348. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md053_additional_test.rs +0 -0
  349. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md053_proptest.rs +0 -0
  350. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md053_test.rs +0 -0
  351. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md054_test.rs +0 -0
  352. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md054_unicode_test.rs +0 -0
  353. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md055_test.rs +0 -0
  354. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md056_test.rs +0 -0
  355. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md057_test.rs +0 -0
  356. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/md058_test.rs +0 -0
  357. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules/mod.rs +0 -0
  358. {rumdl-0.0.108 → rumdl-0.0.110}/tests/rules_mod_test.rs +0 -0
  359. {rumdl-0.0.108 → rumdl-0.0.110}/tests/unicode_edge_case_tests.rs +0 -0
  360. {rumdl-0.0.108 → rumdl-0.0.110}/tests/utils/blockquote_utils_test.rs +0 -0
  361. {rumdl-0.0.108 → rumdl-0.0.110}/tests/utils/code_block_utils_extended_test.rs +0 -0
  362. {rumdl-0.0.108 → rumdl-0.0.110}/tests/utils/code_block_utils_test.rs +0 -0
  363. {rumdl-0.0.108 → rumdl-0.0.110}/tests/utils/core_utils_test.rs +0 -0
  364. {rumdl-0.0.108 → rumdl-0.0.110}/tests/utils/front_matter_utils_test.rs +0 -0
  365. {rumdl-0.0.108 → rumdl-0.0.110}/tests/utils/line_index_test.rs +0 -0
  366. {rumdl-0.0.108 → rumdl-0.0.110}/tests/utils/mod.rs +0 -0
  367. {rumdl-0.0.108 → rumdl-0.0.110}/tests/utils_markdown_edge_cases.rs +0 -0
  368. {rumdl-0.0.108 → rumdl-0.0.110}/tests/utils_tests.rs +0 -0
  369. {rumdl-0.0.108 → rumdl-0.0.110}/tests/vscode_extension_fixes.rs +0 -0
  370. {rumdl-0.0.108 → rumdl-0.0.110}/tests/vscode_test.rs +0 -0
  371. {rumdl-0.0.108 → rumdl-0.0.110}/tests/vscode_tests.rs +0 -0
  372. {rumdl-0.0.108 → rumdl-0.0.110}/tests/vscode_windows_comprehensive_test.rs +0 -0
  373. {rumdl-0.0.108 → rumdl-0.0.110}/tests/vscode_windows_test.rs +0 -0
@@ -36,8 +36,8 @@ retries = 0
36
36
  # Quick profile for development
37
37
  [profile.quick]
38
38
 
39
- # Skip slow tests
40
- default-filter = 'not test(/memory/) and not test(/stress/) and not test(/large/)'
39
+ # Skip slow tests and performance tests
40
+ default-filter = 'not test(/memory/) and not test(/stress/) and not test(/large/) and not test(/error_propagation/) and not test(/performance/) and not test(/comprehensive/) and not test(/deeply_nested/)'
41
41
 
42
42
  # Even more parallel execution locally
43
43
  test-threads = "num-cpus"
@@ -45,11 +45,27 @@ test-threads = "num-cpus"
45
45
  # Less verbose output
46
46
  status-level = "fail"
47
47
 
48
+ # Development profile - balance between speed and coverage
49
+ [profile.dev]
50
+
51
+ # Skip the slowest tests but include integration tests
52
+ default-filter = 'not test(/error_propagation/) and not test(/deeply_nested/) and not test(/memory/) and not test(/stress/) and not test(/large/) and not test(/performance/) and not test(/perf_check/)'
53
+
54
+ # Good parallelization for dev machines
55
+ test-threads = "num-cpus"
56
+
57
+ # Show failures immediately
58
+ failure-output = "immediate"
59
+ status-level = "fail"
60
+
61
+ # No retries for faster feedback
62
+ retries = 0
63
+
48
64
  # Ultra-fast profile for pre-commit hooks
49
65
  [profile.pre-commit]
50
66
 
51
67
  # Only run unit tests in lib, skip all integration tests and binaries
52
- default-filter = 'package(rumdl) and kind(lib) and not test(/slow|stress|large|integration|comprehensive|cli|config|advanced|commonmark|consistency|performance|benchmark|parity/)'
68
+ default-filter = 'package(rumdl) and kind(lib) and not test(/slow|stress|large|integration|comprehensive|cli|config|advanced|commonmark|consistency|performance|benchmark|parity|error_propagation|deeply_nested|memory/)'
53
69
 
54
70
  # Maximum parallelism for speed
55
71
  test-threads = "num-cpus"
@@ -63,4 +79,4 @@ success-output = "never"
63
79
  retries = 0
64
80
 
65
81
  # Fail fast on first failure
66
- fail-fast = true
82
+ fail-fast = true
@@ -20,6 +20,7 @@ uv = "latest"
20
20
  "cargo:cargo-watch" = "latest"
21
21
  "cargo:maturin" = "latest"
22
22
  "cargo:cargo-binstall" = "latest"
23
+ "cargo:cargo-zigbuild" = "latest" # For building static Linux binaries
23
24
 
24
25
  # Zig for cross-compilation (used by maturin)
25
26
  zig = "0.13"
@@ -104,4 +105,4 @@ make test-quick
104
105
  # rust = "1.87.0"
105
106
  #
106
107
  # [tools.windows]
107
- # rust = "1.87.0"
108
+ # rust = "1.87.0"
@@ -1,8 +1,8 @@
1
1
  # Pre-commit hooks for rumdl
2
- # Install with:
2
+ # Install with:
3
3
  # pre-commit install # Install commit hooks
4
4
  # pre-commit install --hook-type pre-push # Install push hooks
5
- # Run manually:
5
+ # Run manually:
6
6
  # pre-commit run --all-files # Run commit hooks
7
7
  # pre-commit run --hook-stage push --all-files # Run push hooks
8
8
 
@@ -64,7 +64,7 @@ repos:
64
64
  language: system
65
65
  types: [rust]
66
66
  pass_filenames: false
67
- stages: [push]
67
+ stages: [pre-push]
68
68
  verbose: true
69
69
 
70
70
  - id: cargo-lint-full
@@ -73,7 +73,7 @@ repos:
73
73
  language: system
74
74
  types: [rust]
75
75
  pass_filenames: false
76
- stages: [push]
76
+ stages: [pre-push]
77
77
  verbose: true
78
78
 
79
79
  - id: cargo-doc-check
@@ -82,5 +82,5 @@ repos:
82
82
  language: system
83
83
  types: [rust]
84
84
  pass_filenames: false
85
- stages: [push]
85
+ stages: [pre-push]
86
86
  verbose: true
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.0.110] - 2025-08-08
11
+
12
+ ## [0.0.110] - 2025-08-08
13
+
10
14
  ## [0.0.107] - 2025-08-06
11
15
 
12
16
  ## [0.0.107] - 2025-08-06
@@ -298,7 +302,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
298
302
 
299
303
  - Initial implementation of remaining rules for markdownlint parity
300
304
 
301
- [Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.107...HEAD
305
+ [Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.110...HEAD
306
+ [0.0.110]: https://github.com/rvben/rumdl/compare/v0.0.109...v0.0.110
307
+ [0.0.110]: https://github.com/rvben/rumdl/compare/v0.0.109...v0.0.110
302
308
  [0.0.107]: https://github.com/rvben/rumdl/compare/v0.0.106...v0.0.107
303
309
  [0.0.107]: https://github.com/rvben/rumdl/compare/v0.0.106...v0.0.107
304
310
  [0.0.105]: https://github.com/rvben/rumdl/compare/v0.0.104...v0.0.105
@@ -220,9 +220,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
220
220
 
221
221
  [[package]]
222
222
  name = "cc"
223
- version = "1.2.31"
223
+ version = "1.2.32"
224
224
  source = "registry+https://github.com/rust-lang/crates.io-index"
225
- checksum = "c3a42d84bb6b69d3a8b3eaacf0d88f179e1929695e1ad012b6cf64d9caaa5fd2"
225
+ checksum = "2352e5597e9c544d5e6d9c95190d5d27738ade584fa8db0a16e130e5c2b5296e"
226
226
  dependencies = [
227
227
  "shlex",
228
228
  ]
@@ -672,9 +672,9 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
672
672
 
673
673
  [[package]]
674
674
  name = "hashbrown"
675
- version = "0.15.4"
675
+ version = "0.15.5"
676
676
  source = "registry+https://github.com/rust-lang/crates.io-index"
677
- checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5"
677
+ checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
678
678
 
679
679
  [[package]]
680
680
  name = "heck"
@@ -848,7 +848,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
848
848
  checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661"
849
849
  dependencies = [
850
850
  "equivalent",
851
- "hashbrown 0.15.4",
851
+ "hashbrown 0.15.5",
852
852
  ]
853
853
 
854
854
  [[package]]
@@ -1493,7 +1493,7 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
1493
1493
 
1494
1494
  [[package]]
1495
1495
  name = "rumdl"
1496
- version = "0.0.108"
1496
+ version = "0.0.110"
1497
1497
  dependencies = [
1498
1498
  "anyhow",
1499
1499
  "assert_cmd",
@@ -1689,9 +1689,9 @@ dependencies = [
1689
1689
 
1690
1690
  [[package]]
1691
1691
  name = "slab"
1692
- version = "0.4.10"
1692
+ version = "0.4.11"
1693
1693
  source = "registry+https://github.com/rust-lang/crates.io-index"
1694
- checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d"
1694
+ checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
1695
1695
 
1696
1696
  [[package]]
1697
1697
  name = "smallvec"
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "rumdl"
3
- version = "0.0.108"
3
+ version = "0.0.110"
4
4
  edition = "2024"
5
5
  rust-version = "1.88.0"
6
6
  description = "A fast Markdown linter written in Rust (Ru(st) MarkDown Linter)"
@@ -1,4 +1,4 @@
1
- .PHONY: build test clean fmt check doc version-major version-minor version-patch build-python build-wheel dev-install setup-mise dev-setup dev-verify update-dependencies update-rust-version pre-release
1
+ .PHONY: build test clean fmt check doc version-major version-minor version-patch build-python build-wheel dev-install setup-mise dev-setup dev-verify update-dependencies update-rust-version pre-release build-static-linux-x64 build-static-linux-arm64 build-static-all
2
2
 
3
3
  # Development environment setup
4
4
  setup-mise:
@@ -60,12 +60,34 @@ ci-install-mise:
60
60
  build:
61
61
  cargo build --release
62
62
 
63
+ # Static binary builds for Linux (musl)
64
+ build-static-linux-x64:
65
+ @echo "Building static Linux x86_64 binary..."
66
+ rustup target add x86_64-unknown-linux-musl 2>/dev/null || true
67
+ mise exec -- cargo zigbuild --release --target x86_64-unknown-linux-musl
68
+ @echo "Static binary built at: target/x86_64-unknown-linux-musl/release/rumdl"
69
+
70
+ build-static-linux-arm64:
71
+ @echo "Building static Linux ARM64 binary..."
72
+ rustup target add aarch64-unknown-linux-musl 2>/dev/null || true
73
+ mise exec -- cargo zigbuild --release --target aarch64-unknown-linux-musl
74
+ @echo "Static binary built at: target/aarch64-unknown-linux-musl/release/rumdl"
75
+
76
+ build-static-all: build-static-linux-x64 build-static-linux-arm64
77
+ @echo "All static Linux binaries built successfully"
78
+
63
79
  test:
80
+ cargo nextest run --profile dev
81
+
82
+ test-legacy:
64
83
  cargo test
65
84
 
66
85
  test-nextest:
67
86
  cargo nextest run
68
87
 
88
+ test-dev:
89
+ cargo nextest run --profile dev
90
+
69
91
  test-quick:
70
92
  cargo nextest run --profile quick
71
93
 
@@ -100,7 +122,7 @@ doc:
100
122
  cargo doc --no-deps
101
123
 
102
124
  watch-test:
103
- cargo watch -x test
125
+ cargo watch -x "nextest run --profile quick"
104
126
 
105
127
  all: fmt check test build
106
128
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rumdl
3
- Version: 0.0.108
3
+ Version: 0.0.110
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -948,39 +948,18 @@ impl<'a> LintContext<'a> {
948
948
  let leading_spaces = caps.get(1).map_or("", |m| m.as_str());
949
949
  let marker = caps.get(2).map_or("", |m| m.as_str());
950
950
  let spacing = caps.get(3).map_or("", |m| m.as_str());
951
- let content = caps.get(4).map_or("", |m| m.as_str());
951
+ let _content = caps.get(4).map_or("", |m| m.as_str());
952
952
  let marker_column = blockquote_prefix_len + leading_spaces.len();
953
953
  let content_column = marker_column + marker.len() + spacing.len();
954
954
 
955
- // Check if this is likely emphasis or not a list item
955
+ // According to CommonMark spec, unordered list items MUST have at least one space
956
+ // after the marker (-, *, or +). Without a space, it's not a list item.
957
+ // This also naturally handles cases like:
958
+ // - *emphasis* (not a list)
959
+ // - **bold** (not a list)
960
+ // - --- (horizontal rule, not a list)
956
961
  if spacing.is_empty() {
957
- // No space after marker - check if it's likely emphasis or just text
958
- if marker == "*" && content.ends_with('*') && !content[..content.len() - 1].contains('*') {
959
- // Likely emphasis like *text*
960
- None
961
- } else if marker == "*" && content.starts_with('*') {
962
- // Likely bold emphasis like **text** or horizontal rule like ***
963
- None
964
- } else if (marker == "*" || marker == "-")
965
- && content.chars().all(|c| c == marker.chars().next().unwrap())
966
- && content.len() >= 2
967
- {
968
- // Likely horizontal rule like *** or ---
969
- None
970
- } else if !content.is_empty() && content.chars().next().unwrap().is_alphabetic() {
971
- // Single word starting with marker, likely not intended as list
972
- // This matches markdownlint behavior
973
- None
974
- } else {
975
- // Other cases with no space - treat as malformed list item
976
- Some(ListItemInfo {
977
- marker: marker.to_string(),
978
- is_ordered: false,
979
- number: None,
980
- marker_column,
981
- content_column,
982
- })
983
- }
962
+ None
984
963
  } else {
985
964
  Some(ListItemInfo {
986
965
  marker: marker.to_string(),
@@ -995,15 +974,14 @@ impl<'a> LintContext<'a> {
995
974
  let number_str = caps.get(2).map_or("", |m| m.as_str());
996
975
  let delimiter = caps.get(3).map_or("", |m| m.as_str());
997
976
  let spacing = caps.get(4).map_or("", |m| m.as_str());
998
- let content = caps.get(5).map_or("", |m| m.as_str());
977
+ let _content = caps.get(5).map_or("", |m| m.as_str());
999
978
  let marker = format!("{number_str}{delimiter}");
1000
979
  let marker_column = blockquote_prefix_len + leading_spaces.len();
1001
980
  let content_column = marker_column + marker.len() + spacing.len();
1002
981
 
1003
- // Check if this is likely not a list item
1004
- if spacing.is_empty() && !content.is_empty() && content.chars().next().unwrap().is_alphabetic() {
1005
- // No space after marker and starts with alphabetic, likely not intended as list
1006
- // This matches markdownlint behavior
982
+ // According to CommonMark spec, ordered list items MUST have at least one space
983
+ // after the marker (period or parenthesis). Without a space, it's not a list item.
984
+ if spacing.is_empty() {
1007
985
  None
1008
986
  } else {
1009
987
  Some(ListItemInfo {
@@ -1343,6 +1321,9 @@ impl<'a> LintContext<'a> {
1343
1321
 
1344
1322
  if let Some(ref mut block) = current_block {
1345
1323
  // Check if this continues the current block
1324
+ // For nested lists, we need to check if this is a nested item (higher nesting level)
1325
+ // or a continuation at the same or lower level
1326
+ let is_nested = nesting > block.nesting_level;
1346
1327
  let same_type =
1347
1328
  (block.is_ordered && list_item.is_ordered) || (!block.is_ordered && !list_item.is_ordered);
1348
1329
  let same_context = block.blockquote_prefix == blockquote_prefix;
@@ -1392,7 +1373,18 @@ impl<'a> LintContext<'a> {
1392
1373
  found_non_list
1393
1374
  };
1394
1375
 
1395
- if same_type && same_context && reasonable_distance && marker_compatible && !has_non_list_content {
1376
+ // A list continues if:
1377
+ // 1. It's a nested item (indented more than the parent), OR
1378
+ // 2. It's the same type at the same level with reasonable distance
1379
+ let continues_list = if is_nested {
1380
+ // Nested items always continue the list if they're in the same context
1381
+ same_context && reasonable_distance && !has_non_list_content
1382
+ } else {
1383
+ // Same-level items need to match type and markers
1384
+ same_type && same_context && reasonable_distance && marker_compatible && !has_non_list_content
1385
+ };
1386
+
1387
+ if continues_list {
1396
1388
  // Extend current block
1397
1389
  block.end_line = line_num;
1398
1390
  block.item_lines.push(line_num);
@@ -118,16 +118,12 @@ impl Rule for MD004UnorderedListStyle {
118
118
 
119
119
  // Use centralized list blocks for better performance and accuracy
120
120
  for list_block in &ctx.list_blocks {
121
- // Skip ordered lists
122
- if list_block.is_ordered {
123
- continue;
124
- }
125
-
126
121
  // Check each list item in this block
122
+ // We need to check individual items even in mixed lists (ordered with nested unordered)
127
123
  for &item_line in &list_block.item_lines {
128
124
  if let Some(line_info) = ctx.line_info(item_line) {
129
125
  if let Some(list_item) = &line_info.list_item {
130
- // Skip ordered lists (safety check)
126
+ // Skip ordered list items - we only care about unordered ones
131
127
  if list_item.is_ordered {
132
128
  continue;
133
129
  }
@@ -245,16 +241,12 @@ impl Rule for MD004UnorderedListStyle {
245
241
 
246
242
  // Use centralized list blocks
247
243
  for list_block in &ctx.list_blocks {
248
- // Skip ordered lists
249
- if list_block.is_ordered {
250
- continue;
251
- }
252
-
253
244
  // Process each list item in this block
245
+ // We need to check individual items even in mixed lists
254
246
  for &item_line in &list_block.item_lines {
255
247
  if let Some(line_info) = ctx.line_info(item_line) {
256
248
  if let Some(list_item) = &line_info.list_item {
257
- // Skip ordered lists (safety check)
249
+ // Skip ordered list items - we only care about unordered ones
258
250
  if list_item.is_ordered {
259
251
  continue;
260
252
  }
@@ -615,12 +607,13 @@ mod tests {
615
607
  #[test]
616
608
  fn test_edge_case_marker_at_end() {
617
609
  let rule = MD004UnorderedListStyle::new(UnorderedListStyle::Asterisk);
618
- let content = "*\n-\n+";
610
+ // These are valid list items with minimal content (just a space)
611
+ let content = "* \n- \n+ ";
619
612
  let ctx = LintContext::new(content);
620
613
  let result = rule.check(&ctx).unwrap();
621
- assert_eq!(result.len(), 2);
614
+ assert_eq!(result.len(), 2); // Should flag - and + as wrong markers
622
615
  let fixed = rule.fix(&ctx).unwrap();
623
- assert_eq!(fixed, "*\n*\n*");
616
+ assert_eq!(fixed, "* \n* \n* ");
624
617
  }
625
618
 
626
619
  #[test]
@@ -16,21 +16,28 @@ use crate::utils::regex_cache::UNORDERED_LIST_MARKER_REGEX;
16
16
  pub struct MD006StartBullets;
17
17
 
18
18
  impl MD006StartBullets {
19
- /// Check if a bullet is nested under an ordered list item
19
+ /// Check if a bullet is nested under an ordered list item (anywhere in the hierarchy)
20
20
  fn is_nested_under_ordered_item(
21
21
  &self,
22
22
  ctx: &crate::lint_context::LintContext,
23
23
  current_line: usize,
24
24
  current_indent: usize,
25
25
  ) -> bool {
26
- // Look backward from current line to find parent item
26
+ // Look backward from current line to find any ordered ancestor
27
+ let mut check_indent = current_indent;
28
+
27
29
  for line_idx in (1..current_line).rev() {
28
30
  if let Some(line_info) = ctx.line_info(line_idx) {
29
31
  if let Some(list_item) = &line_info.list_item {
30
- // Found a list item - check if it's at a lower indentation (parent level)
31
- if list_item.marker_column < current_indent {
32
- // This is a parent item - check if it's ordered
33
- return list_item.is_ordered;
32
+ // Found a list item - check if it's at a lower indentation (ancestor level)
33
+ if list_item.marker_column < check_indent {
34
+ // This is an ancestor item
35
+ if list_item.is_ordered {
36
+ // Found an ordered ancestor
37
+ return true;
38
+ }
39
+ // Continue looking for higher-level ancestors
40
+ check_indent = list_item.marker_column;
34
41
  }
35
42
  }
36
43
  // If we encounter non-blank, non-list content at column 0, stop looking
@@ -52,17 +59,17 @@ impl MD006StartBullets {
52
59
  // Track which lines contain valid bullet items
53
60
  let mut valid_bullet_lines = vec![false; lines.len()];
54
61
 
55
- // Process each unordered list block
62
+ // Process each list block
56
63
  for list_block in &ctx.list_blocks {
57
- // Skip ordered lists
58
- if list_block.is_ordered {
59
- continue;
60
- }
61
-
62
64
  // Check each list item in this block
65
+ // We need to check unordered items even in mixed lists
63
66
  for &item_line in &list_block.item_lines {
64
67
  if let Some(line_info) = ctx.line_info(item_line) {
65
68
  if let Some(list_item) = &line_info.list_item {
69
+ // Skip ordered list items - we only care about unordered ones
70
+ if list_item.is_ordered {
71
+ continue;
72
+ }
66
73
  let line_idx = item_line - 1;
67
74
  let indent = list_item.marker_column;
68
75
  let line = &lines[line_idx];
@@ -73,9 +80,16 @@ impl MD006StartBullets {
73
80
  // Top-level items are always valid
74
81
  is_valid = true;
75
82
  } else {
76
- // Check if this is nested under an ordered item with correct indentation (3 spaces)
77
- if indent == 3 && self.is_nested_under_ordered_item(ctx, item_line, indent) {
78
- is_valid = true;
83
+ // Check if this is nested under an ordered item with correct indentation
84
+ // For single-digit ordered lists (1.), need at least 3 spaces for proper nesting
85
+ // For double-digit (10.), need at least 4 spaces, etc.
86
+ // But MD006's purpose is to flag top-level indented lists, not validate nesting depth
87
+ if self.is_nested_under_ordered_item(ctx, item_line, indent) {
88
+ // It's nested under an ordered item
89
+ // Only flag if indentation is less than 3 (won't nest properly in CommonMark)
90
+ if indent >= 3 {
91
+ is_valid = true;
92
+ }
79
93
  } else {
80
94
  // Check if this is a valid nested item under another bullet
81
95
  match Self::find_relevant_previous_bullet(&lines, line_idx) {
@@ -120,14 +134,28 @@ impl MD006StartBullets {
120
134
  end_col - start_col,
121
135
  );
122
136
 
137
+ // Generate appropriate message based on context
138
+ let message = if self.is_nested_under_ordered_item(ctx, item_line, indent) {
139
+ // It's trying to nest under an ordered item but has insufficient indentation
140
+ format!(
141
+ "Nested list needs at least 3 spaces of indentation under ordered item (found {indent})"
142
+ )
143
+ } else if indent > 0 {
144
+ // It's indented but not nested under anything - should start at column 0
145
+ format!(
146
+ "Consider starting bulleted lists at the beginning of the line (found {indent} leading spaces)"
147
+ )
148
+ } else {
149
+ // Shouldn't happen, but just in case
150
+ format!("List indentation issue (found {indent} leading spaces)")
151
+ };
152
+
123
153
  result.push(LintWarning {
124
154
  line: item_line,
125
155
  column: start_col,
126
156
  end_line: item_line,
127
157
  end_column: end_col,
128
- message: format!(
129
- "Consider starting bulleted lists at the beginning of the line (found {indent} leading spaces)"
130
- ),
158
+ message,
131
159
  severity: Severity::Warning,
132
160
  rule_name: Some(self.name()),
133
161
  fix: Some(Fix {
@@ -501,14 +529,14 @@ mod tests {
501
529
  let content = "\
502
530
  1. **Active Directory/LDAP**
503
531
  - Wrong: only 2 spaces
504
- - Also wrong: 4 spaces";
532
+ - Wrong: only 1 space";
505
533
  let ctx = crate::lint_context::LintContext::new(content);
506
534
  let result = rule.check(&ctx).unwrap();
507
- // Should flag the incorrect indentations
535
+ // Should flag the incorrect indentations (less than 3 spaces)
508
536
  assert_eq!(
509
537
  result.len(),
510
538
  2,
511
- "Expected warnings for bullets with incorrect spacing under numbered items"
539
+ "Expected warnings for bullets with insufficient spacing under numbered items"
512
540
  );
513
541
  assert!(result.iter().any(|w| w.line == 2));
514
542
  assert!(result.iter().any(|w| w.line == 3));
@@ -640,4 +640,19 @@ result = inspect.stack()[1]
640
640
  assert_eq!(result.len(), 1, "Should only flag the actual reversed link");
641
641
  assert_eq!(result[0].line, 4, "Should flag the reversed link on line 4");
642
642
  }
643
+
644
+ #[test]
645
+ fn test_issue_26_specific_case() {
646
+ // Test for issue #26 - specific case reported
647
+ let rule = MD011NoReversedLinks;
648
+
649
+ let content = r#"The first thing I need to find is the name of the redacted key name, `doc.<key_name_omitted>`. I'll use `SUBSTRING(ATTRIBUTES(doc)[0], 0, 1) == '<c>'` as that test, where `<c>` is different characters. This gets the first attribute from `doc` and uses `SUBSTRING` to get the first character."#;
650
+ let ctx = LintContext::new(content);
651
+ let result = rule.check(&ctx).unwrap();
652
+ assert_eq!(
653
+ result.len(),
654
+ 0,
655
+ "Should not flag ATTRIBUTES(doc)[0] inside inline code (issue #26)"
656
+ );
657
+ }
643
658
  }