rumdl 0.0.90__tar.gz → 0.0.91__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 (340) hide show
  1. {rumdl-0.0.90 → rumdl-0.0.91}/.mise.toml +5 -5
  2. {rumdl-0.0.90 → rumdl-0.0.91}/CHANGELOG.md +4 -1
  3. {rumdl-0.0.90 → rumdl-0.0.91}/Cargo.lock +1 -1
  4. {rumdl-0.0.90 → rumdl-0.0.91}/Cargo.toml +2 -2
  5. {rumdl-0.0.90 → rumdl-0.0.91}/Makefile +62 -1
  6. {rumdl-0.0.90 → rumdl-0.0.91}/PKG-INFO +1 -1
  7. {rumdl-0.0.90 → rumdl-0.0.91}/benches/fix_performance.rs +35 -37
  8. {rumdl-0.0.90 → rumdl-0.0.91}/benches/range_performance.rs +9 -9
  9. {rumdl-0.0.90 → rumdl-0.0.91}/benches/range_utils_benchmark.rs +3 -3
  10. {rumdl-0.0.90 → rumdl-0.0.91}/benches/rule_performance.rs +11 -12
  11. {rumdl-0.0.90 → rumdl-0.0.91}/benches/simple_fix_bench.rs +6 -6
  12. {rumdl-0.0.90 → rumdl-0.0.91}/rust-toolchain.toml +1 -1
  13. {rumdl-0.0.90 → rumdl-0.0.91}/src/bin/benchmark.rs +4 -4
  14. {rumdl-0.0.90 → rumdl-0.0.91}/src/bin/file_parallel_benchmark.rs +9 -10
  15. {rumdl-0.0.90 → rumdl-0.0.91}/src/bin/measure_code_span_performance.rs +13 -13
  16. {rumdl-0.0.90 → rumdl-0.0.91}/src/config.rs +100 -109
  17. {rumdl-0.0.90 → rumdl-0.0.91}/src/init.rs +37 -35
  18. {rumdl-0.0.90 → rumdl-0.0.91}/src/lib.rs +61 -71
  19. {rumdl-0.0.90 → rumdl-0.0.91}/src/lint_context.rs +25 -18
  20. {rumdl-0.0.90 → rumdl-0.0.91}/src/lsp/mod.rs +47 -48
  21. {rumdl-0.0.90 → rumdl-0.0.91}/src/lsp/server.rs +58 -58
  22. {rumdl-0.0.90 → rumdl-0.0.91}/src/lsp/types.rs +14 -20
  23. {rumdl-0.0.90 → rumdl-0.0.91}/src/main.rs +101 -105
  24. {rumdl-0.0.90 → rumdl-0.0.91}/src/markdownlint_config.rs +141 -106
  25. {rumdl-0.0.90 → rumdl-0.0.91}/src/output/formatters/azure.rs +18 -18
  26. {rumdl-0.0.90 → rumdl-0.0.91}/src/output/formatters/concise.rs +19 -28
  27. {rumdl-0.0.90 → rumdl-0.0.91}/src/output/formatters/github.rs +16 -16
  28. {rumdl-0.0.90 → rumdl-0.0.91}/src/output/formatters/gitlab.rs +52 -43
  29. {rumdl-0.0.90 → rumdl-0.0.91}/src/output/formatters/grouped.rs +19 -18
  30. {rumdl-0.0.90 → rumdl-0.0.91}/src/output/formatters/json.rs +44 -41
  31. {rumdl-0.0.90 → rumdl-0.0.91}/src/output/formatters/json_lines.rs +36 -30
  32. {rumdl-0.0.90 → rumdl-0.0.91}/src/output/formatters/junit.rs +41 -40
  33. {rumdl-0.0.90 → rumdl-0.0.91}/src/output/formatters/pylint.rs +25 -41
  34. {rumdl-0.0.90 → rumdl-0.0.91}/src/output/formatters/sarif.rs +89 -64
  35. {rumdl-0.0.90 → rumdl-0.0.91}/src/output/formatters/text.rs +7 -12
  36. {rumdl-0.0.90 → rumdl-0.0.91}/src/output/mod.rs +36 -31
  37. {rumdl-0.0.90 → rumdl-0.0.91}/src/parallel.rs +42 -30
  38. {rumdl-0.0.90 → rumdl-0.0.91}/src/performance.rs +28 -32
  39. {rumdl-0.0.90 → rumdl-0.0.91}/src/profiling.rs +36 -33
  40. {rumdl-0.0.90 → rumdl-0.0.91}/src/python.rs +26 -18
  41. {rumdl-0.0.90 → rumdl-0.0.91}/src/rule.rs +63 -61
  42. {rumdl-0.0.90 → rumdl-0.0.91}/src/rule_config.rs +13 -13
  43. {rumdl-0.0.90 → rumdl-0.0.91}/src/rule_config_serde.rs +55 -43
  44. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/blockquote_utils.rs +93 -48
  45. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/code_block_utils.rs +45 -30
  46. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/code_fence_utils.rs +21 -22
  47. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/front_matter_utils.rs +123 -68
  48. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/heading_utils.rs +67 -46
  49. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/list_utils.rs +52 -47
  50. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md001_heading_increment.rs +2 -2
  51. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md002_first_heading_h1.rs +51 -31
  52. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md003_heading_style/md003_config.rs +1 -1
  53. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md003_heading_style.rs +3 -6
  54. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md004_unordered_list_style.rs +26 -10
  55. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md005_list_indent.rs +17 -16
  56. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md006_start_bullets.rs +4 -7
  57. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md007_ul_indent.rs +39 -42
  58. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md009_trailing_spaces.rs +23 -17
  59. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md010_no_hard_tabs.rs +13 -14
  60. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md011_no_reversed_links.rs +4 -4
  61. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md012_no_multiple_blanks.rs +8 -7
  62. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md013_line_length.rs +11 -11
  63. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md014_commands_show_output.rs +27 -19
  64. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md019_no_multiple_space_atx.rs +1 -1
  65. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md020_no_missing_space_closed_atx.rs +4 -6
  66. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md021_no_multiple_space_closed_atx.rs +1 -1
  67. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md022_blanks_around_headings.rs +1 -1
  68. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md023_heading_start_left.rs +3 -3
  69. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md024_no_duplicate_heading.rs +11 -9
  70. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md025_single_title.rs +14 -10
  71. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md026_no_trailing_punctuation.rs +16 -8
  72. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md027_multiple_spaces_blockquote.rs +9 -9
  73. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md028_no_blanks_blockquote.rs +5 -5
  74. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md029_ordered_list_prefix.rs +1 -2
  75. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md030_list_marker_space.rs +3 -4
  76. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md031_blanks_around_fences.rs +2 -2
  77. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md032_blanks_around_lists.rs +15 -23
  78. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md034_no_bare_urls.rs +17 -20
  79. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md035_hr_style.rs +27 -27
  80. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md036_no_emphasis_only_first.rs +44 -28
  81. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md037_spaces_around_emphasis.rs +4 -6
  82. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md038_no_space_in_code.rs +4 -4
  83. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md039_no_space_in_links.rs +16 -21
  84. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md040_fenced_code_language.rs +27 -15
  85. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md041_first_line_heading.rs +68 -40
  86. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md042_no_empty_links.rs +22 -10
  87. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md043_required_headings.rs +1 -1
  88. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md044_proper_names.rs +84 -95
  89. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md045_no_alt_text.rs +31 -25
  90. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md046_code_block_style/md046_config.rs +1 -1
  91. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md046_code_block_style.rs +26 -26
  92. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md047_single_trailing_newline.rs +0 -1
  93. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md048_code_fence_style/md048_config.rs +1 -1
  94. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md048_code_fence_style.rs +21 -21
  95. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md049_emphasis_style.rs +30 -31
  96. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md050_strong_style/md050_config.rs +1 -1
  97. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md050_strong_style.rs +44 -30
  98. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md051_link_fragments.rs +61 -45
  99. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md052_reference_links_images.rs +38 -38
  100. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md053_link_image_reference_definitions.rs +26 -32
  101. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md054_link_image_style.rs +25 -26
  102. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md055_table_pipe_style/md055_config.rs +1 -1
  103. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md055_table_pipe_style.rs +3 -7
  104. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md056_table_column_count.rs +25 -25
  105. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md057_existing_relative_links.rs +1 -3
  106. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md058_blanks_around_tables.rs +21 -21
  107. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/strong_style.rs +2 -2
  108. {rumdl-0.0.90 → rumdl-0.0.91}/src/utils/ast_utils.rs +55 -59
  109. {rumdl-0.0.90 → rumdl-0.0.91}/src/utils/code_block_utils.rs +15 -14
  110. {rumdl-0.0.90 → rumdl-0.0.91}/src/utils/document_structure.rs +16 -12
  111. {rumdl-0.0.90 → rumdl-0.0.91}/src/utils/early_returns.rs +52 -52
  112. {rumdl-0.0.90 → rumdl-0.0.91}/src/utils/element_cache.rs +0 -8
  113. {rumdl-0.0.90 → rumdl-0.0.91}/src/utils/emphasis_utils.rs +1 -1
  114. {rumdl-0.0.90 → rumdl-0.0.91}/src/utils/fix_utils.rs +15 -16
  115. {rumdl-0.0.90 → rumdl-0.0.91}/src/utils/mod.rs +1 -5
  116. {rumdl-0.0.90 → rumdl-0.0.91}/src/utils/regex_cache.rs +33 -37
  117. {rumdl-0.0.90 → rumdl-0.0.91}/src/utils/table_utils.rs +48 -48
  118. {rumdl-0.0.90 → rumdl-0.0.91}/src/vscode.rs +33 -32
  119. {rumdl-0.0.90 → rumdl-0.0.91}/tests/advanced_integration_tests.rs +4 -6
  120. {rumdl-0.0.90 → rumdl-0.0.91}/tests/character_ranges/additional_tests.rs +1 -1
  121. {rumdl-0.0.90 → rumdl-0.0.91}/tests/character_ranges/basic_tests.rs +1 -1
  122. {rumdl-0.0.90 → rumdl-0.0.91}/tests/character_ranges/comprehensive_tests.rs +1 -1
  123. {rumdl-0.0.90 → rumdl-0.0.91}/tests/character_ranges/extended_tests.rs +1 -1
  124. {rumdl-0.0.90 → rumdl-0.0.91}/tests/cli_integration_tests.rs +30 -39
  125. {rumdl-0.0.90 → rumdl-0.0.91}/tests/cli_lsp_fix_consistency.rs +46 -54
  126. {rumdl-0.0.90 → rumdl-0.0.91}/tests/cli_statistics_test.rs +8 -17
  127. {rumdl-0.0.90 → rumdl-0.0.91}/tests/commonmark_compliance_tests.rs +5 -8
  128. {rumdl-0.0.90 → rumdl-0.0.91}/tests/comprehensive_integration_tests.rs +11 -11
  129. {rumdl-0.0.90 → rumdl-0.0.91}/tests/config_application_tests.rs +1 -1
  130. {rumdl-0.0.90 → rumdl-0.0.91}/tests/config_tests.rs +16 -30
  131. {rumdl-0.0.90 → rumdl-0.0.91}/tests/configuration_inheritance_tests.rs +4 -4
  132. {rumdl-0.0.90 → rumdl-0.0.91}/tests/cross_platform_compatibility_tests.rs +22 -25
  133. {rumdl-0.0.90 → rumdl-0.0.91}/tests/final_confidence_assessment.rs +5 -8
  134. {rumdl-0.0.90 → rumdl-0.0.91}/tests/init_tests.rs +1 -1
  135. {rumdl-0.0.90 → rumdl-0.0.91}/tests/lsp_editor_integration_tests.rs +2 -2
  136. {rumdl-0.0.90 → rumdl-0.0.91}/tests/lsp_integration_tests.rs +6 -10
  137. {rumdl-0.0.90 → rumdl-0.0.91}/tests/lsp_memory_leak_tests.rs +28 -32
  138. {rumdl-0.0.90 → rumdl-0.0.91}/tests/lsp_tests.rs +1 -1
  139. {rumdl-0.0.90 → rumdl-0.0.91}/tests/malformed_markdown_stress_tests.rs +2 -7
  140. {rumdl-0.0.90 → rumdl-0.0.91}/tests/markdownlint_cli_integration.rs +6 -9
  141. {rumdl-0.0.90 → rumdl-0.0.91}/tests/markdownlint_config_test.rs +3 -5
  142. {rumdl-0.0.90 → rumdl-0.0.91}/tests/output_format_tests.rs +29 -38
  143. {rumdl-0.0.90 → rumdl-0.0.91}/tests/perf_check.rs +5 -5
  144. {rumdl-0.0.90 → rumdl-0.0.91}/tests/performance_validation_tests.rs +5 -8
  145. {rumdl-0.0.90 → rumdl-0.0.91}/tests/pyproject_config_tests.rs +9 -12
  146. {rumdl-0.0.90 → rumdl-0.0.91}/tests/real_world_repository_tests.rs +4 -4
  147. {rumdl-0.0.90 → rumdl-0.0.91}/tests/regression_prevention_tests.rs +8 -6
  148. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md002_test.rs +73 -58
  149. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md004_test.rs +27 -18
  150. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md006_test.rs +2 -4
  151. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md007_test.rs +50 -53
  152. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md009_test.rs +2 -1
  153. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md010_test.rs +60 -36
  154. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md012_test.rs +9 -9
  155. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md013_test.rs +43 -25
  156. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md014_test.rs +33 -13
  157. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md022_test.rs +2 -2
  158. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md023_extended_test.rs +1 -1
  159. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md024_test.rs +2 -2
  160. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md025_test.rs +1 -1
  161. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md026_test.rs +75 -44
  162. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md029_test.rs +1 -1
  163. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md030_test.rs +5 -5
  164. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md032_test.rs +6 -8
  165. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md034_test.rs +26 -32
  166. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md037_test.rs +6 -7
  167. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md041_test.rs +2 -2
  168. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md044_test.rs +3 -3
  169. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md045_test.rs +8 -2
  170. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md046_test.rs +6 -4
  171. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md051_test.rs +23 -12
  172. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md052_test.rs +1 -1
  173. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md053_additional_test.rs +10 -12
  174. {rumdl-0.0.90 → rumdl-0.0.91}/tests/thread_safety_tests.rs +8 -10
  175. {rumdl-0.0.90 → rumdl-0.0.91}/tests/unicode_edge_case_tests.rs +2 -6
  176. {rumdl-0.0.90 → rumdl-0.0.91}/tests/utils/code_block_utils_extended_test.rs +5 -5
  177. {rumdl-0.0.90 → rumdl-0.0.91}/tests/utils/code_block_utils_test.rs +3 -3
  178. {rumdl-0.0.90 → rumdl-0.0.91}/tests/utils/line_index_test.rs +2 -2
  179. {rumdl-0.0.90 → rumdl-0.0.91}/tests/utils_markdown_edge_cases.rs +13 -14
  180. {rumdl-0.0.90 → rumdl-0.0.91}/tests/utils_tests.rs +1 -1
  181. {rumdl-0.0.90 → rumdl-0.0.91}/tests/vscode_extension_fixes.rs +22 -46
  182. {rumdl-0.0.90 → rumdl-0.0.91}/tests/vscode_test.rs +2 -2
  183. {rumdl-0.0.90 → rumdl-0.0.91}/.config/nextest.toml +0 -0
  184. {rumdl-0.0.90 → rumdl-0.0.91}/.rumdl.toml +0 -0
  185. {rumdl-0.0.90 → rumdl-0.0.91}/.rustfmt.toml +0 -0
  186. {rumdl-0.0.90 → rumdl-0.0.91}/LICENSE +0 -0
  187. {rumdl-0.0.90 → rumdl-0.0.91}/MANIFEST.in +0 -0
  188. {rumdl-0.0.90 → rumdl-0.0.91}/README.md +0 -0
  189. {rumdl-0.0.90 → rumdl-0.0.91}/assets/logo.png +0 -0
  190. {rumdl-0.0.90 → rumdl-0.0.91}/docs/RULES.md +0 -0
  191. {rumdl-0.0.90 → rumdl-0.0.91}/docs/global-settings.md +0 -0
  192. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md001.md +0 -0
  193. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md002.md +0 -0
  194. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md003.md +0 -0
  195. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md004.md +0 -0
  196. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md005.md +0 -0
  197. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md006.md +0 -0
  198. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md007.md +0 -0
  199. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md009.md +0 -0
  200. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md010.md +0 -0
  201. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md011.md +0 -0
  202. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md012.md +0 -0
  203. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md013.md +0 -0
  204. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md014.md +0 -0
  205. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md018.md +0 -0
  206. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md019.md +0 -0
  207. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md020.md +0 -0
  208. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md021.md +0 -0
  209. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md022.md +0 -0
  210. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md023.md +0 -0
  211. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md024.md +0 -0
  212. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md025.md +0 -0
  213. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md026.md +0 -0
  214. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md027.md +0 -0
  215. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md028.md +0 -0
  216. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md029.md +0 -0
  217. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md030.md +0 -0
  218. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md031.md +0 -0
  219. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md032.md +0 -0
  220. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md033.md +0 -0
  221. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md034.md +0 -0
  222. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md035.md +0 -0
  223. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md036.md +0 -0
  224. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md037.md +0 -0
  225. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md038.md +0 -0
  226. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md039.md +0 -0
  227. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md040.md +0 -0
  228. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md041.md +0 -0
  229. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md042.md +0 -0
  230. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md043.md +0 -0
  231. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md044.md +0 -0
  232. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md045.md +0 -0
  233. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md046.md +0 -0
  234. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md047.md +0 -0
  235. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md048.md +0 -0
  236. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md049.md +0 -0
  237. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md050.md +0 -0
  238. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md051.md +0 -0
  239. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md052.md +0 -0
  240. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md053.md +0 -0
  241. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md054.md +0 -0
  242. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md055.md +0 -0
  243. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md056.md +0 -0
  244. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md057.md +0 -0
  245. {rumdl-0.0.90 → rumdl-0.0.91}/docs/md058.md +0 -0
  246. {rumdl-0.0.90 → rumdl-0.0.91}/docs/vscode-extension.md +0 -0
  247. {rumdl-0.0.90 → rumdl-0.0.91}/issues/plan-rule-parity-with-markdownlint.md +0 -0
  248. {rumdl-0.0.90 → rumdl-0.0.91}/parity_check.py +0 -0
  249. {rumdl-0.0.90 → rumdl-0.0.91}/pyproject.toml +0 -0
  250. {rumdl-0.0.90 → rumdl-0.0.91}/python/MANIFEST.in +0 -0
  251. {rumdl-0.0.90 → rumdl-0.0.91}/python/PYTHON-README.md +0 -0
  252. {rumdl-0.0.90 → rumdl-0.0.91}/python/rumdl/__init__.py +0 -0
  253. {rumdl-0.0.90 → rumdl-0.0.91}/python/rumdl/__main__.py +0 -0
  254. {rumdl-0.0.90 → rumdl-0.0.91}/python/rumdl/py.typed +0 -0
  255. {rumdl-0.0.90 → rumdl-0.0.91}/rumdl.toml.example +0 -0
  256. {rumdl-0.0.90 → rumdl-0.0.91}/scripts/extract-changelog.sh +0 -0
  257. {rumdl-0.0.90 → rumdl-0.0.91}/scripts/prepare-release.sh +0 -0
  258. {rumdl-0.0.90 → rumdl-0.0.91}/src/inline_config.rs +0 -0
  259. {rumdl-0.0.90 → rumdl-0.0.91}/src/output/formatters/mod.rs +0 -0
  260. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/emphasis_style.rs +0 -0
  261. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md002_first_heading_h1/md002_config.rs +0 -0
  262. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md004_unordered_list_style/md004_config.rs +0 -0
  263. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md007_ul_indent/md007_config.rs +0 -0
  264. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md009_trailing_spaces/md009_config.rs +0 -0
  265. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md010_no_hard_tabs/md010_config.rs +0 -0
  266. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md012_no_multiple_blanks/md012_config.rs +0 -0
  267. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md013_line_length/md013_config.rs +0 -0
  268. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md014_commands_show_output/md014_config.rs +0 -0
  269. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md018_no_missing_space_atx.rs +0 -0
  270. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md022_blanks_around_headings/md022_config.rs +0 -0
  271. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md024_no_duplicate_heading/md024_config.rs +0 -0
  272. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md025_single_title/md025_config.rs +0 -0
  273. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md026_no_trailing_punctuation/md026_config.rs +0 -0
  274. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md030_list_marker_space/md030_config.rs +0 -0
  275. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md033_no_inline_html/md033_config.rs +0 -0
  276. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md033_no_inline_html.rs +0 -0
  277. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md035_hr_style/md035_config.rs +0 -0
  278. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md036_no_emphasis_only_first/md036_config.rs +0 -0
  279. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md044_proper_names/md044_config.rs +0 -0
  280. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md049_emphasis_style/md049_config.rs +0 -0
  281. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md054_link_image_style/md054_config.rs +0 -0
  282. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/md057_existing_relative_links/md057_config.rs +0 -0
  283. {rumdl-0.0.90 → rumdl-0.0.91}/src/rules/mod.rs +0 -0
  284. {rumdl-0.0.90 → rumdl-0.0.91}/src/utils/markdown_elements.rs +0 -0
  285. {rumdl-0.0.90 → rumdl-0.0.91}/src/utils/range_utils.rs +0 -0
  286. {rumdl-0.0.90 → rumdl-0.0.91}/src/utils/string_interner.rs +0 -0
  287. {rumdl-0.0.90 → rumdl-0.0.91}/tests/character_ranges/mod.rs +0 -0
  288. {rumdl-0.0.90 → rumdl-0.0.91}/tests/character_ranges/unicode_utils.rs +0 -0
  289. {rumdl-0.0.90 → rumdl-0.0.91}/tests/cli_duplication_test.rs +0 -0
  290. {rumdl-0.0.90 → rumdl-0.0.91}/tests/comprehensive_output_format_tests.rs +0 -0
  291. {rumdl-0.0.90 → rumdl-0.0.91}/tests/config_file_command_test.rs +0 -0
  292. {rumdl-0.0.90 → rumdl-0.0.91}/tests/consistency_regression_tests.rs +0 -0
  293. {rumdl-0.0.90 → rumdl-0.0.91}/tests/init_command_test.rs +0 -0
  294. {rumdl-0.0.90 → rumdl-0.0.91}/tests/inline_config_test.rs +0 -0
  295. {rumdl-0.0.90 → rumdl-0.0.91}/tests/integration_tests.rs +0 -0
  296. {rumdl-0.0.90 → rumdl-0.0.91}/tests/json_output_test.rs +0 -0
  297. {rumdl-0.0.90 → rumdl-0.0.91}/tests/lib.rs +0 -0
  298. {rumdl-0.0.90 → rumdl-0.0.91}/tests/markdownlintignore_test.rs +0 -0
  299. {rumdl-0.0.90 → rumdl-0.0.91}/tests/md030_edge_cases.md +0 -0
  300. {rumdl-0.0.90 → rumdl-0.0.91}/tests/output_format_integration_tests.rs +0 -0
  301. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md001_test.rs +0 -0
  302. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md001_unicode_test.rs +0 -0
  303. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md003_test.rs +1 -1
  304. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md005_test.rs +0 -0
  305. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md006_unicode_test.rs +0 -0
  306. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md011_test.rs +0 -0
  307. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md018_test.rs +0 -0
  308. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md019_test.rs +0 -0
  309. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md020_test.rs +0 -0
  310. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md021_test.rs +0 -0
  311. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md023_test.rs +0 -0
  312. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md027_test.rs +0 -0
  313. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md028_test.rs +0 -0
  314. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md031_test.rs +0 -0
  315. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md033_extended_test.rs +0 -0
  316. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md033_test.rs +0 -0
  317. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md035_test.rs +0 -0
  318. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md036_test.rs +0 -0
  319. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md038_test.rs +0 -0
  320. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md039_test.rs +0 -0
  321. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md040_test.rs +0 -0
  322. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md042_test.rs +0 -0
  323. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md043_test.rs +0 -0
  324. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md047_test.rs +0 -0
  325. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md048_test.rs +1 -1
  326. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md049_test.rs +1 -1
  327. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md050_test.rs +1 -1
  328. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md053_proptest.rs +0 -0
  329. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md053_test.rs +0 -0
  330. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md054_test.rs +0 -0
  331. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md054_unicode_test.rs +0 -0
  332. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md055_test.rs +0 -0
  333. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md056_test.rs +0 -0
  334. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md057_test.rs +0 -0
  335. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/md058_test.rs +0 -0
  336. {rumdl-0.0.90 → rumdl-0.0.91}/tests/rules/mod.rs +0 -0
  337. {rumdl-0.0.90 → rumdl-0.0.91}/tests/utils/blockquote_utils_test.rs +0 -0
  338. {rumdl-0.0.90 → rumdl-0.0.91}/tests/utils/core_utils_test.rs +1 -1
  339. {rumdl-0.0.90 → rumdl-0.0.91}/tests/utils/front_matter_utils_test.rs +0 -0
  340. {rumdl-0.0.90 → rumdl-0.0.91}/tests/utils/mod.rs +0 -0
@@ -7,7 +7,7 @@ RUST_BACKTRACE = "1"
7
7
 
8
8
  [tools]
9
9
  # Rust toolchain - version matches rust-toolchain.toml
10
- rust = "1.87.0"
10
+ rust = "1.88.0"
11
11
 
12
12
  # Python for maturin/python bindings
13
13
  python = "3.12"
@@ -24,10 +24,10 @@ uv = "latest"
24
24
  # Zig for cross-compilation (used by maturin)
25
25
  zig = "0.13"
26
26
 
27
- # Optional: Additional useful Rust development tools
28
- # Uncomment to enable
29
- # "cargo:cargo-edit" = "latest" # For cargo add/rm/upgrade commands
30
- # "cargo:cargo-outdated" = "latest" # Check for outdated dependencies
27
+ # Additional Rust development tools for dependency management
28
+ "cargo:cargo-edit" = "latest" # For cargo add/rm/upgrade commands
29
+ "cargo:cargo-outdated" = "latest" # Check for outdated dependencies
30
+ # Optional: Security and dependency tools
31
31
  # "cargo:cargo-audit" = "latest" # Security audit dependencies
32
32
  # "cargo:cargo-deny" = "latest" # Lint dependencies
33
33
 
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.0.91] - 2025-07-02
11
+
10
12
  ## [0.0.90] - 2025-07-01
11
13
 
12
14
  ## [0.0.89] - 2025-07-01
@@ -109,7 +111,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
109
111
  ### Added
110
112
  - Initial implementation of remaining rules for markdownlint parity
111
113
 
112
- [Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.90...HEAD
114
+ [Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.91...HEAD
115
+ [0.0.91]: https://github.com/rvben/rumdl/compare/v0.0.90...v0.0.91
113
116
  [0.0.90]: https://github.com/rvben/rumdl/compare/v0.0.89...v0.0.90
114
117
  [0.0.89]: https://github.com/rvben/rumdl/compare/v0.0.88...v0.0.89
115
118
  [0.0.88]: https://github.com/rvben/rumdl/compare/v0.0.87...v0.0.88
@@ -1454,7 +1454,7 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
1454
1454
 
1455
1455
  [[package]]
1456
1456
  name = "rumdl"
1457
- version = "0.0.90"
1457
+ version = "0.0.91"
1458
1458
  dependencies = [
1459
1459
  "anyhow",
1460
1460
  "assert_cmd",
@@ -1,8 +1,8 @@
1
1
  [package]
2
2
  name = "rumdl"
3
- version = "0.0.90"
3
+ version = "0.0.91"
4
4
  edition = "2024"
5
- rust-version = "1.87.0"
5
+ rust-version = "1.88.0"
6
6
  description = "A fast Markdown linter written in Rust (Ru(st) MarkDown Linter)"
7
7
  authors = ["Ruben J. Jongejan <ruben.jongejan@gmail.com>"]
8
8
  license = "MIT"
@@ -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
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
2
2
 
3
3
  # Development environment setup
4
4
  setup-mise:
@@ -248,3 +248,64 @@ trigger-pre-commit:
248
248
  -H "Authorization: Bearer $(PRECOMMIT_DISPATCH_TOKEN)" \
249
249
  https://api.github.com/repos/rvben/rumdl-pre-commit/dispatches \
250
250
  -d '{"event_type": "pypi_release"}'
251
+
252
+ # Dependency and version update targets
253
+ update-dependencies:
254
+ @echo "Updating Cargo dependencies to latest compatible versions..."
255
+ @cargo update
256
+ @echo "Dependencies updated in Cargo.lock"
257
+ @echo ""
258
+ @if command -v cargo-outdated >/dev/null 2>&1; then \
259
+ echo "Checking for available updates beyond current constraints:"; \
260
+ cargo outdated; \
261
+ else \
262
+ echo "Install cargo-outdated for more detailed update information:"; \
263
+ echo " cargo install cargo-outdated"; \
264
+ fi
265
+
266
+ update-rust-version:
267
+ @echo "Checking for latest stable Rust version..."
268
+ $(eval LATEST_RUST := $(shell curl -s https://api.github.com/repos/rust-lang/rust/releases/latest | grep '"tag_name":' | sed -E 's/.*"([0-9]+\.[0-9]+\.[0-9]+)".*/\1/' | head -1))
269
+ $(eval CURRENT_RUST := $(shell grep '^rust-version' Cargo.toml | sed -E 's/rust-version = "([0-9]+\.[0-9]+\.[0-9]+)"/\1/'))
270
+ @if [ -z "$(LATEST_RUST)" ]; then \
271
+ echo "Failed to fetch latest Rust version"; \
272
+ exit 1; \
273
+ fi
274
+ @echo "Current Rust version: $(CURRENT_RUST)"
275
+ @echo "Latest Rust version: $(LATEST_RUST)"
276
+ @if [ "$(CURRENT_RUST)" = "$(LATEST_RUST)" ]; then \
277
+ echo "Already using the latest Rust version"; \
278
+ else \
279
+ echo "Updating Rust version to $(LATEST_RUST)..."; \
280
+ sed -i.bak -E 's/^rust-version = "[0-9]+\.[0-9]+\.[0-9]+"/rust-version = "$(LATEST_RUST)"/' Cargo.toml; \
281
+ sed -i.bak -E 's/^rust = "[0-9]+\.[0-9]+\.[0-9]+"/rust = "$(LATEST_RUST)"/' .mise.toml; \
282
+ sed -i.bak -E 's/^channel = "[0-9]+\.[0-9]+\.[0-9]+"/channel = "$(LATEST_RUST)"/' rust-toolchain.toml; \
283
+ rm -f Cargo.toml.bak .mise.toml.bak rust-toolchain.toml.bak; \
284
+ echo "Updated Rust version in Cargo.toml, .mise.toml, and rust-toolchain.toml"; \
285
+ echo "Running 'cargo check' to verify compatibility..."; \
286
+ cargo check || (echo "Warning: cargo check failed. You may need to fix compatibility issues."; exit 1); \
287
+ fi
288
+
289
+ pre-release:
290
+ @echo "Preparing for release..."
291
+ @echo "===================="
292
+ @$(MAKE) update-rust-version
293
+ @echo ""
294
+ @$(MAKE) update-dependencies
295
+ @echo ""
296
+ @echo "Running tests to verify everything works..."
297
+ @$(MAKE) test-quick
298
+ @echo ""
299
+ @echo "Pre-release preparation complete!"
300
+ @echo "===================="
301
+ @echo ""
302
+ @echo "Summary of changes:"
303
+ @echo "- Rust version: $$(grep '^rust-version' Cargo.toml | sed -E 's/rust-version = "([0-9]+\.[0-9]+\.[0-9]+)"/\1/')"
304
+ @echo "- Dependencies: Updated to latest compatible versions"
305
+ @echo ""
306
+ @echo "Please review changes and commit if satisfied."
307
+
308
+ # Full release targets that include pre-release preparation
309
+ release-major-full: pre-release version-major version-push
310
+ release-minor-full: pre-release version-minor version-push
311
+ release-patch-full: pre-release version-patch version-push
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rumdl
3
- Version: 0.0.90
3
+ Version: 0.0.91
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -1,4 +1,4 @@
1
- use criterion::{black_box, criterion_group, criterion_main, Criterion};
1
+ use criterion::{Criterion, black_box, criterion_group, criterion_main};
2
2
  use rumdl::lint_context::LintContext;
3
3
  use rumdl::rule::Rule;
4
4
  use rumdl::rules::*;
@@ -10,7 +10,7 @@ fn generate_problematic_content(size: usize) -> String {
10
10
  for i in 0..size {
11
11
  // MD001 - Heading increment issues
12
12
  if i % 10 == 0 {
13
- content.push_str(&format!("### Heading {} (should be H1)\n\n", i));
13
+ content.push_str(&format!("### Heading {i} (should be H1)\n\n"));
14
14
  }
15
15
 
16
16
  // MD002 - First heading should be H1
@@ -20,40 +20,40 @@ fn generate_problematic_content(size: usize) -> String {
20
20
 
21
21
  // MD003 - Heading style inconsistency
22
22
  if i % 15 == 0 {
23
- content.push_str(&format!("Heading {}\n", i));
23
+ content.push_str(&format!("Heading {i}\n"));
24
24
  content.push_str("=============\n\n");
25
25
  }
26
26
 
27
27
  // MD004 - Unordered list style inconsistency
28
28
  if i % 8 == 0 {
29
- content.push_str(&format!("* Item {}\n", i));
29
+ content.push_str(&format!("* Item {i}\n"));
30
30
  content.push_str(&format!("- Item {}\n", i + 1));
31
31
  content.push_str(&format!("+ Item {}\n\n", i + 2));
32
32
  }
33
33
 
34
34
  // MD005 - List indentation issues
35
35
  if i % 12 == 0 {
36
- content.push_str(&format!("* Item {}\n", i));
37
- content.push_str(&format!(" * Badly indented item {}\n\n", i));
36
+ content.push_str(&format!("* Item {i}\n"));
37
+ content.push_str(&format!(" * Badly indented item {i}\n\n"));
38
38
  }
39
39
 
40
40
  // MD006 - Start bullets at beginning
41
41
  if i % 20 == 0 {
42
- content.push_str(&format!(" * Indented bullet {}\n\n", i));
42
+ content.push_str(&format!(" * Indented bullet {i}\n\n"));
43
43
  }
44
44
 
45
45
  // MD007 - Unordered list indentation
46
46
  if i % 18 == 0 {
47
- content.push_str(&format!("* Item {}\n", i));
48
- content.push_str(&format!(" * Wrong indent {}\n\n", i));
47
+ content.push_str(&format!("* Item {i}\n"));
48
+ content.push_str(&format!(" * Wrong indent {i}\n\n"));
49
49
  }
50
50
 
51
51
  // MD009 - Trailing spaces
52
- content.push_str(&format!("Line {} with trailing spaces \n", i));
52
+ content.push_str(&format!("Line {i} with trailing spaces \n"));
53
53
 
54
54
  // MD010 - Hard tabs
55
55
  if i % 25 == 0 {
56
- content.push_str(&format!("Line {}\twith\ttabs\n", i));
56
+ content.push_str(&format!("Line {i}\twith\ttabs\n"));
57
57
  }
58
58
 
59
59
  // MD012 - Multiple blank lines
@@ -63,72 +63,72 @@ fn generate_problematic_content(size: usize) -> String {
63
63
 
64
64
  // MD013 - Line length (create long lines)
65
65
  if i % 7 == 0 {
66
- content.push_str(&format!("This is a very long line {} that exceeds the default line length limit of 80 characters and should be flagged by MD013 rule for being too long.\n", i));
66
+ content.push_str(&format!("This is a very long line {i} that exceeds the default line length limit of 80 characters and should be flagged by MD013 rule for being too long.\n"));
67
67
  }
68
68
 
69
69
  // MD018 - No space after hash on atx heading
70
70
  if i % 22 == 0 {
71
- content.push_str(&format!("#Heading without space {}\n\n", i));
71
+ content.push_str(&format!("#Heading without space {i}\n\n"));
72
72
  }
73
73
 
74
74
  // MD019 - Multiple spaces after hash on atx heading
75
75
  if i % 24 == 0 {
76
- content.push_str(&format!("## Heading with extra spaces {}\n\n", i));
76
+ content.push_str(&format!("## Heading with extra spaces {i}\n\n"));
77
77
  }
78
78
 
79
79
  // MD020 - No space inside hashes on closed atx heading
80
80
  if i % 26 == 0 {
81
- content.push_str(&format!("#Closed heading{}#\n\n", i));
81
+ content.push_str(&format!("#Closed heading{i}#\n\n"));
82
82
  }
83
83
 
84
84
  // MD021 - Multiple spaces inside hashes on closed atx heading
85
85
  if i % 28 == 0 {
86
- content.push_str(&format!("# Closed heading {} #\n\n", i));
86
+ content.push_str(&format!("# Closed heading {i} #\n\n"));
87
87
  }
88
88
 
89
89
  // MD022 - Headings should be surrounded by blank lines
90
90
  if i % 35 == 0 {
91
- content.push_str(&format!("Text before heading\n# Heading {}\nText after heading\n\n", i));
91
+ content.push_str(&format!("Text before heading\n# Heading {i}\nText after heading\n\n"));
92
92
  }
93
93
 
94
94
  // MD023 - Headings must start at beginning of line
95
95
  if i % 40 == 0 {
96
- content.push_str(&format!(" # Indented heading {}\n\n", i));
96
+ content.push_str(&format!(" # Indented heading {i}\n\n"));
97
97
  }
98
98
 
99
99
  // MD026 - Trailing punctuation in headings
100
100
  if i % 16 == 0 {
101
- content.push_str(&format!("# Heading with punctuation {}!\n\n", i));
101
+ content.push_str(&format!("# Heading with punctuation {i}!\n\n"));
102
102
  }
103
103
 
104
104
  // MD027 - Multiple spaces after blockquote symbol
105
105
  if i % 45 == 0 {
106
- content.push_str(&format!("> Blockquote with extra spaces {}\n\n", i));
106
+ content.push_str(&format!("> Blockquote with extra spaces {i}\n\n"));
107
107
  }
108
108
 
109
109
  // MD030 - Spaces after list markers
110
110
  if i % 14 == 0 {
111
- content.push_str(&format!("- Item with extra space {}\n\n", i));
111
+ content.push_str(&format!("- Item with extra space {i}\n\n"));
112
112
  }
113
113
 
114
114
  // MD031 - Fenced code blocks should be surrounded by blank lines
115
115
  if i % 50 == 0 {
116
- content.push_str(&format!("Text before\n```\ncode {}\n```\nText after\n\n", i));
116
+ content.push_str(&format!("Text before\n```\ncode {i}\n```\nText after\n\n"));
117
117
  }
118
118
 
119
119
  // MD032 - Lists should be surrounded by blank lines
120
120
  if i % 55 == 0 {
121
- content.push_str(&format!("Text before\n* List item {}\nText after\n\n", i));
121
+ content.push_str(&format!("Text before\n* List item {i}\nText after\n\n"));
122
122
  }
123
123
 
124
124
  // MD033 - Inline HTML
125
125
  if i % 17 == 0 {
126
- content.push_str(&format!("Text with <b>HTML tags</b> number {}\n", i));
126
+ content.push_str(&format!("Text with <b>HTML tags</b> number {i}\n"));
127
127
  }
128
128
 
129
129
  // MD034 - Bare URL used
130
130
  if i % 19 == 0 {
131
- content.push_str(&format!("Visit http://example{}.com for more info\n", i));
131
+ content.push_str(&format!("Visit http://example{i}.com for more info\n"));
132
132
  }
133
133
 
134
134
  // MD035 - Horizontal rule style
@@ -138,17 +138,17 @@ fn generate_problematic_content(size: usize) -> String {
138
138
 
139
139
  // MD037 - Spaces inside emphasis markers
140
140
  if i % 13 == 0 {
141
- content.push_str(&format!("Text with * bad emphasis * number {}\n", i));
141
+ content.push_str(&format!("Text with * bad emphasis * number {i}\n"));
142
142
  }
143
143
 
144
144
  // MD038 - Spaces inside code span elements
145
145
  if i % 21 == 0 {
146
- content.push_str(&format!("Text with ` bad code ` number {}\n", i));
146
+ content.push_str(&format!("Text with ` bad code ` number {i}\n"));
147
147
  }
148
148
 
149
149
  // MD039 - Spaces inside link text
150
150
  if i % 32 == 0 {
151
- content.push_str(&format!("[ Link text ](http://example{}.com)\n", i));
151
+ content.push_str(&format!("[ Link text ](http://example{i}.com)\n"));
152
152
  }
153
153
 
154
154
  // MD040 - Fenced code language
@@ -158,17 +158,17 @@ fn generate_problematic_content(size: usize) -> String {
158
158
 
159
159
  // MD042 - No empty links
160
160
  if i % 70 == 0 {
161
- content.push_str(&format!("[empty link {}]()\n", i));
161
+ content.push_str(&format!("[empty link {i}]()\n"));
162
162
  }
163
163
 
164
164
  // MD044 - Proper names
165
165
  if i % 11 == 0 {
166
- content.push_str(&format!("Text mentioning javascript and github number {}\n", i));
166
+ content.push_str(&format!("Text mentioning javascript and github number {i}\n"));
167
167
  }
168
168
 
169
169
  // MD045 - Images should have alternate text
170
170
  if i % 75 == 0 {
171
- content.push_str(&format!("![](image{}.png)\n", i));
171
+ content.push_str(&format!("![](image{i}.png)\n"));
172
172
  }
173
173
 
174
174
  // MD047 - Files should end with a single newline (we'll handle this separately)
@@ -176,26 +176,24 @@ fn generate_problematic_content(size: usize) -> String {
176
176
  // MD049 - Emphasis style
177
177
  if i % 23 == 0 {
178
178
  content.push_str(&format!(
179
- "Text with _underscore emphasis_ and *asterisk emphasis* {}\n",
180
- i
179
+ "Text with _underscore emphasis_ and *asterisk emphasis* {i}\n"
181
180
  ));
182
181
  }
183
182
 
184
183
  // MD050 - Strong style
185
184
  if i % 27 == 0 {
186
185
  content.push_str(&format!(
187
- "Text with __underscore strong__ and **asterisk strong** {}\n",
188
- i
186
+ "Text with __underscore strong__ and **asterisk strong** {i}\n"
189
187
  ));
190
188
  }
191
189
 
192
190
  // MD053 - Link and image reference definitions should be needed
193
191
  if i % 80 == 0 {
194
- content.push_str(&format!("[unused{}]: http://example{}.com\n", i, i));
192
+ content.push_str(&format!("[unused{i}]: http://example{i}.com\n"));
195
193
  }
196
194
 
197
195
  // Regular content
198
- content.push_str(&format!("Regular paragraph {} with some content.\n\n", i));
196
+ content.push_str(&format!("Regular paragraph {i} with some content.\n\n"));
199
197
  }
200
198
 
201
199
  content
@@ -1,9 +1,9 @@
1
- use criterion::{black_box, criterion_group, criterion_main, Criterion};
2
- use rand::rng;
1
+ use criterion::{Criterion, black_box, criterion_group, criterion_main};
3
2
  use rand::Rng;
4
- use rumdl::rule::Rule;
3
+ use rand::rng;
5
4
  use rumdl::LintContext;
6
5
  use rumdl::MD053LinkImageReferenceDefinitions;
6
+ use rumdl::rule::Rule;
7
7
 
8
8
  fn create_test_content(size: usize, ratio: f64) -> String {
9
9
  let mut content = String::with_capacity(size);
@@ -20,9 +20,9 @@ fn create_test_content(size: usize, ratio: f64) -> String {
20
20
  // 50% chance to add a reference
21
21
  if rng.random::<f64>() < 0.7 {
22
22
  // 70% chance to be a link, 30% to be an image
23
- content.push_str(&format!("[Link {}][ref-{}]\n", i, i));
23
+ content.push_str(&format!("[Link {i}][ref-{i}]\n"));
24
24
  } else {
25
- content.push_str(&format!("![Image {}][ref-{}]\n", i, i));
25
+ content.push_str(&format!("![Image {i}][ref-{i}]\n"));
26
26
  }
27
27
  }
28
28
  }
@@ -51,7 +51,7 @@ fn create_test_content(size: usize, ratio: f64) -> String {
51
51
  for i in 0..100 {
52
52
  if rng.random::<f64>() < ratio {
53
53
  // Only add a portion based on ratio
54
- content.push_str(&format!("[ref-{}]: https://example.com/ref-{}\n", i, i));
54
+ content.push_str(&format!("[ref-{i}]: https://example.com/ref-{i}\n"));
55
55
  }
56
56
  }
57
57
 
@@ -66,17 +66,17 @@ fn create_test_content_legacy() -> String {
66
66
  for i in 0..200 {
67
67
  if i < 100 {
68
68
  // Used references
69
- content.push_str(&format!("[ref{}]: https://example.com/ref{}\n", i, i));
69
+ content.push_str(&format!("[ref{i}]: https://example.com/ref{i}\n"));
70
70
  } else {
71
71
  // Unused references
72
- content.push_str(&format!("[unused{}]: https://example.com/unused{}\n", i, i));
72
+ content.push_str(&format!("[unused{i}]: https://example.com/unused{i}\n"));
73
73
  }
74
74
  }
75
75
 
76
76
  // Add reference usages
77
77
  content.push_str("\n## Content with References\n\n");
78
78
  for i in 0..100 {
79
- content.push_str(&format!("This is a paragraph with a [link][ref{}] reference.\n", i));
79
+ content.push_str(&format!("This is a paragraph with a [link][ref{i}] reference.\n"));
80
80
  }
81
81
 
82
82
  content
@@ -1,6 +1,6 @@
1
- use criterion::{black_box, criterion_group, criterion_main, Criterion};
2
- use rand::rng;
1
+ use criterion::{Criterion, black_box, criterion_group, criterion_main};
3
2
  use rand::Rng;
3
+ use rand::rng;
4
4
  use rumdl::utils::range_utils::LineIndex;
5
5
 
6
6
  // Naive implementation that doesn't use the optimized function
@@ -38,7 +38,7 @@ fn naive_line_col_to_byte_range(content: &str, line: usize, column: usize) -> st
38
38
 
39
39
  fn generate_test_content(line_count: usize) -> String {
40
40
  (0..line_count)
41
- .map(|i| format!("Line {}: This is a test line with some content.", i))
41
+ .map(|i| format!("Line {i}: This is a test line with some content."))
42
42
  .collect::<Vec<String>>()
43
43
  .join("\n")
44
44
  }
@@ -1,4 +1,4 @@
1
- use criterion::{criterion_group, criterion_main, Criterion};
1
+ use criterion::{Criterion, criterion_group, criterion_main};
2
2
  use rumdl::rule::Rule;
3
3
  use rumdl::rules::{
4
4
  MD013LineLength, MD033NoInlineHtml, MD037NoSpaceInEmphasis, MD044ProperNames, MD051LinkFragments,
@@ -30,8 +30,7 @@ fn bench_md033(c: &mut Criterion) {
30
30
  // Generate 500 lines with HTML tags
31
31
  for i in 0..500 {
32
32
  content.push_str(&format!(
33
- "Line {} with <span class=\"highlight\">HTML</span> and <div>nested <em>tags</em></div>\n",
34
- i
33
+ "Line {i} with <span class=\"highlight\">HTML</span> and <div>nested <em>tags</em></div>\n"
35
34
  ));
36
35
  }
37
36
 
@@ -49,13 +48,13 @@ fn bench_md037(c: &mut Criterion) {
49
48
  for i in 0..500 {
50
49
  if i % 3 == 0 {
51
50
  // Incorrect: no spaces around emphasis
52
- content.push_str(&format!("Line {} with*incorrect emphasis*markers\n", i));
51
+ content.push_str(&format!("Line {i} with*incorrect emphasis*markers\n"));
53
52
  } else if i % 3 == 1 {
54
53
  // Incorrect: spaces inside emphasis
55
- content.push_str(&format!("Line {} with *incorrect emphasis *markers\n", i));
54
+ content.push_str(&format!("Line {i} with *incorrect emphasis *markers\n"));
56
55
  } else {
57
56
  // Correct: proper spaces around emphasis
58
- content.push_str(&format!("Line {} with *correct emphasis* markers\n", i));
57
+ content.push_str(&format!("Line {i} with *correct emphasis* markers\n"));
59
58
  }
60
59
  }
61
60
 
@@ -115,7 +114,7 @@ fn bench_md051(c: &mut Criterion) {
115
114
 
116
115
  // Add 100 headings
117
116
  for i in 1..101 {
118
- content.push_str(&format!("## Heading {}\n\n", i));
117
+ content.push_str(&format!("## Heading {i}\n\n"));
119
118
  }
120
119
 
121
120
  // Add 500 links, some with valid and some with invalid fragments
@@ -123,10 +122,10 @@ fn bench_md051(c: &mut Criterion) {
123
122
  if i % 3 == 0 {
124
123
  // Valid link
125
124
  let heading_number = (i % 100) + 1;
126
- content.push_str(&format!("This is a [valid link](#heading-{})\n", heading_number));
125
+ content.push_str(&format!("This is a [valid link](#heading-{heading_number})\n"));
127
126
  } else {
128
127
  // Invalid link
129
- content.push_str(&format!("This is an [invalid link](#non-existent-heading-{})\n", i));
128
+ content.push_str(&format!("This is an [invalid link](#non-existent-heading-{i})\n"));
130
129
  }
131
130
  }
132
131
 
@@ -146,17 +145,17 @@ fn bench_md053(c: &mut Criterion) {
146
145
  for i in 0..200 {
147
146
  if i < 100 {
148
147
  // Used references
149
- content.push_str(&format!("[ref{}]: https://example.com/ref{}\n", i, i));
148
+ content.push_str(&format!("[ref{i}]: https://example.com/ref{i}\n"));
150
149
  } else {
151
150
  // Unused references
152
- content.push_str(&format!("[unused{}]: https://example.com/unused{}\n", i, i));
151
+ content.push_str(&format!("[unused{i}]: https://example.com/unused{i}\n"));
153
152
  }
154
153
  }
155
154
 
156
155
  // Add reference usages
157
156
  content.push_str("\n## Content with References\n\n");
158
157
  for i in 0..100 {
159
- content.push_str(&format!("This is a paragraph with a [link][ref{}] reference.\n", i));
158
+ content.push_str(&format!("This is a paragraph with a [link][ref{i}] reference.\n"));
160
159
  }
161
160
 
162
161
  let rule = MD053LinkImageReferenceDefinitions::default();
@@ -1,4 +1,4 @@
1
- use criterion::{black_box, criterion_group, criterion_main, Criterion};
1
+ use criterion::{Criterion, black_box, criterion_group, criterion_main};
2
2
  use rumdl::lint_context::LintContext;
3
3
  use rumdl::rule::Rule;
4
4
  use rumdl::rules::*;
@@ -9,7 +9,7 @@ fn generate_test_content() -> String {
9
9
 
10
10
  for i in 0..500 {
11
11
  // MD009 - Trailing spaces (very common)
12
- content.push_str(&format!("Line {} with trailing spaces \n", i));
12
+ content.push_str(&format!("Line {i} with trailing spaces \n"));
13
13
 
14
14
  // MD012 - Multiple blank lines
15
15
  if i % 10 == 0 {
@@ -18,21 +18,21 @@ fn generate_test_content() -> String {
18
18
 
19
19
  // MD018 - No space after hash
20
20
  if i % 15 == 0 {
21
- content.push_str(&format!("#Heading without space {}\n\n", i));
21
+ content.push_str(&format!("#Heading without space {i}\n\n"));
22
22
  }
23
23
 
24
24
  // MD026 - Trailing punctuation
25
25
  if i % 20 == 0 {
26
- content.push_str(&format!("# Heading with punctuation {}!\n\n", i));
26
+ content.push_str(&format!("# Heading with punctuation {i}!\n\n"));
27
27
  }
28
28
 
29
29
  // MD037 - Spaces inside emphasis
30
30
  if i % 8 == 0 {
31
- content.push_str(&format!("Text with * bad emphasis * number {}\n", i));
31
+ content.push_str(&format!("Text with * bad emphasis * number {i}\n"));
32
32
  }
33
33
 
34
34
  // Regular content
35
- content.push_str(&format!("Regular paragraph {} with some content.\n\n", i));
35
+ content.push_str(&format!("Regular paragraph {i} with some content.\n\n"));
36
36
  }
37
37
 
38
38
  content
@@ -1,5 +1,5 @@
1
1
  [toolchain]
2
- channel = "1.87.0"
2
+ channel = "1.88.0"
3
3
  components = ["rustfmt", "clippy"]
4
4
  targets = [
5
5
  "x86_64-unknown-linux-gnu",
@@ -24,7 +24,7 @@ fn main() {
24
24
 
25
25
  println!("📋 Benchmark Configuration:");
26
26
  println!(" Rules to test: {}", rules.len());
27
- println!(" Test type: {}", test_type);
27
+ println!(" Test type: {test_type}");
28
28
  println!(" CPU cores: {}", num_cpus::get());
29
29
  println!();
30
30
 
@@ -117,7 +117,7 @@ fn save_baseline_results(results: &std::collections::HashMap<String, rumdl::perf
117
117
  use std::fs;
118
118
 
119
119
  let timestamp = chrono::Utc::now().format("%Y%m%d_%H%M%S");
120
- let filename = format!("benchmark_baseline_{}.txt", timestamp);
120
+ let filename = format!("benchmark_baseline_{timestamp}.txt");
121
121
 
122
122
  let mut output = String::new();
123
123
  output.push_str("RUMDL Performance Baseline Results\n");
@@ -164,7 +164,7 @@ fn save_baseline_results(results: &std::collections::HashMap<String, rumdl::perf
164
164
  }
165
165
 
166
166
  match fs::write(&filename, output) {
167
- Ok(_) => println!("📄 Baseline results saved to: {}", filename),
168
- Err(e) => eprintln!("❌ Failed to save baseline results: {}", e),
167
+ Ok(_) => println!("📄 Baseline results saved to: {filename}"),
168
+ Err(e) => eprintln!("❌ Failed to save baseline results: {e}"),
169
169
  }
170
170
  }
@@ -28,11 +28,11 @@ fn main() {
28
28
 
29
29
  println!("📋 Benchmark Configuration:");
30
30
  println!(" Rules to test: {}", rules.len());
31
- println!(" File count: {}", file_count);
32
- println!(" Content size: {}", content_size);
31
+ println!(" File count: {file_count}");
32
+ println!(" Content size: {content_size}");
33
33
  println!(" CPU cores: {}", num_cpus::get());
34
34
  if let Some(threads) = thread_count {
35
- println!(" Thread override: {}", threads);
35
+ println!(" Thread override: {threads}");
36
36
  }
37
37
  println!();
38
38
 
@@ -43,7 +43,7 @@ fn main() {
43
43
 
44
44
  println!("📄 Generated Test Files:");
45
45
  println!(" Total files: {}", test_files.len());
46
- println!(" Total content: {} bytes ({} lines)", total_content_size, total_lines);
46
+ println!(" Total content: {total_content_size} bytes ({total_lines} lines)");
47
47
  println!(" Average file size: {} bytes", total_content_size / test_files.len());
48
48
  println!();
49
49
 
@@ -128,8 +128,7 @@ fn run_file_parallel_comparison(
128
128
  // Verify correctness (warnings should be the same)
129
129
  if sequential_total_warnings != parallel_total_warnings {
130
130
  println!(
131
- "⚠️ WARNING: Different warning counts! Sequential: {}, Parallel: {}",
132
- sequential_total_warnings, parallel_total_warnings
131
+ "⚠️ WARNING: Different warning counts! Sequential: {sequential_total_warnings}, Parallel: {parallel_total_warnings}"
133
132
  );
134
133
  }
135
134
 
@@ -151,10 +150,10 @@ fn run_file_parallel_comparison(
151
150
 
152
151
  if comparison.speedup_factor > 1.0 {
153
152
  let improvement = (comparison.speedup_factor - 1.0) * 100.0;
154
- println!(" ✅ Performance improvement: {:.1}%", improvement);
153
+ println!(" ✅ Performance improvement: {improvement:.1}%");
155
154
  } else {
156
155
  let degradation = (1.0 - comparison.speedup_factor) * 100.0;
157
- println!(" ❌ Performance degradation: {:.1}%", degradation);
156
+ println!(" ❌ Performance degradation: {degradation:.1}%");
158
157
  if comparison.parallel_overhead > std::time::Duration::ZERO {
159
158
  println!(
160
159
  " Parallel overhead: {:.3}ms",
@@ -170,8 +169,8 @@ fn run_file_parallel_comparison(
170
169
 
171
170
  println!();
172
171
  println!("📊 Throughput Analysis:");
173
- println!(" Sequential: {:.2} MB/s", sequential_throughput);
174
- println!(" Parallel: {:.2} MB/s", parallel_throughput);
172
+ println!(" Sequential: {sequential_throughput:.2} MB/s");
173
+ println!(" Parallel: {parallel_throughput:.2} MB/s");
175
174
  println!(
176
175
  " Throughput improvement: {:.1}%",
177
176
  (parallel_throughput / sequential_throughput - 1.0) * 100.0