panache-cli 3.0.1__tar.gz → 3.0.2__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.
Files changed (293) hide show
  1. {panache_cli-3.0.1 → panache_cli-3.0.2}/Cargo.lock +26 -26
  2. {panache_cli-3.0.1 → panache_cli-3.0.2}/Cargo.toml +3 -3
  3. {panache_cli-3.0.1 → panache_cli-3.0.2}/PKG-INFO +1 -1
  4. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/CHANGELOG.md +8 -0
  5. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/Cargo.toml +2 -2
  6. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/core.rs +1 -1
  7. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/lists.rs +117 -0
  8. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/CHANGELOG.md +6 -0
  9. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/Cargo.toml +1 -1
  10. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/block_dispatcher.rs +27 -1
  11. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/tables.rs +44 -1
  12. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/tests/blockquotes.rs +7 -0
  13. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/core.rs +25 -0
  14. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/config.rs +18 -0
  15. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/main.rs +1 -1
  16. {panache_cli-3.0.1 → panache_cli-3.0.2}/LICENSE +0 -0
  17. {panache_cli-3.0.1 → panache_cli-3.0.2}/README.md +0 -0
  18. {panache_cli-3.0.1 → panache_cli-3.0.2}/assets/quarto-schema/schema.json +0 -0
  19. {panache_cli-3.0.1 → panache_cli-3.0.2}/build.rs +0 -0
  20. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/README.md +0 -0
  21. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/config.rs +0 -0
  22. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/directives.rs +0 -0
  23. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/blockquotes.rs +0 -0
  24. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/code_blocks.rs +0 -0
  25. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/fenced_divs.rs +0 -0
  26. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/hashpipe.rs +0 -0
  27. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/headings.rs +0 -0
  28. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/indent_utils.rs +0 -0
  29. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/inline.rs +0 -0
  30. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/inline_layout.rs +0 -0
  31. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/math/STYLE.md +0 -0
  32. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/math/linebreak.rs +0 -0
  33. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/math/operators.rs +0 -0
  34. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/math/render.rs +0 -0
  35. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/math.rs +0 -0
  36. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/metadata.rs +0 -0
  37. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/paragraphs.rs +0 -0
  38. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/sentence_wrap.rs +0 -0
  39. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/shortcodes.rs +0 -0
  40. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/smart.rs +0 -0
  41. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/tables.rs +0 -0
  42. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/utils.rs +0 -0
  43. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/yaml/STYLE.md +0 -0
  44. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/yaml/block_map.rs +0 -0
  45. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/yaml/block_sequence.rs +0 -0
  46. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/yaml/document.rs +0 -0
  47. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/yaml/flow.rs +0 -0
  48. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/yaml/options.rs +0 -0
  49. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/yaml/scalar.rs +0 -0
  50. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter/yaml.rs +0 -0
  51. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/formatter.rs +0 -0
  52. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/lib.rs +0 -0
  53. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/parser.rs +0 -0
  54. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/syntax.rs +0 -0
  55. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/utils.rs +0 -0
  56. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-formatter/src/yaml_engine.rs +0 -0
  57. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/README.md +0 -0
  58. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/build.rs +0 -0
  59. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/grid_layout.rs +0 -0
  60. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/lib.rs +0 -0
  61. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/options.rs +0 -0
  62. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/pandoc_ast.rs +0 -0
  63. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/admonitions.rs +0 -0
  64. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/blockquotes.rs +0 -0
  65. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/code_blocks.rs +0 -0
  66. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/container_prefix.rs +0 -0
  67. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/definition_lists.rs +0 -0
  68. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/fenced_divs.rs +0 -0
  69. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/figures.rs +0 -0
  70. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/headings.rs +0 -0
  71. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/horizontal_rules.rs +0 -0
  72. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/html_blocks.rs +0 -0
  73. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/indented_code.rs +0 -0
  74. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/latex_envs.rs +0 -0
  75. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/line_blocks.rs +0 -0
  76. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/lists.rs +0 -0
  77. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/metadata.rs +0 -0
  78. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/myst_directives.rs +0 -0
  79. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/myst_targets.rs +0 -0
  80. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/paragraphs.rs +0 -0
  81. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/raw_blocks.rs +0 -0
  82. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/reference_links.rs +0 -0
  83. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/tests/blanklines.rs +0 -0
  84. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/tests/code_blocks.rs +0 -0
  85. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/tests/definition_lists.rs +0 -0
  86. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/tests/headings.rs +0 -0
  87. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/tests/helpers.rs +0 -0
  88. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/tests/lists.rs +0 -0
  89. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/tests/losslessness.rs +0 -0
  90. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks/tests/metadata_guards.rs +0 -0
  91. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/blocks.rs +0 -0
  92. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/diagnostics.rs +0 -0
  93. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/bookdown.rs +0 -0
  94. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/bracketed_spans.rs +0 -0
  95. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/citations.rs +0 -0
  96. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/code_spans.rs +0 -0
  97. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/core.rs +0 -0
  98. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/emoji.rs +0 -0
  99. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/escapes.rs +0 -0
  100. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/inline_executable.rs +0 -0
  101. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/inline_footnotes.rs +0 -0
  102. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/inline_html.rs +0 -0
  103. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/inline_ir.rs +0 -0
  104. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/latex.rs +0 -0
  105. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/links.rs +0 -0
  106. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/mark.rs +0 -0
  107. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/math.rs +0 -0
  108. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/myst_roles.rs +0 -0
  109. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/myst_substitutions.rs +0 -0
  110. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/native_spans.rs +0 -0
  111. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/raw_inline.rs +0 -0
  112. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/refdef_map.rs +0 -0
  113. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/shortcodes.rs +0 -0
  114. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/sink.rs +0 -0
  115. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/strikeout.rs +0 -0
  116. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/subscript.rs +0 -0
  117. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/superscript.rs +0 -0
  118. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/svelte.rs +0 -0
  119. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/tests.rs +0 -0
  120. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/uri-schemes.csv +0 -0
  121. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines/wikilinks.rs +0 -0
  122. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/inlines.rs +0 -0
  123. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/math.rs +0 -0
  124. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/utils/attributes.rs +0 -0
  125. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/utils/chunk_options.rs +0 -0
  126. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/utils/container_stack.rs +0 -0
  127. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/utils/continuation.rs +0 -0
  128. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/utils/helpers.rs +0 -0
  129. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/utils/inline_emission.rs +0 -0
  130. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/utils/list_item_buffer.rs +0 -0
  131. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/utils/marker_utils.rs +0 -0
  132. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/utils/text_buffer.rs +0 -0
  133. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/utils/tree_copy.rs +0 -0
  134. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/utils/yaml_regions.rs +0 -0
  135. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/utils.rs +0 -0
  136. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/yaml/cooking.rs +0 -0
  137. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/yaml/events.rs +0 -0
  138. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/yaml/model.rs +0 -0
  139. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/yaml/parser.rs +0 -0
  140. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/yaml/profile.rs +0 -0
  141. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/yaml/scanner.rs +0 -0
  142. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/yaml/validator.rs +0 -0
  143. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser/yaml.rs +0 -0
  144. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/parser.rs +0 -0
  145. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/range_utils.rs +0 -0
  146. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax/alerts.rs +0 -0
  147. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax/ast.rs +0 -0
  148. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax/attributes.rs +0 -0
  149. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax/block_quotes.rs +0 -0
  150. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax/blocks.rs +0 -0
  151. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax/chunk_options.rs +0 -0
  152. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax/citations.rs +0 -0
  153. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax/code_blocks.rs +0 -0
  154. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax/crossrefs.rs +0 -0
  155. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax/definitions.rs +0 -0
  156. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax/fenced_divs.rs +0 -0
  157. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax/headings.rs +0 -0
  158. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax/inlines.rs +0 -0
  159. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax/kind.rs +0 -0
  160. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax/links.rs +0 -0
  161. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax/lists.rs +0 -0
  162. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax/math.rs +0 -0
  163. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax/myst.rs +0 -0
  164. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax/raw_tex.rs +0 -0
  165. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax/references.rs +0 -0
  166. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax/shortcodes.rs +0 -0
  167. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax/tables.rs +0 -0
  168. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax/yaml.rs +0 -0
  169. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax/yaml_ast.rs +0 -0
  170. {panache_cli-3.0.1 → panache_cli-3.0.2}/crates/panache-parser/src/syntax.rs +0 -0
  171. {panache_cli-3.0.1 → panache_cli-3.0.2}/pyproject.toml +0 -0
  172. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/bib/bibtex.rs +0 -0
  173. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/bib/csl_json.rs +0 -0
  174. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/bib/csl_yaml.rs +0 -0
  175. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/bib/index.rs +0 -0
  176. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/bib/preview.rs +0 -0
  177. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/bib/ris.rs +0 -0
  178. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/bib.rs +0 -0
  179. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/bin/distill_quarto_schema.rs +0 -0
  180. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/cache.rs +0 -0
  181. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/cli.rs +0 -0
  182. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/config/formatter_presets.rs +0 -0
  183. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/config/types/schema_helpers.rs +0 -0
  184. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/config/types.rs +0 -0
  185. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/diagnostic_renderer.rs +0 -0
  186. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/directives.rs +0 -0
  187. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/external_formatters_common.rs +0 -0
  188. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/external_formatters_sync.rs +0 -0
  189. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/external_tools_common.rs +0 -0
  190. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/formatter.rs +0 -0
  191. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/includes.rs +0 -0
  192. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lib.rs +0 -0
  193. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/code_block_collector.rs +0 -0
  194. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/diagnostics.rs +0 -0
  195. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/external_linters/clippy.rs +0 -0
  196. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/external_linters/eslint.rs +0 -0
  197. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/external_linters/jarl.rs +0 -0
  198. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/external_linters/ruff.rs +0 -0
  199. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/external_linters/shellcheck.rs +0 -0
  200. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/external_linters/staticcheck.rs +0 -0
  201. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/external_linters.rs +0 -0
  202. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/external_linters_sync.rs +0 -0
  203. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/fuzzy.rs +0 -0
  204. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/index.rs +0 -0
  205. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/metadata_diagnostics.rs +0 -0
  206. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/offsets.rs +0 -0
  207. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/quarto_schema/distill.rs +0 -0
  208. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/quarto_schema/interp.rs +0 -0
  209. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/quarto_schema/model.rs +0 -0
  210. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/quarto_schema/report.rs +0 -0
  211. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/quarto_schema/value.rs +0 -0
  212. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/quarto_schema.rs +0 -0
  213. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules/adjacent_footnote_refs.rs +0 -0
  214. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules/chunk_label_spaces.rs +0 -0
  215. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules/citation_keys.rs +0 -0
  216. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules/citation_nonbreaking_space.rs +0 -0
  217. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules/consumer_divergence.rs +0 -0
  218. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules/crossref_as_link_target.rs +0 -0
  219. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules/duplicate_references.rs +0 -0
  220. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules/emoji_aliases.rs +0 -0
  221. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules/empty_list_item.rs +0 -0
  222. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules/empty_values.rs +0 -0
  223. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules/figure_crossref_captions.rs +0 -0
  224. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules/footnote_ref_in_footnote_def.rs +0 -0
  225. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules/heading_eaten_attrs.rs +0 -0
  226. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules/heading_hierarchy.rs +0 -0
  227. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules/heading_strip_comments_residue.rs +0 -0
  228. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules/html_entities.rs +0 -0
  229. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules/link_text_is_url.rs +0 -0
  230. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules/math_content.rs +0 -0
  231. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules/missing_chunk_labels.rs +0 -0
  232. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules/quarto_schema.rs +0 -0
  233. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules/stray_fenced_div_markers.rs +0 -0
  234. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules/undefined_anchor.rs +0 -0
  235. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules/undefined_references.rs +0 -0
  236. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules/unused_definitions.rs +0 -0
  237. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/rules.rs +0 -0
  238. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/runner.rs +0 -0
  239. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter/yaml_resolve.rs +0 -0
  240. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/linter.rs +0 -0
  241. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/config.rs +0 -0
  242. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/context.rs +0 -0
  243. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/conversions.rs +0 -0
  244. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/dispatch.rs +0 -0
  245. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/documents.rs +0 -0
  246. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/global_state.rs +0 -0
  247. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/code_actions.rs +0 -0
  248. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/completion.rs +0 -0
  249. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/configuration.rs +0 -0
  250. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/diagnostics.rs +0 -0
  251. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/document_highlight.rs +0 -0
  252. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/document_links.rs +0 -0
  253. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/document_symbols.rs +0 -0
  254. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/file_operations.rs +0 -0
  255. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/file_rename.rs +0 -0
  256. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/file_watcher.rs +0 -0
  257. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/folding_ranges.rs +0 -0
  258. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/footnote_conversion.rs +0 -0
  259. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/formatting.rs +0 -0
  260. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/goto_definition.rs +0 -0
  261. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/heading_link_conversion.rs +0 -0
  262. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/hover.rs +0 -0
  263. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/link_conversion.rs +0 -0
  264. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/linked_editing_range.rs +0 -0
  265. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/list_conversion.rs +0 -0
  266. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/prepare_rename.rs +0 -0
  267. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/references.rs +0 -0
  268. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/rename.rs +0 -0
  269. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/semantic_tokens.rs +0 -0
  270. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/shortcode_args.rs +0 -0
  271. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/workspace_folders.rs +0 -0
  272. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers/workspace_symbols.rs +0 -0
  273. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/handlers.rs +0 -0
  274. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/helpers.rs +0 -0
  275. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/navigation.rs +0 -0
  276. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/symbols.rs +0 -0
  277. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/task_pool.rs +0 -0
  278. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/testing.rs +0 -0
  279. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp/uri_ext.rs +0 -0
  280. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/lsp.rs +0 -0
  281. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/metadata/bibliography.rs +0 -0
  282. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/metadata/citations.rs +0 -0
  283. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/metadata/project.rs +0 -0
  284. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/metadata/references.rs +0 -0
  285. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/metadata/yaml.rs +0 -0
  286. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/metadata.rs +0 -0
  287. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/parser.rs +0 -0
  288. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/range_utils.rs +0 -0
  289. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/salsa.rs +0 -0
  290. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/syntax.rs +0 -0
  291. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/utils.rs +0 -0
  292. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/yaml_engine.rs +0 -0
  293. {panache_cli-3.0.1 → panache_cli-3.0.2}/src/yaml_regions.rs +0 -0
@@ -220,9 +220,9 @@ dependencies = [
220
220
 
221
221
  [[package]]
222
222
  name = "clap_complete"
223
- version = "4.6.7"
223
+ version = "4.6.8"
224
224
  source = "registry+https://github.com/rust-lang/crates.io-index"
225
- checksum = "db8b397918185f0161ff3d6fcaa9e4bfc09b8367caf6e1d4a2848e5477ed027b"
225
+ checksum = "b1f84a88507dbd05c695f2cb5e8558e747179134005e9893882dec964190ed89"
226
226
  dependencies = [
227
227
  "clap",
228
228
  ]
@@ -430,13 +430,13 @@ dependencies = [
430
430
 
431
431
  [[package]]
432
432
  name = "displaydoc"
433
- version = "0.2.6"
433
+ version = "0.2.7"
434
434
  source = "registry+https://github.com/rust-lang/crates.io-index"
435
- checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f"
435
+ checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8"
436
436
  dependencies = [
437
437
  "proc-macro2",
438
438
  "quote",
439
- "syn 2.0.119",
439
+ "syn 3.0.3",
440
440
  ]
441
441
 
442
442
  [[package]]
@@ -883,9 +883,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
883
883
 
884
884
  [[package]]
885
885
  name = "jiff"
886
- version = "0.2.34"
886
+ version = "0.2.35"
887
887
  source = "registry+https://github.com/rust-lang/crates.io-index"
888
- checksum = "e184d09547b80eb7e20d141ba2fb1fbac843ca53f4cf1b31210adc4c1adc6e16"
888
+ checksum = "668b7183bd07af9a4885f5c35b0cc5c83c4607a913c16b7e17291832910d2dcc"
889
889
  dependencies = [
890
890
  "defmt",
891
891
  "jiff-core",
@@ -907,9 +907,9 @@ dependencies = [
907
907
 
908
908
  [[package]]
909
909
  name = "jiff-static"
910
- version = "0.2.34"
910
+ version = "0.2.35"
911
911
  source = "registry+https://github.com/rust-lang/crates.io-index"
912
- checksum = "323da076b7a6faf914dc677cb05a4b907742ff7375c8322c9e7f5061e5e0e9de"
912
+ checksum = "3a69dcb3a21cfb32ce1cd056169337ca284af0766dd766e7878819b251a49204"
913
913
  dependencies = [
914
914
  "jiff-core",
915
915
  "proc-macro2",
@@ -1205,7 +1205,7 @@ checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e"
1205
1205
 
1206
1206
  [[package]]
1207
1207
  name = "panache"
1208
- version = "3.0.1"
1208
+ version = "3.0.2"
1209
1209
  dependencies = [
1210
1210
  "annotate-snippets",
1211
1211
  "assert_cmd",
@@ -1249,7 +1249,7 @@ dependencies = [
1249
1249
 
1250
1250
  [[package]]
1251
1251
  name = "panache-formatter"
1252
- version = "0.20.1"
1252
+ version = "0.20.2"
1253
1253
  dependencies = [
1254
1254
  "insta",
1255
1255
  "log",
@@ -1267,7 +1267,7 @@ dependencies = [
1267
1267
 
1268
1268
  [[package]]
1269
1269
  name = "panache-parser"
1270
- version = "0.22.1"
1270
+ version = "0.22.2"
1271
1271
  dependencies = [
1272
1272
  "entities",
1273
1273
  "insta",
@@ -1663,9 +1663,9 @@ dependencies = [
1663
1663
 
1664
1664
  [[package]]
1665
1665
  name = "schemars"
1666
- version = "1.2.1"
1666
+ version = "1.2.2"
1667
1667
  source = "registry+https://github.com/rust-lang/crates.io-index"
1668
- checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc"
1668
+ checksum = "687274d293b6cdc6e73e0fee520bf2049650090d7164f87672d212a3c530cf4a"
1669
1669
  dependencies = [
1670
1670
  "dyn-clone",
1671
1671
  "ref-cast",
@@ -1676,14 +1676,14 @@ dependencies = [
1676
1676
 
1677
1677
  [[package]]
1678
1678
  name = "schemars_derive"
1679
- version = "1.2.1"
1679
+ version = "1.2.2"
1680
1680
  source = "registry+https://github.com/rust-lang/crates.io-index"
1681
- checksum = "7d115b50f4aaeea07e79c1912f645c7513d81715d0420f8bc77a18c6260b307f"
1681
+ checksum = "d98c67716b46af2f0b8cf752abc930f6f9aecfbf671ecfb531db8a31dbe4e2ba"
1682
1682
  dependencies = [
1683
1683
  "proc-macro2",
1684
1684
  "quote",
1685
1685
  "serde_derive_internals",
1686
- "syn 2.0.119",
1686
+ "syn 3.0.3",
1687
1687
  ]
1688
1688
 
1689
1689
  [[package]]
@@ -1724,13 +1724,13 @@ dependencies = [
1724
1724
 
1725
1725
  [[package]]
1726
1726
  name = "serde_derive_internals"
1727
- version = "0.29.1"
1727
+ version = "0.30.0"
1728
1728
  source = "registry+https://github.com/rust-lang/crates.io-index"
1729
- checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711"
1729
+ checksum = "f852137cce035d6a4df67ccce505ff6b3e9fd3a10e3e52b24dc71e650bb1a9bd"
1730
1730
  dependencies = [
1731
1731
  "proc-macro2",
1732
1732
  "quote",
1733
- "syn 2.0.119",
1733
+ "syn 3.0.3",
1734
1734
  ]
1735
1735
 
1736
1736
  [[package]]
@@ -1909,9 +1909,9 @@ checksum = "f18aa187839b2bdb1ad2fa35ead8c4c2976b64e4363c386d45ac0f7ee85c9233"
1909
1909
 
1910
1910
  [[package]]
1911
1911
  name = "thin-vec"
1912
- version = "0.2.18"
1912
+ version = "0.2.19"
1913
1913
  source = "registry+https://github.com/rust-lang/crates.io-index"
1914
- checksum = "b0f7e269b48f0a7dd0146680fa24b50cc67fc0373f086a5b2f99bd084639b482"
1914
+ checksum = "79def32ffcd477db1ff26f76dab9e3a91f0bd42a85ca96577089b24623056f9d"
1915
1915
 
1916
1916
  [[package]]
1917
1917
  name = "thiserror"
@@ -1951,9 +1951,9 @@ dependencies = [
1951
1951
 
1952
1952
  [[package]]
1953
1953
  name = "toml"
1954
- version = "1.1.3+spec-1.1.0"
1954
+ version = "1.1.4+spec-1.1.0"
1955
1955
  source = "registry+https://github.com/rust-lang/crates.io-index"
1956
- checksum = "53c96ecdfa941c8fc4fcaed14f99ada8ebed502eef533015095a07e3301d4c3c"
1956
+ checksum = "3aace63f4bbcdfc2c965b059de67119c89c4017a70d633be6c104910f67056f5"
1957
1957
  dependencies = [
1958
1958
  "indexmap",
1959
1959
  "serde_core",
@@ -1975,9 +1975,9 @@ dependencies = [
1975
1975
 
1976
1976
  [[package]]
1977
1977
  name = "toml_parser"
1978
- version = "1.1.2+spec-1.1.0"
1978
+ version = "1.1.3+spec-1.1.0"
1979
1979
  source = "registry+https://github.com/rust-lang/crates.io-index"
1980
- checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526"
1980
+ checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56"
1981
1981
  dependencies = [
1982
1982
  "winnow 1.0.4",
1983
1983
  ]
@@ -7,7 +7,7 @@ authors = ["Johan Larsson <johan@jolars.co>"]
7
7
 
8
8
  [package]
9
9
  name = "panache"
10
- version = "3.0.1"
10
+ version = "3.0.2"
11
11
  edition.workspace = true
12
12
  # `distill_quarto_schema` is a dev-only vendoring bin (src/bin/); keep bare
13
13
  # `cargo run` resolving to the CLI for tooling like the pre-commit format hook.
@@ -48,8 +48,8 @@ path = "src/main.rs"
48
48
  required-features = ["cli"]
49
49
 
50
50
  [dependencies]
51
- panache-formatter = { path = "crates/panache-formatter", version = "0.20.1" }
52
- panache-parser = { path = "crates/panache-parser", version = "0.22.1", features = [
51
+ panache-formatter = { path = "crates/panache-formatter", version = "0.20.2" }
52
+ panache-parser = { path = "crates/panache-parser", version = "0.22.2", features = [
53
53
  "serde",
54
54
  "schema",
55
55
  ] }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: panache-cli
3
- Version: 3.0.1
3
+ Version: 3.0.2
4
4
  Classifier: Development Status :: 5 - Production/Stable
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.20.2](https://github.com/jolars/panache/compare/panache-formatter-v0.20.1...panache-formatter-v0.20.2) (2026-07-28)
4
+
5
+ ### Bug Fixes
6
+ - stabilize divs and code blocks in list items ([`3c47658`](https://github.com/jolars/panache/commit/3c476588af1cbdcf1e9f002a5dc904373fbc800e)), closes [#439](https://github.com/jolars/panache/issues/439)
7
+
8
+ ### Dependencies
9
+ - updated crates/panache-parser to v0.22.2
10
+
3
11
  ## [0.20.1](https://github.com/jolars/panache/compare/panache-formatter-v0.20.0...panache-formatter-v0.20.1) (2026-07-25)
4
12
 
5
13
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "panache-formatter"
3
- version = "0.20.1"
3
+ version = "0.20.2"
4
4
  edition.workspace = true
5
5
  include = [
6
6
  "/src/**/*",
@@ -18,7 +18,7 @@ keywords = ["quarto", "pandoc", "markdown", "formatter"]
18
18
  categories = ["text-processing"]
19
19
 
20
20
  [dependencies]
21
- panache-parser = { path = "../panache-parser", version = "0.22.1" }
21
+ panache-parser = { path = "../panache-parser", version = "0.22.2" }
22
22
  log = { version = "0.4.31", features = ["release_max_level_debug"] }
23
23
  rowan = "0.16.1"
24
24
  serde = { version = "1.0.228", features = ["derive"], optional = true }
@@ -278,7 +278,7 @@ impl Formatter {
278
278
  code_blocks::format_code_block(node, &self.config, &self.formatted_code, &mut self.output);
279
279
  }
280
280
 
281
- fn format_code_block_to_string(&mut self, node: &SyntaxNode) -> String {
281
+ pub(super) fn format_code_block_to_string(&mut self, node: &SyntaxNode) -> String {
282
282
  let saved_output = self.output.clone();
283
283
  self.output.clear();
284
284
  self.format_code_block(node);
@@ -697,6 +697,123 @@ impl Formatter {
697
697
  return;
698
698
  }
699
699
 
700
+ // Same-line leading-block case: a LIST_ITEM whose first non-blank child
701
+ // is a FENCED_DIV or CODE_BLOCK (no preceding PLAIN/PARAGRAPH).
702
+ // Examples: `- ::: note`, ``- ```rust``. Without this the item has no
703
+ // content node, so the generic path below never emits the marker and
704
+ // the block swallows it (issue #439). Emit the outer marker, then format
705
+ // the block at indent=0 so its opening fence abuts the marker; splice
706
+ // the outer item's hanging indent into subsequent lines. Mirrors the
707
+ // leading-BQ path.
708
+ if let Some(leading_block) = first_non_blank_child.as_ref()
709
+ && matches!(
710
+ leading_block.kind(),
711
+ SyntaxKind::FENCED_DIV | SyntaxKind::CODE_BLOCK
712
+ )
713
+ && Self::find_content_node(node).is_none()
714
+ {
715
+ self.output.push_str(&" ".repeat(total_indent));
716
+ self.output
717
+ .push_str(&" ".repeat(list_indent.marker_padding));
718
+ self.output.push_str(&marker);
719
+ self.output.push_str(&" ".repeat(list_indent.spaces_after));
720
+ if let Some(ref cb) = checkbox {
721
+ self.output.push_str(cb);
722
+ self.output.push(' ');
723
+ }
724
+ let block_start = self.output.len();
725
+ if leading_block.kind() == SyntaxKind::CODE_BLOCK {
726
+ // A code block on the marker line carries no fence-indent token
727
+ // (its indent was consumed as the marker's trailing space), so
728
+ // the shared renderer leaves the list indent embedded in the
729
+ // content. Render it bare, abut the opening fence to the marker,
730
+ // then re-indent: dedent the content by its own common indent
731
+ // and re-apply the hanging column. The closing fence renders at
732
+ // column 0 and just takes the hanging prefix.
733
+ let raw = self.format_code_block_to_string(leading_block);
734
+ let raw = raw.strip_suffix('\n').unwrap_or(&raw);
735
+ let block_lines: Vec<&str> = raw.split('\n').collect();
736
+ let prefix = " ".repeat(hanging);
737
+ let last = block_lines.len().saturating_sub(1);
738
+ let content_indent = block_lines
739
+ .get(1..last)
740
+ .unwrap_or(&[])
741
+ .iter()
742
+ .filter(|l| !l.trim().is_empty())
743
+ .map(|l| l.len() - l.trim_start().len())
744
+ .min()
745
+ .unwrap_or(0);
746
+ for (i, line) in block_lines.iter().enumerate() {
747
+ if i == 0 {
748
+ // Opening fence abuts the marker already emitted above.
749
+ self.output.push_str(line.trim_start());
750
+ } else if line.trim().is_empty() {
751
+ // Leave blank content lines bare (no trailing spaces).
752
+ } else if i == last {
753
+ // Closing fence renders at column 0; just add hanging.
754
+ self.output.push_str(&prefix);
755
+ self.output.push_str(line);
756
+ } else {
757
+ // Content line: dedent its embedded list indent, re-indent.
758
+ self.output.push_str(&prefix);
759
+ let cut = content_indent.min(line.len());
760
+ self.output.push_str(&line[cut..]);
761
+ }
762
+ self.output.push('\n');
763
+ }
764
+ } else {
765
+ // A fenced div's body is re-formatted from child blocks, so
766
+ // format it at indent 0 and splice the hanging indent into
767
+ // every subsequent non-blank line.
768
+ self.format_node_sync(leading_block, 0);
769
+ if self.output.as_bytes().get(block_start) == Some(&b'\n') {
770
+ self.output.remove(block_start);
771
+ }
772
+ if hanging > 0 {
773
+ let block_text = self.output.split_off(block_start);
774
+ let prefix = " ".repeat(hanging);
775
+ let mut first = true;
776
+ for line in block_text.split_inclusive('\n') {
777
+ let is_blank = line.trim_end_matches('\n').is_empty();
778
+ if !first && !is_blank {
779
+ self.output.push_str(&prefix);
780
+ }
781
+ self.output.push_str(line);
782
+ first = false;
783
+ }
784
+ }
785
+ }
786
+
787
+ // Emit trailing children (further blocks after the leading block) at
788
+ // hanging indent, preserving a single blank-line separator between
789
+ // loose blocks. Dropping the blank would glue two sibling divs
790
+ // (`:::` immediately followed by `::: other`), which re-parses into
791
+ // a different shape and breaks idempotency (issue #439).
792
+ let mut reached_leading = false;
793
+ let mut pending_blank = false;
794
+ for child in node.children() {
795
+ if &child == leading_block {
796
+ reached_leading = true;
797
+ continue;
798
+ }
799
+ if !reached_leading {
800
+ continue;
801
+ }
802
+ if child.kind() == SyntaxKind::BLANK_LINE {
803
+ pending_blank = true;
804
+ continue;
805
+ }
806
+ if pending_blank {
807
+ if !self.output.ends_with("\n\n") {
808
+ self.output.push('\n');
809
+ }
810
+ pending_blank = false;
811
+ }
812
+ self.format_node_sync(&child, hanging);
813
+ }
814
+ return;
815
+ }
816
+
700
817
  // Same-line nested-marker case: a LIST_ITEM whose first non-blank
701
818
  // child is a non-empty nested LIST (no preceding PLAIN/PARAGRAPH).
702
819
  // Examples: `- - foo`, `1. - 2. foo`. Emit the outer marker without
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.22.2](https://github.com/jolars/panache/compare/panache-parser-v0.22.1...panache-parser-v0.22.2) (2026-07-28)
4
+
5
+ ### Bug Fixes
6
+ - stabilize divs and code blocks in list items ([`3c47658`](https://github.com/jolars/panache/commit/3c476588af1cbdcf1e9f002a5dc904373fbc800e)), closes [#439](https://github.com/jolars/panache/issues/439)
7
+ - **parser:** inline-parse single-column multiline table cells ([`f69d2bb`](https://github.com/jolars/panache/commit/f69d2bbc7847a15f67c1b5322f9d529962fe0521)), closes [#438](https://github.com/jolars/panache/issues/438)
8
+
3
9
  ## [0.22.1](https://github.com/jolars/panache/compare/panache-parser-v0.22.0...panache-parser-v0.22.1) (2026-07-25)
4
10
 
5
11
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "panache-parser"
3
- version = "0.22.1"
3
+ version = "0.22.2"
4
4
  edition.workspace = true
5
5
  readme = "README.md"
6
6
  include = [
@@ -135,6 +135,12 @@ pub(crate) struct BlockContext<'a> {
135
135
  /// Whether we're currently inside any list
136
136
  pub in_list: bool,
137
137
 
138
+ /// Whether the innermost open fenced div wraps the innermost open list (the
139
+ /// div is outer to the list). When true, a `:::` at the list content column
140
+ /// is list content rather than the div's closer. See issue #439 and
141
+ /// `FencedDivCloseParser::detect_prepared`.
142
+ pub fenced_div_wraps_list: bool,
143
+
138
144
  /// Whether the immediate enclosing container is a list item that has so
139
145
  /// far seen only its marker (no content yet). Equivalent to the
140
146
  /// `marker_only` flag on `Container::ListItem`. Used by indented code
@@ -2527,7 +2533,27 @@ impl BlockParser for FencedDivCloseParser {
2527
2533
  return None;
2528
2534
  }
2529
2535
 
2530
- if !is_div_closing_fence(content_for_fenced_div_detection(ctx, lines.first())) {
2536
+ // When the innermost open div *wraps* the current list, a `:::` at or
2537
+ // beyond the list's content column is list content, not this div's
2538
+ // closer: pandoc only closes a div on a fence at the div's own
2539
+ // indentation, so an outer (col-0) div is not closed by an indented
2540
+ // fence buried in a list item — it closes a div opened *inside* the item
2541
+ // (handled by list buffering + re-parse) or is literal text. Without
2542
+ // this guard the outer div steals the inner fence, dropping the nested
2543
+ // div's close and breaking idempotency (issue #439). The guard is scoped
2544
+ // to wrapping divs so a div opened as a list *continuation* block still
2545
+ // closes on a fence at its own (content-column) indentation.
2546
+ let first = lines.first();
2547
+ if ctx.fenced_div_wraps_list
2548
+ && let Some(list_info) = ctx.list_indent_info
2549
+ {
2550
+ let (indent_cols, _) = leading_indent(first);
2551
+ if indent_cols >= list_info.content_col {
2552
+ return None;
2553
+ }
2554
+ }
2555
+
2556
+ if !is_div_closing_fence(content_for_fenced_div_detection(ctx, first)) {
2531
2557
  return None;
2532
2558
  }
2533
2559
 
@@ -11,7 +11,7 @@ use crate::parser::utils::attributes::{
11
11
  use crate::parser::utils::helpers::{emit_line_tokens, emit_separator_tokens, strip_newline};
12
12
  use crate::parser::utils::inline_emission;
13
13
 
14
- use super::container_prefix::StrippedLines;
14
+ use super::container_prefix::{ContainerPrefix, StrippedLines};
15
15
 
16
16
  /// Read-only indexed view over lines for table detection scans. Two
17
17
  /// backings:
@@ -3340,6 +3340,14 @@ fn extract_first_line_cell_contents(line: &str, columns: &[Column]) -> Vec<Strin
3340
3340
  cells
3341
3341
  }
3342
3342
 
3343
+ /// Whether the window's container prefix contributes no bytes to continuation
3344
+ /// lines (top-level, i.e. not nested in a blockquote or list). Used to gate the
3345
+ /// single-column multiline-cell inline join, which reads raw continuation lines
3346
+ /// and would otherwise fold `>`/list-marker bytes into cell content.
3347
+ fn prefix_is_empty(prefix: &ContainerPrefix) -> bool {
3348
+ prefix.bq_depth() == 0 && prefix.list_content_col() == 0 && prefix.content_indent() == 0
3349
+ }
3350
+
3343
3351
  /// Emit a multiline table row with inline parsing (Phase 7.1).
3344
3352
  ///
3345
3353
  /// `indices` are ABSOLUTE line indices into the window's raw buffer; each
@@ -3360,6 +3368,41 @@ fn emit_multiline_table_row(
3360
3368
 
3361
3369
  builder.start_node(kind.into());
3362
3370
 
3371
+ // Single-column, top-level multi-line rows: pandoc joins a cell's physical
3372
+ // lines and parses the result as inline content, so a fenced code block
3373
+ // inside the cell flattens to an inline code span. Emitting continuation
3374
+ // lines as raw TEXT (the general path below) skips that inline pass, leaving
3375
+ // un-normalized markup (```` ```{r} rm(F12) ``` ````) that reparses as a
3376
+ // normalized inline code span on the next format pass — an idempotency break
3377
+ // (issue #438). Feed the joined cell text through the inline emitter,
3378
+ // preserving interior newlines for losslessness. Gated on an empty container
3379
+ // prefix so continuation-line `>`/list markers never leak into cell content;
3380
+ // nested and multi-column rows keep the verbatim path.
3381
+ if columns.len() == 1 && indices.len() > 1 && prefix_is_empty(window.prefix()) {
3382
+ let first = window.strip_at(indices[0]);
3383
+ let (first_trimmed, _) = strip_newline(first);
3384
+ let cell_start = column_offset_to_byte_index(first_trimmed, columns[0].start);
3385
+ if cell_start > 0 {
3386
+ builder.token(SyntaxKind::WHITESPACE.into(), &first_trimmed[..cell_start]);
3387
+ }
3388
+
3389
+ let mut joined = String::from(&first[cell_start..]);
3390
+ for &idx in &indices[1..] {
3391
+ joined.push_str(window.strip_at(idx));
3392
+ }
3393
+
3394
+ // Split the trailing newline off so it sits beside the cell as a sibling
3395
+ // NEWLINE, matching the single-line row shape.
3396
+ let (cell_text, trailing_nl) = strip_newline(&joined);
3397
+ emit_table_cell(builder, cell_text, config);
3398
+ if !trailing_nl.is_empty() {
3399
+ builder.token(SyntaxKind::NEWLINE.into(), trailing_nl);
3400
+ }
3401
+
3402
+ builder.finish_node();
3403
+ return;
3404
+ }
3405
+
3363
3406
  // Emit the first line's container prefix as tokens, then slice cells from
3364
3407
  // the prefix-stripped tail (for CST losslessness, only the first physical
3365
3408
  // line is parsed into cells; continuation lines stay verbatim TEXT).
@@ -485,6 +485,7 @@ fn dispatcher_blockquote_detection() {
485
485
  has_blank_before_strict: true,
486
486
  at_document_start: true,
487
487
  in_fenced_div: false,
488
+ fenced_div_wraps_list: false,
488
489
  myst_directive_closer: None,
489
490
  blockquote_depth: 0,
490
491
  config: &ParserOptions::default(),
@@ -525,6 +526,7 @@ fn dispatcher_blockquote_requires_blank_before() {
525
526
  has_blank_before_strict: false,
526
527
  at_document_start: false,
527
528
  in_fenced_div: false,
529
+ fenced_div_wraps_list: false,
528
530
  myst_directive_closer: None,
529
531
  blockquote_depth: 0,
530
532
  config: &ParserOptions::default(),
@@ -571,6 +573,7 @@ fn dispatcher_blockquote_payload_basic() {
571
573
  has_blank_before_strict: true,
572
574
  at_document_start: true,
573
575
  in_fenced_div: false,
576
+ fenced_div_wraps_list: false,
574
577
  myst_directive_closer: None,
575
578
  blockquote_depth: 0,
576
579
  config: &ParserOptions::default(),
@@ -614,6 +617,7 @@ fn dispatcher_blockquote_payload_nested_requires_blank() {
614
617
  has_blank_before_strict: false,
615
618
  at_document_start: false,
616
619
  in_fenced_div: false,
620
+ fenced_div_wraps_list: false,
617
621
  myst_directive_closer: None,
618
622
  blockquote_depth: 0,
619
623
  config: &ParserOptions::default(),
@@ -655,6 +659,7 @@ fn dispatcher_blockquote_ignored_inside_blockquote() {
655
659
  has_blank_before_strict: false,
656
660
  at_document_start: false,
657
661
  in_fenced_div: false,
662
+ fenced_div_wraps_list: false,
658
663
  myst_directive_closer: None,
659
664
  blockquote_depth: 1,
660
665
  config: &ParserOptions::default(),
@@ -692,6 +697,7 @@ fn dispatcher_blockquote_payload_nested_with_blank() {
692
697
  has_blank_before_strict: false,
693
698
  at_document_start: false,
694
699
  in_fenced_div: false,
700
+ fenced_div_wraps_list: false,
695
701
  myst_directive_closer: None,
696
702
  blockquote_depth: 0,
697
703
  config: &ParserOptions::default(),
@@ -733,6 +739,7 @@ fn dispatcher_blockquote_payload_nested_after_blank_line() {
733
739
  has_blank_before_strict: true,
734
740
  at_document_start: false,
735
741
  in_fenced_div: false,
742
+ fenced_div_wraps_list: false,
736
743
  myst_directive_closer: None,
737
744
  blockquote_depth: 0,
738
745
  config: &ParserOptions::default(),
@@ -2406,6 +2406,7 @@ impl<'a> Parser<'a> {
2406
2406
  has_blank_before_strict: has_blank_before,
2407
2407
  at_document_start: self.pos == 0,
2408
2408
  in_fenced_div: self.in_fenced_div(),
2409
+ fenced_div_wraps_list: self.fenced_div_wraps_innermost_list(),
2409
2410
  myst_directive_closer: self.innermost_myst_directive_closer(),
2410
2411
  blockquote_depth: current_bq_depth,
2411
2412
  config: self.config,
@@ -3569,6 +3570,7 @@ impl<'a> Parser<'a> {
3569
3570
  || is_blank_line(self.lines[self.pos - 1]),
3570
3571
  at_document_start: self.pos == 0 && self.current_blockquote_depth() == 0,
3571
3572
  in_fenced_div: self.in_fenced_div(),
3573
+ fenced_div_wraps_list: self.fenced_div_wraps_innermost_list(),
3572
3574
  myst_directive_closer: self.innermost_myst_directive_closer(),
3573
3575
  blockquote_depth: self.current_blockquote_depth(),
3574
3576
  config: self.config,
@@ -3826,6 +3828,7 @@ impl<'a> Parser<'a> {
3826
3828
  has_blank_before_strict: false, // filled in later
3827
3829
  at_document_start: false, // filled in later
3828
3830
  in_fenced_div: self.in_fenced_div(),
3831
+ fenced_div_wraps_list: self.fenced_div_wraps_innermost_list(),
3829
3832
  myst_directive_closer: self.innermost_myst_directive_closer(),
3830
3833
  blockquote_depth: current_bq_depth,
3831
3834
  config: self.config,
@@ -4368,6 +4371,28 @@ impl<'a> Parser<'a> {
4368
4371
  .rposition(|c| matches!(c, Container::FencedDiv { .. }))
4369
4372
  }
4370
4373
 
4374
+ /// True when the innermost open fenced div wraps the innermost open list
4375
+ /// (the div is outer to the list on the container stack). In that case a
4376
+ /// `:::` indented to the list's content column is list content, not the
4377
+ /// div's closer — pandoc only closes a div on a fence at the div's own
4378
+ /// indentation. When instead the innermost div was opened *inside* a list
4379
+ /// item (as a continuation block, so it is inner to the list), a fence at
4380
+ /// the content column does close it. See issue #439.
4381
+ fn fenced_div_wraps_innermost_list(&self) -> bool {
4382
+ let Some(div_idx) = self.fenced_div_container_index() else {
4383
+ return false;
4384
+ };
4385
+ match self
4386
+ .containers
4387
+ .stack
4388
+ .iter()
4389
+ .rposition(|c| matches!(c, Container::List { .. }))
4390
+ {
4391
+ Some(list_idx) => div_idx < list_idx,
4392
+ None => false,
4393
+ }
4394
+ }
4395
+
4371
4396
  fn close_containers_to_fenced_div(&mut self) {
4372
4397
  if let Some(index) = self.fenced_div_container_index() {
4373
4398
  self.close_containers_to(index + 1);
@@ -598,6 +598,17 @@ fn project_boundary(start_dir: &Path) -> Option<PathBuf> {
598
598
  None
599
599
  }
600
600
 
601
+ /// Resolve a possibly CWD-relative `start_dir` to an absolute path so that
602
+ /// ancestor walks see the real filesystem parents. The empty path (the parent
603
+ /// of a bare filename) means the working directory. Falls back to the path as
604
+ /// given when the working directory is unavailable.
605
+ fn absolutize_start_dir(start_dir: &Path) -> PathBuf {
606
+ if start_dir.as_os_str().is_empty() {
607
+ return env::current_dir().unwrap_or_else(|_| start_dir.to_path_buf());
608
+ }
609
+ std::path::absolute(start_dir).unwrap_or_else(|_| start_dir.to_path_buf())
610
+ }
611
+
601
612
  fn xdg_config_path() -> Option<PathBuf> {
602
613
  if let Ok(xdg) = env::var("XDG_CONFIG_HOME") {
603
614
  let p = Path::new(&xdg).join("panache").join("config.toml");
@@ -679,6 +690,13 @@ pub fn load_with_chain(
679
690
  input_file: Option<&Path>,
680
691
  flavor_override: Option<Flavor>,
681
692
  ) -> io::Result<(Config, ConfigSource, Vec<PathBuf>)> {
693
+ // CLI callers derive `start_dir` from user-supplied targets, so it is
694
+ // often CWD-relative (`.`, `subdir`, or even empty for a bare filename).
695
+ // `Path::ancestors()` is purely lexical: a relative walk ends at the
696
+ // working directory and never reaches its real filesystem parents, so
697
+ // discovery and the `.git` boundary would miss ancestor configs (#441).
698
+ let start_dir = absolutize_start_dir(start_dir);
699
+ let start_dir = start_dir.as_path();
682
700
  let boundary = project_boundary(start_dir);
683
701
  let (mut cfg, source, extensions, chain) = if let Some(path) = explicit {
684
702
  let (cfg, ext, chain) = read_config_with_chain(path).map_err(io::Error::from)?;
@@ -1522,7 +1522,7 @@ fn main() -> io::Result<()> {
1522
1522
  } => {
1523
1523
  if check {
1524
1524
  eprintln!(
1525
- "Warning: `panache lint --check` is deprecated; linting exits non-zero on \
1525
+ "Warning: the `--check` flag is deprecated; linting exits non-zero on \
1526
1526
  violations by default. The flag is now a no-op."
1527
1527
  );
1528
1528
  }
File without changes
File without changes
File without changes