rumdl 0.0.124__tar.gz → 0.0.125__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 (406) hide show
  1. {rumdl-0.0.124 → rumdl-0.0.125}/CHANGELOG.md +23 -1
  2. {rumdl-0.0.124 → rumdl-0.0.125}/Cargo.lock +1 -1
  3. {rumdl-0.0.124 → rumdl-0.0.125}/Cargo.toml +1 -1
  4. {rumdl-0.0.124 → rumdl-0.0.125}/PKG-INFO +4 -1
  5. {rumdl-0.0.124 → rumdl-0.0.125}/README.md +3 -0
  6. {rumdl-0.0.124 → rumdl-0.0.125}/scripts/pre-release.sh +20 -0
  7. {rumdl-0.0.124 → rumdl-0.0.125}/src/lint_context.rs +1 -1
  8. {rumdl-0.0.124 → rumdl-0.0.125}/src/main.rs +71 -31
  9. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md029_ordered_list_prefix.rs +49 -130
  10. {rumdl-0.0.124 → rumdl-0.0.125}/tests/cli_integration_tests.rs +107 -0
  11. rumdl-0.0.125/tests/rules/md029_fix_test.rs +170 -0
  12. rumdl-0.0.125/tests/rules/md029_markdownlint_parity_test.rs +229 -0
  13. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md029_test.rs +18 -16
  14. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/mod.rs +2 -0
  15. {rumdl-0.0.124 → rumdl-0.0.125}/.config/nextest.toml +0 -0
  16. {rumdl-0.0.124 → rumdl-0.0.125}/.mise.toml +0 -0
  17. {rumdl-0.0.124 → rumdl-0.0.125}/.pre-commit-config.yaml +0 -0
  18. {rumdl-0.0.124 → rumdl-0.0.125}/.rumdl.toml +0 -0
  19. {rumdl-0.0.124 → rumdl-0.0.125}/.rustfmt.toml +0 -0
  20. {rumdl-0.0.124 → rumdl-0.0.125}/LICENSE +0 -0
  21. {rumdl-0.0.124 → rumdl-0.0.125}/MANIFEST.in +0 -0
  22. {rumdl-0.0.124 → rumdl-0.0.125}/Makefile +0 -0
  23. {rumdl-0.0.124 → rumdl-0.0.125}/assets/logo.png +0 -0
  24. {rumdl-0.0.124 → rumdl-0.0.125}/benches/fix_performance.rs +0 -0
  25. {rumdl-0.0.124 → rumdl-0.0.125}/benches/range_performance.rs +0 -0
  26. {rumdl-0.0.124 → rumdl-0.0.125}/benches/range_utils_benchmark.rs +0 -0
  27. {rumdl-0.0.124 → rumdl-0.0.125}/benches/rule_performance.rs +0 -0
  28. {rumdl-0.0.124 → rumdl-0.0.125}/benches/simple_fix_bench.rs +0 -0
  29. {rumdl-0.0.124 → rumdl-0.0.125}/benchmark/bin/bench_lint_context.rs +0 -0
  30. {rumdl-0.0.124 → rumdl-0.0.125}/benchmark/bin/benchmark.rs +0 -0
  31. {rumdl-0.0.124 → rumdl-0.0.125}/benchmark/bin/benchmark_rule.rs +0 -0
  32. {rumdl-0.0.124 → rumdl-0.0.125}/benchmark/bin/file_parallel_benchmark.rs +0 -0
  33. {rumdl-0.0.124 → rumdl-0.0.125}/benchmark/bin/measure_code_span_performance.rs +0 -0
  34. {rumdl-0.0.124 → rumdl-0.0.125}/docs/RULES.md +0 -0
  35. {rumdl-0.0.124 → rumdl-0.0.125}/docs/global-settings.md +0 -0
  36. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md001.md +0 -0
  37. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md002.md +0 -0
  38. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md003.md +0 -0
  39. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md004.md +0 -0
  40. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md005.md +0 -0
  41. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md006.md +0 -0
  42. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md007.md +0 -0
  43. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md009.md +0 -0
  44. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md010.md +0 -0
  45. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md011.md +0 -0
  46. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md012.md +0 -0
  47. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md013.md +0 -0
  48. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md014.md +0 -0
  49. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md018.md +0 -0
  50. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md019.md +0 -0
  51. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md020.md +0 -0
  52. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md021.md +0 -0
  53. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md022.md +0 -0
  54. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md023.md +0 -0
  55. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md024.md +0 -0
  56. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md025.md +0 -0
  57. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md026.md +0 -0
  58. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md027.md +0 -0
  59. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md028.md +0 -0
  60. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md029.md +0 -0
  61. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md030.md +0 -0
  62. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md031.md +0 -0
  63. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md032.md +0 -0
  64. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md033.md +0 -0
  65. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md034.md +0 -0
  66. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md035.md +0 -0
  67. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md036.md +0 -0
  68. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md037.md +0 -0
  69. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md038.md +0 -0
  70. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md039.md +0 -0
  71. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md040.md +0 -0
  72. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md041.md +0 -0
  73. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md042.md +0 -0
  74. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md043.md +0 -0
  75. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md044.md +0 -0
  76. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md045.md +0 -0
  77. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md046.md +0 -0
  78. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md047.md +0 -0
  79. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md048.md +0 -0
  80. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md049.md +0 -0
  81. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md050.md +0 -0
  82. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md051.md +0 -0
  83. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md052.md +0 -0
  84. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md053.md +0 -0
  85. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md054.md +0 -0
  86. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md055.md +0 -0
  87. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md056.md +0 -0
  88. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md057.md +0 -0
  89. {rumdl-0.0.124 → rumdl-0.0.125}/docs/md058.md +0 -0
  90. {rumdl-0.0.124 → rumdl-0.0.125}/docs/vscode-extension.md +0 -0
  91. {rumdl-0.0.124 → rumdl-0.0.125}/parity_check.py +0 -0
  92. {rumdl-0.0.124 → rumdl-0.0.125}/pyproject.toml +0 -0
  93. {rumdl-0.0.124 → rumdl-0.0.125}/python/MANIFEST.in +0 -0
  94. {rumdl-0.0.124 → rumdl-0.0.125}/python/PYTHON-README.md +0 -0
  95. {rumdl-0.0.124 → rumdl-0.0.125}/python/rumdl/__init__.py +0 -0
  96. {rumdl-0.0.124 → rumdl-0.0.125}/python/rumdl/__main__.py +0 -0
  97. {rumdl-0.0.124 → rumdl-0.0.125}/python/rumdl/py.typed +0 -0
  98. {rumdl-0.0.124 → rumdl-0.0.125}/rumdl.toml.example +0 -0
  99. {rumdl-0.0.124 → rumdl-0.0.125}/rust-toolchain.toml +0 -0
  100. {rumdl-0.0.124 → rumdl-0.0.125}/scripts/extract-changelog.sh +0 -0
  101. {rumdl-0.0.124 → rumdl-0.0.125}/scripts/generate-downloads-table.sh +0 -0
  102. {rumdl-0.0.124 → rumdl-0.0.125}/scripts/prepare-release.sh +0 -0
  103. {rumdl-0.0.124 → rumdl-0.0.125}/scripts/setup-pre-commit.sh +0 -0
  104. {rumdl-0.0.124 → rumdl-0.0.125}/scripts/update-pre-commit-docs.sh +0 -0
  105. {rumdl-0.0.124 → rumdl-0.0.125}/src/config.rs +0 -0
  106. {rumdl-0.0.124 → rumdl-0.0.125}/src/exit_codes.rs +0 -0
  107. {rumdl-0.0.124 → rumdl-0.0.125}/src/inline_config.rs +0 -0
  108. {rumdl-0.0.124 → rumdl-0.0.125}/src/lib.rs +0 -0
  109. {rumdl-0.0.124 → rumdl-0.0.125}/src/lsp/mod.rs +0 -0
  110. {rumdl-0.0.124 → rumdl-0.0.125}/src/lsp/server.rs +0 -0
  111. {rumdl-0.0.124 → rumdl-0.0.125}/src/lsp/types.rs +0 -0
  112. {rumdl-0.0.124 → rumdl-0.0.125}/src/markdownlint_config.rs +0 -0
  113. {rumdl-0.0.124 → rumdl-0.0.125}/src/output/formatters/azure.rs +0 -0
  114. {rumdl-0.0.124 → rumdl-0.0.125}/src/output/formatters/concise.rs +0 -0
  115. {rumdl-0.0.124 → rumdl-0.0.125}/src/output/formatters/github.rs +0 -0
  116. {rumdl-0.0.124 → rumdl-0.0.125}/src/output/formatters/gitlab.rs +0 -0
  117. {rumdl-0.0.124 → rumdl-0.0.125}/src/output/formatters/grouped.rs +0 -0
  118. {rumdl-0.0.124 → rumdl-0.0.125}/src/output/formatters/json.rs +0 -0
  119. {rumdl-0.0.124 → rumdl-0.0.125}/src/output/formatters/json_lines.rs +0 -0
  120. {rumdl-0.0.124 → rumdl-0.0.125}/src/output/formatters/junit.rs +0 -0
  121. {rumdl-0.0.124 → rumdl-0.0.125}/src/output/formatters/mod.rs +0 -0
  122. {rumdl-0.0.124 → rumdl-0.0.125}/src/output/formatters/pylint.rs +0 -0
  123. {rumdl-0.0.124 → rumdl-0.0.125}/src/output/formatters/sarif.rs +0 -0
  124. {rumdl-0.0.124 → rumdl-0.0.125}/src/output/formatters/text.rs +0 -0
  125. {rumdl-0.0.124 → rumdl-0.0.125}/src/output/mod.rs +0 -0
  126. {rumdl-0.0.124 → rumdl-0.0.125}/src/parallel.rs +0 -0
  127. {rumdl-0.0.124 → rumdl-0.0.125}/src/performance.rs +0 -0
  128. {rumdl-0.0.124 → rumdl-0.0.125}/src/profiling.rs +0 -0
  129. {rumdl-0.0.124 → rumdl-0.0.125}/src/python.rs +0 -0
  130. {rumdl-0.0.124 → rumdl-0.0.125}/src/rule.rs +0 -0
  131. {rumdl-0.0.124 → rumdl-0.0.125}/src/rule_config.rs +0 -0
  132. {rumdl-0.0.124 → rumdl-0.0.125}/src/rule_config_serde.rs +0 -0
  133. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/blockquote_utils.rs +0 -0
  134. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/code_block_utils.rs +0 -0
  135. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/code_fence_utils.rs +0 -0
  136. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/emphasis_style.rs +0 -0
  137. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/front_matter_utils.rs +0 -0
  138. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/heading_utils.rs +0 -0
  139. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/list_utils.rs +0 -0
  140. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md001_heading_increment.rs +0 -0
  141. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md002_first_heading_h1/md002_config.rs +0 -0
  142. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md002_first_heading_h1.rs +0 -0
  143. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md003_heading_style/md003_config.rs +0 -0
  144. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md003_heading_style.rs +0 -0
  145. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md004_unordered_list_style/md004_config.rs +0 -0
  146. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md004_unordered_list_style.rs +0 -0
  147. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md005_list_indent.rs +0 -0
  148. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md006_start_bullets.rs +0 -0
  149. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md007_ul_indent/md007_config.rs +0 -0
  150. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md007_ul_indent.rs +0 -0
  151. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md009_trailing_spaces/md009_config.rs +0 -0
  152. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md009_trailing_spaces.rs +0 -0
  153. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md010_no_hard_tabs/md010_config.rs +0 -0
  154. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md010_no_hard_tabs.rs +0 -0
  155. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md011_no_reversed_links.rs +0 -0
  156. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md012_no_multiple_blanks/md012_config.rs +0 -0
  157. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md012_no_multiple_blanks.rs +0 -0
  158. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md013_line_length/md013_config.rs +0 -0
  159. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md013_line_length.rs +0 -0
  160. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md014_commands_show_output/md014_config.rs +0 -0
  161. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md014_commands_show_output.rs +0 -0
  162. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md018_no_missing_space_atx.rs +0 -0
  163. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md019_no_multiple_space_atx.rs +0 -0
  164. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md020_no_missing_space_closed_atx.rs +0 -0
  165. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md021_no_multiple_space_closed_atx.rs +0 -0
  166. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md022_blanks_around_headings/md022_config.rs +0 -0
  167. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md022_blanks_around_headings.rs +0 -0
  168. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md023_heading_start_left.rs +0 -0
  169. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md024_no_duplicate_heading/md024_config.rs +0 -0
  170. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md024_no_duplicate_heading.rs +0 -0
  171. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md025_single_title/md025_config.rs +0 -0
  172. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md025_single_title.rs +0 -0
  173. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md026_no_trailing_punctuation/md026_config.rs +0 -0
  174. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md026_no_trailing_punctuation.rs +0 -0
  175. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md027_multiple_spaces_blockquote.rs +0 -0
  176. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md028_no_blanks_blockquote.rs +0 -0
  177. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md029_ordered_list_prefix/md029_config.rs +0 -0
  178. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md030_list_marker_space/md030_config.rs +0 -0
  179. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md030_list_marker_space.rs +0 -0
  180. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md031_blanks_around_fences.rs +0 -0
  181. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md032_blanks_around_lists.rs +0 -0
  182. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md033_no_inline_html/md033_config.rs +0 -0
  183. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md033_no_inline_html.rs +0 -0
  184. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md034_no_bare_urls.rs +0 -0
  185. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md035_hr_style/md035_config.rs +0 -0
  186. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md035_hr_style.rs +0 -0
  187. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md036_no_emphasis_only_first/md036_config.rs +0 -0
  188. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md036_no_emphasis_only_first.rs +0 -0
  189. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md037_spaces_around_emphasis.rs +0 -0
  190. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md038_no_space_in_code.rs +0 -0
  191. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md039_no_space_in_links.rs +0 -0
  192. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md040_fenced_code_language.rs +0 -0
  193. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md041_first_line_heading.rs +0 -0
  194. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md042_no_empty_links.rs +0 -0
  195. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md043_required_headings.rs +0 -0
  196. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md044_proper_names/md044_config.rs +0 -0
  197. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md044_proper_names.rs +0 -0
  198. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md045_no_alt_text/md045_config.rs +0 -0
  199. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md045_no_alt_text.rs +0 -0
  200. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md046_code_block_style/md046_config.rs +0 -0
  201. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md046_code_block_style.rs +0 -0
  202. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md047_single_trailing_newline.rs +0 -0
  203. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md048_code_fence_style/md048_config.rs +0 -0
  204. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md048_code_fence_style.rs +0 -0
  205. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md049_emphasis_style/md049_config.rs +0 -0
  206. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md049_emphasis_style.rs +0 -0
  207. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md050_strong_style/md050_config.rs +0 -0
  208. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md050_strong_style.rs +0 -0
  209. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md051_link_fragments.rs +0 -0
  210. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md052_reference_links_images.rs +0 -0
  211. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md053_link_image_reference_definitions.rs +0 -0
  212. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md054_link_image_style/md054_config.rs +0 -0
  213. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md054_link_image_style.rs +0 -0
  214. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md055_table_pipe_style/md055_config.rs +0 -0
  215. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md055_table_pipe_style.rs +0 -0
  216. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md056_table_column_count.rs +0 -0
  217. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md057_existing_relative_links/md057_config.rs +0 -0
  218. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md057_existing_relative_links.rs +0 -0
  219. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/md058_blanks_around_tables.rs +0 -0
  220. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/mod.rs +0 -0
  221. {rumdl-0.0.124 → rumdl-0.0.125}/src/rules/strong_style.rs +0 -0
  222. {rumdl-0.0.124 → rumdl-0.0.125}/src/utils/anchor_styles/github.rs +0 -0
  223. {rumdl-0.0.124 → rumdl-0.0.125}/src/utils/anchor_styles/jekyll.rs +0 -0
  224. {rumdl-0.0.124 → rumdl-0.0.125}/src/utils/anchor_styles/kramdown.rs +0 -0
  225. {rumdl-0.0.124 → rumdl-0.0.125}/src/utils/anchor_styles/kramdown_gfm.rs +0 -0
  226. {rumdl-0.0.124 → rumdl-0.0.125}/src/utils/anchor_styles/mod.rs +0 -0
  227. {rumdl-0.0.124 → rumdl-0.0.125}/src/utils/ast_utils.rs +0 -0
  228. {rumdl-0.0.124 → rumdl-0.0.125}/src/utils/code_block_utils.rs +0 -0
  229. {rumdl-0.0.124 → rumdl-0.0.125}/src/utils/document_structure.rs +0 -0
  230. {rumdl-0.0.124 → rumdl-0.0.125}/src/utils/early_returns.rs +0 -0
  231. {rumdl-0.0.124 → rumdl-0.0.125}/src/utils/element_cache.rs +0 -0
  232. {rumdl-0.0.124 → rumdl-0.0.125}/src/utils/emphasis_utils.rs +0 -0
  233. {rumdl-0.0.124 → rumdl-0.0.125}/src/utils/fix_utils.rs +0 -0
  234. {rumdl-0.0.124 → rumdl-0.0.125}/src/utils/header_id_utils.rs +0 -0
  235. {rumdl-0.0.124 → rumdl-0.0.125}/src/utils/kramdown_utils.rs +0 -0
  236. {rumdl-0.0.124 → rumdl-0.0.125}/src/utils/markdown_elements.rs +0 -0
  237. {rumdl-0.0.124 → rumdl-0.0.125}/src/utils/mod.rs +0 -0
  238. {rumdl-0.0.124 → rumdl-0.0.125}/src/utils/range_utils.rs +0 -0
  239. {rumdl-0.0.124 → rumdl-0.0.125}/src/utils/regex_cache.rs +0 -0
  240. {rumdl-0.0.124 → rumdl-0.0.125}/src/utils/skip_context.rs +0 -0
  241. {rumdl-0.0.124 → rumdl-0.0.125}/src/utils/string_interner.rs +0 -0
  242. {rumdl-0.0.124 → rumdl-0.0.125}/src/utils/table_utils.rs +0 -0
  243. {rumdl-0.0.124 → rumdl-0.0.125}/src/utils/text_reflow.rs +0 -0
  244. {rumdl-0.0.124 → rumdl-0.0.125}/src/vscode.rs +0 -0
  245. {rumdl-0.0.124 → rumdl-0.0.125}/tests/advanced_integration_tests.rs +0 -0
  246. {rumdl-0.0.124 → rumdl-0.0.125}/tests/character_ranges/additional_tests.rs +0 -0
  247. {rumdl-0.0.124 → rumdl-0.0.125}/tests/character_ranges/basic_tests.rs +0 -0
  248. {rumdl-0.0.124 → rumdl-0.0.125}/tests/character_ranges/comprehensive_tests.rs +0 -0
  249. {rumdl-0.0.124 → rumdl-0.0.125}/tests/character_ranges/extended_tests.rs +0 -0
  250. {rumdl-0.0.124 → rumdl-0.0.125}/tests/character_ranges/mod.rs +0 -0
  251. {rumdl-0.0.124 → rumdl-0.0.125}/tests/character_ranges/unicode_utils.rs +0 -0
  252. {rumdl-0.0.124 → rumdl-0.0.125}/tests/cli_duplication_test.rs +0 -0
  253. {rumdl-0.0.124 → rumdl-0.0.125}/tests/cli_explain_test.rs +0 -0
  254. {rumdl-0.0.124 → rumdl-0.0.125}/tests/cli_flag_precedence_test.rs +0 -0
  255. {rumdl-0.0.124 → rumdl-0.0.125}/tests/cli_lsp_fix_consistency.rs +0 -0
  256. {rumdl-0.0.124 → rumdl-0.0.125}/tests/cli_statistics_test.rs +0 -0
  257. {rumdl-0.0.124 → rumdl-0.0.125}/tests/common/cli_test_utils.rs +0 -0
  258. {rumdl-0.0.124 → rumdl-0.0.125}/tests/common/fixtures.rs +0 -0
  259. {rumdl-0.0.124 → rumdl-0.0.125}/tests/common/mod.rs +0 -0
  260. {rumdl-0.0.124 → rumdl-0.0.125}/tests/common/test_utils.rs +0 -0
  261. {rumdl-0.0.124 → rumdl-0.0.125}/tests/commonmark_compliance_tests.rs +0 -0
  262. {rumdl-0.0.124 → rumdl-0.0.125}/tests/comprehensive_integration_tests.rs +0 -0
  263. {rumdl-0.0.124 → rumdl-0.0.125}/tests/comprehensive_output_format_tests.rs +0 -0
  264. {rumdl-0.0.124 → rumdl-0.0.125}/tests/config_application_tests.rs +0 -0
  265. {rumdl-0.0.124 → rumdl-0.0.125}/tests/config_file_command_test.rs +0 -0
  266. {rumdl-0.0.124 → rumdl-0.0.125}/tests/config_tests.rs +0 -0
  267. {rumdl-0.0.124 → rumdl-0.0.125}/tests/config_upward_traversal_test.rs +0 -0
  268. {rumdl-0.0.124 → rumdl-0.0.125}/tests/configuration_inheritance_tests.rs +0 -0
  269. {rumdl-0.0.124 → rumdl-0.0.125}/tests/consistency_regression_tests.rs +0 -0
  270. {rumdl-0.0.124 → rumdl-0.0.125}/tests/cross_platform_compatibility_tests.rs +0 -0
  271. {rumdl-0.0.124 → rumdl-0.0.125}/tests/deeply_nested_lists_performance_test.rs +0 -0
  272. {rumdl-0.0.124 → rumdl-0.0.125}/tests/escaped_brackets_test.rs +0 -0
  273. {rumdl-0.0.124 → rumdl-0.0.125}/tests/final_confidence_assessment.rs +0 -0
  274. {rumdl-0.0.124 → rumdl-0.0.125}/tests/fixable_unfixable_config_test.rs +0 -0
  275. {rumdl-0.0.124 → rumdl-0.0.125}/tests/init_command_test.rs +0 -0
  276. {rumdl-0.0.124 → rumdl-0.0.125}/tests/init_tests.rs +0 -0
  277. {rumdl-0.0.124 → rumdl-0.0.125}/tests/inline_config_blocks_test.rs +0 -0
  278. {rumdl-0.0.124 → rumdl-0.0.125}/tests/inline_config_test.rs +0 -0
  279. {rumdl-0.0.124 → rumdl-0.0.125}/tests/integration_tests.rs +0 -0
  280. {rumdl-0.0.124 → rumdl-0.0.125}/tests/json_output_test.rs +0 -0
  281. {rumdl-0.0.124 → rumdl-0.0.125}/tests/kramdown_integration_test.rs +0 -0
  282. {rumdl-0.0.124 → rumdl-0.0.125}/tests/lib.rs +0 -0
  283. {rumdl-0.0.124 → rumdl-0.0.125}/tests/lsp_editor_integration_tests.rs +0 -0
  284. {rumdl-0.0.124 → rumdl-0.0.125}/tests/lsp_integration_tests.rs +0 -0
  285. {rumdl-0.0.124 → rumdl-0.0.125}/tests/lsp_memory_leak_tests.rs +0 -0
  286. {rumdl-0.0.124 → rumdl-0.0.125}/tests/lsp_tests.rs +0 -0
  287. {rumdl-0.0.124 → rumdl-0.0.125}/tests/malformed_markdown_stress_tests.rs +0 -0
  288. {rumdl-0.0.124 → rumdl-0.0.125}/tests/markdownlint_cli_integration.rs +0 -0
  289. {rumdl-0.0.124 → rumdl-0.0.125}/tests/markdownlint_config_test.rs +0 -0
  290. {rumdl-0.0.124 → rumdl-0.0.125}/tests/markdownlintignore_test.rs +0 -0
  291. {rumdl-0.0.124 → rumdl-0.0.125}/tests/md013_reflow_integration_test.rs +0 -0
  292. {rumdl-0.0.124 → rumdl-0.0.125}/tests/md051_issue_39_regression_test.rs +0 -0
  293. {rumdl-0.0.124 → rumdl-0.0.125}/tests/nested_code_block_test.rs +0 -0
  294. {rumdl-0.0.124 → rumdl-0.0.125}/tests/output_format_integration_tests.rs +0 -0
  295. {rumdl-0.0.124 → rumdl-0.0.125}/tests/output_format_tests.rs +0 -0
  296. {rumdl-0.0.124 → rumdl-0.0.125}/tests/perf_check.rs +0 -0
  297. {rumdl-0.0.124 → rumdl-0.0.125}/tests/performance_validation_tests.rs +0 -0
  298. {rumdl-0.0.124 → rumdl-0.0.125}/tests/pyproject_config_tests.rs +0 -0
  299. {rumdl-0.0.124 → rumdl-0.0.125}/tests/python_bindings_test.rs +0 -0
  300. {rumdl-0.0.124 → rumdl-0.0.125}/tests/real_world_repository_tests.rs +0 -0
  301. {rumdl-0.0.124 → rumdl-0.0.125}/tests/regression_prevention_tests.rs +0 -0
  302. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/emphasis_edge_cases_test.rs +0 -0
  303. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/heading_edge_cases_test.rs +0 -0
  304. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/inline_content_edge_cases_test.rs +0 -0
  305. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/link_edge_cases_test.rs +0 -0
  306. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/list_rules_integration_test.rs +0 -0
  307. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md001_test.rs +0 -0
  308. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md001_unicode_test.rs +0 -0
  309. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md002_test.rs +0 -0
  310. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md003_test.rs +0 -0
  311. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md004_test.rs +0 -0
  312. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md005_test.rs +0 -0
  313. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md005_unicode_test.rs +0 -0
  314. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md006_test.rs +0 -0
  315. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md006_unicode_test.rs +0 -0
  316. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md007_test.rs +0 -0
  317. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md009_test.rs +0 -0
  318. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md010_test.rs +0 -0
  319. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md011_test.rs +0 -0
  320. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md012_test.rs +0 -0
  321. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md013_test.rs +0 -0
  322. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md014_test.rs +0 -0
  323. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md018_test.rs +0 -0
  324. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md019_test.rs +0 -0
  325. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md020_test.rs +0 -0
  326. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md021_test.rs +0 -0
  327. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md022_test.rs +0 -0
  328. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md023_extended_test.rs +0 -0
  329. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md023_test.rs +0 -0
  330. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md024_test.rs +0 -0
  331. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md025_test.rs +0 -0
  332. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md026_kramdown_test.rs +0 -0
  333. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md026_test.rs +0 -0
  334. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md027_test.rs +0 -0
  335. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md028_test.rs +0 -0
  336. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md029_code_block_separation_test.rs +0 -0
  337. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md029_issue42_test.rs +0 -0
  338. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md029_pathological_edge_cases_test.rs +0 -0
  339. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md029_unicode_test.rs +0 -0
  340. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md030_test.rs +0 -0
  341. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md031_kramdown_test.rs +0 -0
  342. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md031_test.rs +0 -0
  343. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md032_test.rs +0 -0
  344. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md033_extended_test.rs +0 -0
  345. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md033_kramdown_test.rs +0 -0
  346. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md033_test.rs +0 -0
  347. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md034_ipv6_test.rs +0 -0
  348. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md034_test.rs +0 -0
  349. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md035_test.rs +0 -0
  350. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md036_test.rs +0 -0
  351. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md037_kramdown_test.rs +0 -0
  352. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md037_test.rs +0 -0
  353. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md038_nested_backticks_test.rs +0 -0
  354. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md038_test.rs +0 -0
  355. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md039_test.rs +0 -0
  356. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md040_test.rs +0 -0
  357. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md041_test.rs +0 -0
  358. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md042_test.rs +0 -0
  359. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md043_test.rs +0 -0
  360. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md044_test.rs +0 -0
  361. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md045_test.rs +0 -0
  362. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md046_test.rs +0 -0
  363. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md047_test.rs +0 -0
  364. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md048_test.rs +0 -0
  365. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md049_test.rs +0 -0
  366. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md050_test.rs +0 -0
  367. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md051_comprehensive_test.rs +0 -0
  368. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md051_critical_edge_cases_test.rs +0 -0
  369. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md051_edge_cases_test.rs +0 -0
  370. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md051_issue_39_regression_test.rs +0 -0
  371. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md051_performance_edge_cases_test.rs +0 -0
  372. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md051_property_based_test.rs +0 -0
  373. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md051_regression_prevention_test.rs +0 -0
  374. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md051_test.rs +0 -0
  375. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md051_unicode_security_test.rs +0 -0
  376. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md052_test.rs +0 -0
  377. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md053_additional_test.rs +0 -0
  378. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md053_proptest.rs +0 -0
  379. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md053_test.rs +0 -0
  380. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md054_test.rs +0 -0
  381. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md054_unicode_test.rs +0 -0
  382. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md055_test.rs +0 -0
  383. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md056_test.rs +0 -0
  384. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md057_test.rs +0 -0
  385. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md058_kramdown_test.rs +0 -0
  386. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules/md058_test.rs +0 -0
  387. {rumdl-0.0.124 → rumdl-0.0.125}/tests/rules_mod_test.rs +0 -0
  388. {rumdl-0.0.124 → rumdl-0.0.125}/tests/skip_context_tests.rs +0 -0
  389. {rumdl-0.0.124 → rumdl-0.0.125}/tests/test_underscore_edge_cases.rs +0 -0
  390. {rumdl-0.0.124 → rumdl-0.0.125}/tests/thread_safety_tests.rs +0 -0
  391. {rumdl-0.0.124 → rumdl-0.0.125}/tests/unfixable_rules_test.rs +0 -0
  392. {rumdl-0.0.124 → rumdl-0.0.125}/tests/unicode_edge_case_tests.rs +0 -0
  393. {rumdl-0.0.124 → rumdl-0.0.125}/tests/utils/blockquote_utils_test.rs +0 -0
  394. {rumdl-0.0.124 → rumdl-0.0.125}/tests/utils/code_block_utils_extended_test.rs +0 -0
  395. {rumdl-0.0.124 → rumdl-0.0.125}/tests/utils/code_block_utils_test.rs +0 -0
  396. {rumdl-0.0.124 → rumdl-0.0.125}/tests/utils/core_utils_test.rs +0 -0
  397. {rumdl-0.0.124 → rumdl-0.0.125}/tests/utils/front_matter_utils_test.rs +0 -0
  398. {rumdl-0.0.124 → rumdl-0.0.125}/tests/utils/line_index_test.rs +0 -0
  399. {rumdl-0.0.124 → rumdl-0.0.125}/tests/utils/mod.rs +0 -0
  400. {rumdl-0.0.124 → rumdl-0.0.125}/tests/utils_markdown_edge_cases.rs +0 -0
  401. {rumdl-0.0.124 → rumdl-0.0.125}/tests/utils_tests.rs +0 -0
  402. {rumdl-0.0.124 → rumdl-0.0.125}/tests/vscode_extension_fixes.rs +0 -0
  403. {rumdl-0.0.124 → rumdl-0.0.125}/tests/vscode_test.rs +0 -0
  404. {rumdl-0.0.124 → rumdl-0.0.125}/tests/vscode_tests.rs +0 -0
  405. {rumdl-0.0.124 → rumdl-0.0.125}/tests/vscode_windows_comprehensive_test.rs +0 -0
  406. {rumdl-0.0.124 → rumdl-0.0.125}/tests/vscode_windows_test.rs +0 -0
@@ -7,6 +7,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.0.125] - 2025-08-22
11
+
12
+ ### Added
13
+ - **CLI**: Added `--stdin-filename` flag for better stdin processing
14
+ - Specify filename when reading from stdin for better error messages
15
+ - Enables MD057 (relative link checking) to work correctly with stdin
16
+ - Provides proper filename context in all output formats
17
+ - Improves editor integration capabilities
18
+
19
+ ### Fixed
20
+ - **CLI**: Fixed `rumdl fmt -` to output original content when no issues found
21
+ - Previously incorrectly output "No issues found in stdin" message
22
+ - Now correctly outputs the original content unchanged
23
+ - **MD029**: Corrected list continuity detection and fix functionality
24
+ - Improved handling of sublists and indented content
25
+ - Better markdownlint compatibility
26
+
27
+ ### Changed
28
+ - **Build**: Added mise version validation to pre-release checks
29
+ - Prevents CI failures from non-existent mise versions
30
+
10
31
  ## [0.0.124] - 2025-08-22
11
32
 
12
33
  ### Added
@@ -436,7 +457,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
436
457
 
437
458
  - Initial implementation of remaining rules for markdownlint parity
438
459
 
439
- [Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.124...HEAD
460
+ [Unreleased]: https://github.com/rvben/rumdl/compare/v0.0.125...HEAD
461
+ [0.0.125]: https://github.com/rvben/rumdl/compare/v0.0.124...v0.0.125
440
462
  [0.0.124]: https://github.com/rvben/rumdl/compare/v0.0.123...v0.0.124
441
463
  [0.0.123]: https://github.com/rvben/rumdl/compare/v0.0.122...v0.0.123
442
464
  [0.0.122]: https://github.com/rvben/rumdl/compare/v0.0.121...v0.0.122
@@ -1493,7 +1493,7 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
1493
1493
 
1494
1494
  [[package]]
1495
1495
  name = "rumdl"
1496
- version = "0.0.124"
1496
+ version = "0.0.125"
1497
1497
  dependencies = [
1498
1498
  "anyhow",
1499
1499
  "assert_cmd",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "rumdl"
3
- version = "0.0.124"
3
+ version = "0.0.125"
4
4
  edition = "2024"
5
5
  rust-version = "1.89.0"
6
6
  description = "A fast Markdown linter written in Rust (Ru(st) MarkDown Linter)"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rumdl
3
- Version: 0.0.124
3
+ Version: 0.0.125
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -264,6 +264,9 @@ echo "# Title " | rumdl fmt -
264
264
 
265
265
  # Format clipboard content (macOS example)
266
266
  pbpaste | rumdl fmt - | pbcopy
267
+
268
+ # Provide filename context for better error messages (useful for editor integrations)
269
+ cat README.md | rumdl check - --stdin-filename README.md
267
270
  ```
268
271
 
269
272
  ### Editor Integration
@@ -235,6 +235,9 @@ echo "# Title " | rumdl fmt -
235
235
 
236
236
  # Format clipboard content (macOS example)
237
237
  pbpaste | rumdl fmt - | pbcopy
238
+
239
+ # Provide filename context for better error messages (useful for editor integrations)
240
+ cat README.md | rumdl check - --stdin-filename README.md
238
241
  ```
239
242
 
240
243
  ### Editor Integration
@@ -134,6 +134,26 @@ fi
134
134
  echo "12. Testing cargo publish (dry run)..."
135
135
  run_check "Cargo publish dry-run" "cargo publish --dry-run --locked"
136
136
 
137
+ # 13. Check mise version in GitHub Actions workflow
138
+ echo "13. Checking mise version in CI workflow..."
139
+ MISE_VERSION=$(grep -A2 "mise-action@v2" .github/workflows/release.yml | grep "version:" | sed 's/.*version: *//' | tr -d ' ')
140
+ if [ -n "$MISE_VERSION" ]; then
141
+ echo -n "Verifying mise version $MISE_VERSION exists... "
142
+ # Check if the release exists on GitHub
143
+ if curl -s -f "https://api.github.com/repos/jdx/mise/releases/tags/v${MISE_VERSION}" > /dev/null 2>&1; then
144
+ echo -e "${GREEN}✓${NC} mise version $MISE_VERSION exists"
145
+ else
146
+ echo -e "${RED}✗${NC}"
147
+ echo -e "${RED}mise version $MISE_VERSION does not exist on GitHub!${NC}"
148
+ echo "Check available versions at: https://github.com/jdx/mise/releases"
149
+ LATEST_MISE=$(curl -s https://api.github.com/repos/jdx/mise/releases/latest | grep '"tag_name"' | cut -d'"' -f4 | sed 's/^v//')
150
+ echo "Latest available version: $LATEST_MISE"
151
+ FAILED=1
152
+ fi
153
+ else
154
+ echo -e "${YELLOW}⚠${NC} No explicit mise version found in workflow (will use latest)"
155
+ fi
156
+
137
157
  echo ""
138
158
  echo "====================================="
139
159
  if [ $FAILED -eq 0 ]; then
@@ -2300,7 +2300,7 @@ fn has_meaningful_content_between(current: &ListBlock, next: &ListBlock, lines:
2300
2300
 
2301
2301
  // Check if this code block is properly indented as list continuation
2302
2302
  let min_continuation_indent = if current.is_ordered {
2303
- current.nesting_level + current.max_marker_width
2303
+ current.nesting_level + current.max_marker_width + 1 // +1 for space after marker
2304
2304
  } else {
2305
2305
  current.nesting_level + 2
2306
2306
  };
@@ -279,6 +279,10 @@ struct CheckArgs {
279
279
  #[arg(long, help = "Read from stdin instead of files")]
280
280
  stdin: bool,
281
281
 
282
+ /// Filename to use for stdin input (for context and error messages)
283
+ #[arg(long, help = "Filename to use when reading from stdin (e.g., README.md)")]
284
+ stdin_filename: Option<String>,
285
+
282
286
  /// Output linting results to stderr instead of stdout
283
287
  #[arg(long, help = "Output diagnostics to stderr instead of stdout")]
284
288
  stderr: bool,
@@ -1824,6 +1828,17 @@ fn process_stdin(rules: &[Box<dyn Rule>], args: &CheckArgs, config: &rumdl_confi
1824
1828
  exit::violations_found();
1825
1829
  }
1826
1830
 
1831
+ // Determine the filename to use for display and context
1832
+ let display_filename = args.stdin_filename.as_deref().unwrap_or("<stdin>");
1833
+
1834
+ // Set RUMDL_FILE_PATH if stdin-filename is provided
1835
+ // This allows rules like MD057 to know the file location for relative path checking
1836
+ if let Some(ref filename) = args.stdin_filename {
1837
+ unsafe {
1838
+ std::env::set_var("RUMDL_FILE_PATH", filename);
1839
+ }
1840
+ }
1841
+
1827
1842
  // Create a lint context for the stdin content
1828
1843
  let ctx = LintContext::new(&content);
1829
1844
  let mut all_warnings = Vec::new();
@@ -1854,37 +1869,49 @@ fn process_stdin(rules: &[Box<dyn Rule>], args: &CheckArgs, config: &rumdl_confi
1854
1869
  let has_issues = !all_warnings.is_empty();
1855
1870
 
1856
1871
  // Apply fixes if requested
1857
- if args._fix && has_issues {
1858
- let mut fixed_content = content.clone();
1859
- let warnings_fixed = apply_fixes_stdin(rules, &all_warnings, &mut fixed_content, quiet, config);
1860
-
1861
- // Output the fixed content to stdout
1862
- print!("{fixed_content}");
1863
-
1864
- // Re-check the fixed content to see if any issues remain
1865
- let fixed_ctx = LintContext::new(&fixed_content);
1866
- let mut remaining_warnings = Vec::new();
1867
- for rule in rules {
1868
- if let Ok(warnings) = rule.check(&fixed_ctx) {
1869
- remaining_warnings.extend(warnings);
1872
+ if args._fix {
1873
+ if has_issues {
1874
+ let mut fixed_content = content.clone();
1875
+ let warnings_fixed = apply_fixes_stdin(rules, &all_warnings, &mut fixed_content, quiet, config);
1876
+
1877
+ // Output the fixed content to stdout
1878
+ print!("{fixed_content}");
1879
+
1880
+ // Re-check the fixed content to see if any issues remain
1881
+ let fixed_ctx = LintContext::new(&fixed_content);
1882
+ let mut remaining_warnings = Vec::new();
1883
+ for rule in rules {
1884
+ if let Ok(warnings) = rule.check(&fixed_ctx) {
1885
+ remaining_warnings.extend(warnings);
1886
+ }
1870
1887
  }
1871
- }
1872
1888
 
1873
- // Only show diagnostics to stderr if not in quiet mode
1874
- if !quiet && !remaining_warnings.is_empty() {
1875
- let formatter = output_format.create_formatter();
1876
- let formatted = formatter.format_warnings(&remaining_warnings, "<stdin>");
1877
- eprintln!("{formatted}");
1878
- eprintln!(
1879
- "\n{} issue(s) fixed, {} issue(s) remaining",
1880
- warnings_fixed,
1881
- remaining_warnings.len()
1882
- );
1889
+ // Only show diagnostics to stderr if not in quiet mode
1890
+ if !quiet && !remaining_warnings.is_empty() {
1891
+ let formatter = output_format.create_formatter();
1892
+ let formatted = formatter.format_warnings(&remaining_warnings, display_filename);
1893
+ eprintln!("{formatted}");
1894
+ eprintln!(
1895
+ "\n{} issue(s) fixed, {} issue(s) remaining",
1896
+ warnings_fixed,
1897
+ remaining_warnings.len()
1898
+ );
1899
+ }
1900
+
1901
+ // Exit with success if all issues were fixed, error if issues remain
1902
+ if !remaining_warnings.is_empty() {
1903
+ exit::violations_found();
1904
+ }
1905
+ } else {
1906
+ // No issues found, output the original content unchanged
1907
+ print!("{content}");
1883
1908
  }
1884
1909
 
1885
- // Exit with success if all issues were fixed, error if issues remain
1886
- if !remaining_warnings.is_empty() {
1887
- exit::violations_found();
1910
+ // Clean up environment variable
1911
+ if args.stdin_filename.is_some() {
1912
+ unsafe {
1913
+ std::env::remove_var("RUMDL_FILE_PATH");
1914
+ }
1888
1915
  }
1889
1916
  return;
1890
1917
  }
@@ -1895,7 +1922,7 @@ fn process_stdin(rules: &[Box<dyn Rule>], args: &CheckArgs, config: &rumdl_confi
1895
1922
  output_format,
1896
1923
  OutputFormat::Json | OutputFormat::GitLab | OutputFormat::Sarif | OutputFormat::Junit
1897
1924
  ) {
1898
- let file_warnings = vec![("<stdin>".to_string(), all_warnings)];
1925
+ let file_warnings = vec![(display_filename.to_string(), all_warnings)];
1899
1926
  let output = match output_format {
1900
1927
  OutputFormat::Json => rumdl::output::formatters::json::format_all_warnings_as_json(&file_warnings),
1901
1928
  OutputFormat::GitLab => rumdl::output::formatters::gitlab::format_gitlab_report(&file_warnings),
@@ -1911,7 +1938,7 @@ fn process_stdin(rules: &[Box<dyn Rule>], args: &CheckArgs, config: &rumdl_confi
1911
1938
  // Use formatter for line-by-line output
1912
1939
  let formatter = output_format.create_formatter();
1913
1940
  if !all_warnings.is_empty() {
1914
- let formatted = formatter.format_warnings(&all_warnings, "<stdin>");
1941
+ let formatted = formatter.format_warnings(&all_warnings, display_filename);
1915
1942
  output_writer.writeln(&formatted).unwrap_or_else(|e| {
1916
1943
  eprintln!("Error writing output: {e}");
1917
1944
  });
@@ -1921,14 +1948,27 @@ fn process_stdin(rules: &[Box<dyn Rule>], args: &CheckArgs, config: &rumdl_confi
1921
1948
  if !quiet {
1922
1949
  if has_issues {
1923
1950
  output_writer
1924
- .writeln(&format!("\nFound {} issue(s) in stdin", all_warnings.len()))
1951
+ .writeln(&format!(
1952
+ "\nFound {} issue(s) in {}",
1953
+ all_warnings.len(),
1954
+ display_filename
1955
+ ))
1925
1956
  .ok();
1926
1957
  } else {
1927
- output_writer.writeln("No issues found in stdin").ok();
1958
+ output_writer
1959
+ .writeln(&format!("No issues found in {display_filename}"))
1960
+ .ok();
1928
1961
  }
1929
1962
  }
1930
1963
  }
1931
1964
 
1965
+ // Clean up environment variable
1966
+ if args.stdin_filename.is_some() {
1967
+ unsafe {
1968
+ std::env::remove_var("RUMDL_FILE_PATH");
1969
+ }
1970
+ }
1971
+
1932
1972
  // Exit with error code if issues found
1933
1973
  if has_issues {
1934
1974
  exit::violations_found();
@@ -5,17 +5,11 @@ use crate::rule::{Fix, LintError, LintResult, LintWarning, Rule, RuleCategory, S
5
5
  use crate::rule_config_serde::RuleConfig;
6
6
  use crate::utils::document_structure::{DocumentStructure, DocumentStructureExtensions};
7
7
  use crate::utils::regex_cache::ORDERED_LIST_MARKER_REGEX;
8
- use lazy_static::lazy_static;
9
- use regex::Regex;
10
8
  use toml;
11
9
 
12
10
  mod md029_config;
13
11
  pub use md029_config::{ListStyle, MD029Config};
14
12
 
15
- lazy_static! {
16
- static ref FIX_LINE_REGEX: Regex = Regex::new(r"^(\s*)\d+(\.\s.*)$").unwrap();
17
- }
18
-
19
13
  #[derive(Debug, Clone, Default)]
20
14
  pub struct MD029OrderedListPrefix {
21
15
  config: MD029Config,
@@ -32,13 +26,6 @@ impl MD029OrderedListPrefix {
32
26
  Self { config }
33
27
  }
34
28
 
35
- #[inline]
36
- fn get_list_number(line: &str) -> Option<usize> {
37
- ORDERED_LIST_MARKER_REGEX
38
- .captures(line)
39
- .and_then(|cap| cap[2].parse::<usize>().ok())
40
- }
41
-
42
29
  #[inline]
43
30
  fn parse_marker_number(marker: &str) -> Option<usize> {
44
31
  // Handle marker format like "1." or "1"
@@ -59,13 +46,6 @@ impl MD029OrderedListPrefix {
59
46
  ListStyle::Ordered0 => index,
60
47
  }
61
48
  }
62
-
63
- #[inline]
64
- fn fix_line(&self, line: &str, expected_num: usize) -> String {
65
- FIX_LINE_REGEX
66
- .replace(line, format!("${{1}}{}{}", expected_num, "$2"))
67
- .to_string()
68
- }
69
49
  }
70
50
 
71
51
  impl Rule for MD029OrderedListPrefix {
@@ -158,121 +138,53 @@ impl Rule for MD029OrderedListPrefix {
158
138
  }
159
139
 
160
140
  fn fix(&self, ctx: &crate::lint_context::LintContext) -> Result<String, LintError> {
161
- let content = ctx.content;
162
- let mut result = String::new();
163
- let mut indent_stack: Vec<(usize, usize)> = Vec::new(); // (indent, index)
164
- let lines: Vec<&str> = content.lines().collect();
165
- let mut in_code_fence = false;
166
-
167
- for line in lines.iter() {
168
- let trimmed = line.trim();
169
-
170
- // Track code fences
171
- if trimmed.starts_with("```") || trimmed.starts_with("~~~") {
172
- in_code_fence = !in_code_fence;
173
- result.push_str(line);
174
- result.push('\n');
175
- continue;
176
- }
141
+ // Use the same logic as check() - just apply the fixes from warnings
142
+ let warnings = self.check(ctx)?;
143
+
144
+ if warnings.is_empty() {
145
+ // No changes needed
146
+ return Ok(ctx.content.to_string());
147
+ }
177
148
 
178
- // Skip if in code fence
179
- if in_code_fence {
180
- result.push_str(line);
181
- result.push('\n');
149
+ // Collect fixes and sort by position
150
+ // Only apply MD029 fixes (numbering), not MD029-style fixes (indentation)
151
+ let mut fixes: Vec<&Fix> = Vec::new();
152
+ for warning in &warnings {
153
+ // Skip MD029-style warnings (lazy continuation indentation)
154
+ if warning.rule_name == Some("MD029-style") {
182
155
  continue;
183
156
  }
184
- if let Some(_current_num) = Self::get_list_number(line) {
185
- let indent = line.chars().take_while(|c| c.is_whitespace()).count();
186
- // Pop stack if current indent is less than stack top
187
- while let Some(&(top_indent, _)) = indent_stack.last() {
188
- if indent < top_indent {
189
- indent_stack.pop();
190
- } else {
191
- break;
192
- }
193
- }
194
- // If indent matches stack top, increment index
195
- if let Some(&mut (top_indent, ref mut idx)) = indent_stack.last_mut()
196
- && indent == top_indent
197
- {
198
- let expected_num = self.get_expected_number(*idx);
199
- let fixed_line = self.fix_line(line, expected_num);
200
- result.push_str(&fixed_line);
201
- result.push('\n');
202
- *idx += 1;
203
- continue;
204
- }
205
- // New deeper indent or first item
206
- indent_stack.push((indent, 0));
207
- let expected_num = self.get_expected_number(0);
208
- let fixed_line = self.fix_line(line, expected_num);
209
- result.push_str(&fixed_line);
210
- result.push('\n');
211
- // Increment the new top
212
- if let Some(&mut (_, ref mut idx)) = indent_stack.last_mut() {
213
- *idx += 1;
214
- }
215
- } else if !line.trim().is_empty() {
216
- // Check if the line is indented enough to be part of a list item
217
- let line_indent = line.chars().take_while(|c| c.is_whitespace()).count();
218
- let is_continuation = indent_stack
219
- .last()
220
- .map(|&(list_indent, _)| {
221
- // Allow lazy continuation (0-2 spaces) or proper continuation (3+ spaces)
222
- line_indent <= 2 || line_indent >= list_indent + 3
223
- })
224
- .unwrap_or(false);
225
-
226
- if is_continuation {
227
- if line_indent <= 2 && !indent_stack.is_empty() {
228
- // Check if this line is itself a list item or heading
229
- let trimmed = line.trim();
230
- let is_list_item = trimmed.starts_with("* ")
231
- || trimmed.starts_with("- ")
232
- || trimmed.starts_with("+ ")
233
- || (trimmed.len() > 2
234
- && trimmed.chars().next().unwrap().is_ascii_digit()
235
- && trimmed.contains(". "));
236
-
237
- // Check if this is a heading (ATX style)
238
- let is_heading = trimmed.starts_with('#')
239
- && trimmed.len() > 1
240
- && (trimmed.chars().nth(1) == Some(' ') || trimmed.chars().nth(1) == Some('#'));
241
-
242
- if !is_list_item && !is_heading {
243
- // This is a lazy continuation - fix it by adding proper indentation
244
- let (list_indent, _) = indent_stack.last().unwrap();
245
- let proper_indent = " ".repeat(list_indent + 3);
246
- result.push_str(&proper_indent);
247
- result.push_str(line.trim_start());
248
- result.push('\n');
249
- } else {
250
- // This is a list item or heading, not a continuation - it breaks the list
251
- indent_stack.clear();
252
- result.push_str(line);
253
- result.push('\n');
254
- }
255
- } else {
256
- // This line is properly indented
257
- result.push_str(line);
258
- result.push('\n');
259
- }
260
- } else {
261
- // Non-list, non-blank line breaks the list
262
- indent_stack.clear();
263
- result.push_str(line);
264
- result.push('\n');
265
- }
266
- } else {
267
- // Blank line - don't clear the stack, as lists can have blank lines within them
268
- result.push_str(line);
269
- result.push('\n');
157
+ if let Some(ref fix) = warning.fix {
158
+ fixes.push(fix);
159
+ }
160
+ }
161
+ fixes.sort_by_key(|f| f.range.start);
162
+
163
+ let mut result = String::new();
164
+ let mut last_pos = 0;
165
+ let content_bytes = ctx.content.as_bytes();
166
+
167
+ for fix in fixes {
168
+ // Add content before the fix
169
+ if last_pos < fix.range.start {
170
+ let chunk = &content_bytes[last_pos..fix.range.start];
171
+ result.push_str(
172
+ std::str::from_utf8(chunk).map_err(|_| LintError::InvalidInput("Invalid UTF-8".to_string()))?,
173
+ );
270
174
  }
175
+ // Add the replacement
176
+ result.push_str(&fix.replacement);
177
+ last_pos = fix.range.end;
271
178
  }
272
- // Remove trailing newline if the original content didn't have one
273
- if !content.ends_with('\n') && result.ends_with('\n') {
274
- result.pop();
179
+
180
+ // Add remaining content
181
+ if last_pos < content_bytes.len() {
182
+ let chunk = &content_bytes[last_pos..];
183
+ result.push_str(
184
+ std::str::from_utf8(chunk).map_err(|_| LintError::InvalidInput("Invalid UTF-8".to_string()))?,
185
+ );
275
186
  }
187
+
276
188
  Ok(result)
277
189
  }
278
190
 
@@ -671,7 +583,14 @@ impl MD029OrderedListPrefix {
671
583
  if actual_num != expected_num {
672
584
  // Calculate byte position for the fix
673
585
  let marker_start = line_info.byte_offset + list_item.marker_column;
674
- let number_len = actual_num.to_string().len();
586
+ // Use the actual marker length (e.g., "05" is 2 chars, not 1)
587
+ let number_len = if let Some(dot_pos) = list_item.marker.find('.') {
588
+ dot_pos // Length up to the dot
589
+ } else if let Some(paren_pos) = list_item.marker.find(')') {
590
+ paren_pos // Length up to the paren
591
+ } else {
592
+ list_item.marker.len() // Fallback to full marker length
593
+ };
675
594
 
676
595
  warnings.push(LintWarning {
677
596
  rule_name: Some(self.name()),
@@ -1255,6 +1255,38 @@ fn test_stdin_check_without_fix() {
1255
1255
  assert!(!output.status.success());
1256
1256
  }
1257
1257
 
1258
+ #[test]
1259
+ fn test_stdin_formatting_no_issues() {
1260
+ let rumdl_exe = env!("CARGO_BIN_EXE_rumdl");
1261
+
1262
+ // Test that formatting mode outputs the original content when there are no issues
1263
+ // This was a bug where it would output "No issues found in stdin" instead
1264
+ let input = "# Clean Markdown\n\nThis markdown has no issues.\n";
1265
+ let mut cmd = Command::new(rumdl_exe);
1266
+ cmd.arg("fmt").arg("-").arg("--quiet");
1267
+ cmd.stdin(std::process::Stdio::piped());
1268
+ cmd.stdout(std::process::Stdio::piped());
1269
+ cmd.stderr(std::process::Stdio::piped());
1270
+
1271
+ let mut child = cmd.spawn().expect("Failed to spawn command");
1272
+
1273
+ // Write input to stdin
1274
+ use std::io::Write;
1275
+ let mut stdin = child.stdin.take().expect("Failed to open stdin");
1276
+ stdin.write_all(input.as_bytes()).expect("Failed to write to stdin");
1277
+ drop(stdin);
1278
+
1279
+ let output = child.wait_with_output().expect("Failed to wait for command");
1280
+ let stdout = String::from_utf8_lossy(&output.stdout);
1281
+ let stderr = String::from_utf8_lossy(&output.stderr);
1282
+
1283
+ // Should output the original content unchanged
1284
+ assert_eq!(stdout, input, "fmt should output original content when no issues found");
1285
+ // No errors should be on stderr in quiet mode
1286
+ assert_eq!(stderr, "");
1287
+ assert!(output.status.success());
1288
+ }
1289
+
1258
1290
  #[test]
1259
1291
  fn test_stdin_dash_syntax() {
1260
1292
  let rumdl_exe = env!("CARGO_BIN_EXE_rumdl");
@@ -1287,6 +1319,81 @@ fn test_stdin_dash_syntax() {
1287
1319
  assert!(stderr.contains("Found 3 issue(s)"));
1288
1320
  }
1289
1321
 
1322
+ #[test]
1323
+ fn test_stdin_filename_flag() {
1324
+ let rumdl_exe = env!("CARGO_BIN_EXE_rumdl");
1325
+
1326
+ // Test that --stdin-filename changes the displayed filename in error messages
1327
+ let input = "# Test \n\nTest paragraph ";
1328
+ let mut cmd = Command::new(rumdl_exe);
1329
+ cmd.arg("check").arg("-").arg("--stdin-filename").arg("test-file.md");
1330
+ cmd.stdin(std::process::Stdio::piped());
1331
+ cmd.stdout(std::process::Stdio::piped());
1332
+ cmd.stderr(std::process::Stdio::piped());
1333
+
1334
+ let mut child = cmd.spawn().expect("Failed to spawn command");
1335
+
1336
+ // Write input to stdin
1337
+ use std::io::Write;
1338
+ let mut stdin = child.stdin.take().expect("Failed to open stdin");
1339
+ stdin.write_all(input.as_bytes()).expect("Failed to write to stdin");
1340
+ drop(stdin);
1341
+
1342
+ let output = child.wait_with_output().expect("Failed to wait for command");
1343
+ let stdout = String::from_utf8_lossy(&output.stdout);
1344
+ let stderr = String::from_utf8_lossy(&output.stderr);
1345
+
1346
+ // Should not output content to stdout in check mode
1347
+ assert_eq!(stdout, "");
1348
+ // Should show the custom filename in error messages
1349
+ assert!(
1350
+ stderr.contains("test-file.md:1:"),
1351
+ "Error message should contain custom filename"
1352
+ );
1353
+ assert!(
1354
+ stderr.contains("test-file.md:3:"),
1355
+ "Error message should contain custom filename for line 3"
1356
+ );
1357
+ assert!(stderr.contains("in test-file.md"), "Summary should use custom filename");
1358
+ // Should still detect the issues
1359
+ assert!(stderr.contains("MD009"));
1360
+ }
1361
+
1362
+ #[test]
1363
+ fn test_stdin_filename_in_fmt_mode() {
1364
+ let rumdl_exe = env!("CARGO_BIN_EXE_rumdl");
1365
+
1366
+ // Test that --stdin-filename also works in fmt mode
1367
+ let input = "# Clean Markdown\n\nNo issues here.\n";
1368
+ let mut cmd = Command::new(rumdl_exe);
1369
+ cmd.arg("fmt")
1370
+ .arg("-")
1371
+ .arg("--stdin-filename")
1372
+ .arg("custom-file.md")
1373
+ .arg("--quiet");
1374
+ cmd.stdin(std::process::Stdio::piped());
1375
+ cmd.stdout(std::process::Stdio::piped());
1376
+ cmd.stderr(std::process::Stdio::piped());
1377
+
1378
+ let mut child = cmd.spawn().expect("Failed to spawn command");
1379
+
1380
+ // Write input to stdin
1381
+ use std::io::Write;
1382
+ let mut stdin = child.stdin.take().expect("Failed to open stdin");
1383
+ stdin.write_all(input.as_bytes()).expect("Failed to write to stdin");
1384
+ drop(stdin);
1385
+
1386
+ let output = child.wait_with_output().expect("Failed to wait for command");
1387
+ let stdout = String::from_utf8_lossy(&output.stdout);
1388
+ let stderr = String::from_utf8_lossy(&output.stderr);
1389
+
1390
+ // In fmt mode with no issues, should output the original content
1391
+ assert_eq!(stdout, input, "Should output original content");
1392
+ // No errors should be on stderr in quiet mode
1393
+ assert_eq!(stderr, "");
1394
+ assert!(output.status.success());
1395
+ }
1396
+
1290
1397
  #[test]
1291
1398
  fn test_fmt_dash_syntax() {
1292
1399
  let rumdl_exe = env!("CARGO_BIN_EXE_rumdl");