Changelog
2.61.0 (2026-07-04)
Features
- parser: fuse comment/PI trailing softbreak lines (
3fa513c) - parser: lift
<div>inter-tag text to sibling blocks (5f04265) - parser: lift fenced div swallowing html
</div>(7b11daf) - parser: split same-line matched-pair inter-tag HTML (
119014c) - parser: classify void strict-block HTML tags (
fcfea15) - parser: split blockquote standalone HTML tags (
b29d46c) - parser: lift blockquote open-only HTML body (
e3b93a5) - config: add
fatouformatter preset (8d70ee0) - parser: flag unbalanced
\left/\rightin math (73750c9) - parser: lift open-only HTML block bodies (
7a831ff)
Bug Fixes
Dependencies
- updated crates/panache-formatter to v0.19.0
- updated crates/panache-parser to v0.21.0
2.60.0 (2026-07-01)
Highlights
This release introduces experimental support for two new flavors:
mdsvex, a Svelte-based Markdown preprocessor. This means that Panache can now parse and format
.svxfiles, which are Markdown files that can contain Svelte components. The parser and formatter will treat Svelte components as opaque blocks, preserving their content and formatting them according to the surrounding Markdown context.myst, a flavor of Markdown designed for scientific and technical writing. Myst is built on top of CommonMark (which Panache is compliant with), but adds Quarto/R Markdown-style extensions for citations, cross-references, and directives.
Features
- parser: add MyST AST wrappers (
e5d7ba8) - config: add Ruff-style
extendfor config inheritance (3202d5e) - parser: treat standalone Svelte spans as opaque blocks (
414d441) - lsp: add multi-root workspaces (
3ce0f93) - lsp: support
textDocument/documentHighlight(1436780) - parser: align myst defaults with myst-parser (
4232185) - formatter: route myst directive bodies to external tools (
81c19f6) - parser: parse myst verbatim-bodies (
2d8a516) - parser: parse MyST directive option blocks (
17990eb) - parser: add MyST flavor scaffolding (
b4bdd84) - parser: split standalone block-tag sequences in CST (
9bf0005) - add
llms.txt(bb1630a) - parser: gate YAML tab-indent diagnostics per consumer (
dffefc8) - config: move
line-width/line-endingunder[format](382ee5d) - formatters: add html to biome (
bdd09a4) - formatters: add ojs to prettier and biome (
1d6d2d6) - linter: report bib-key duplicates against project manifest (
074912a) - add python-markdown admonitions and pymdownx details (
b37a5cc), fixes #396 - wire mdsvex flavor through LSP, CLI, and editor (
89e1e79) - add mdsvex flavor with opaque Svelte template spans (
983632a)
Bug Fixes
- parser: treat
{toctree}body as verbatim (1ad3e87) - linter: skip verbatim MyST bodies in
html-entities(fa41d83) - formatter: keep block markers inline in sentence wrap (
3d8717d) - linter: tailor chunk-label prefix to language (
fd66a98) - parser: parse headerless multiline tables with a dash-run closer (
ab7e7d3), fixes #398 - lsp: self-heal referenced files without watch events (
286ae13) - linter: scope
duplicate-bibliography-keyto declaring docs (38a0437) - formatter: hoist folded
>-onto key line (0744175), fixes #400 - parser: open brace-info code fences in CommonMark (
179cb1c) - parser: span inline math across a newline (Pandoc only) (
9b7905e) - parser: span inline math across a single newline (
ace2ab4) - parser: require left word boundary for bare URIs (
f7b6334)
Dependencies
- updated crates/panache-formatter to v0.18.0
- updated crates/panache-parser to v0.20.0
2.59.0 (2026-06-24)
Features
- lsp: add hover detail to citation previews (
3ac7d67) - linter: make quarto-schema unknown-key opt-in (
730d300) - formatter: normalize simple table column spacing (
ff3be98) - formatter: normalize multiline table column spacing (
bb255a9), closes #389 - formatter: fold long double-quoted YAML scalars (
ad68db1), closes #388 - surface broken config instead of silently defaulting (
0a99a56)
Bug Fixes
- linter: anchor duplicate-bib key to a real declaration (
3e73405) - linter: trim trailing newline from schema value spans (
d1fedb9) - linter: honor
validate-yaml: falseopt-out (9ee7185) - linter: enforce edit-distance cap in key suggestions (
3592f13) - build: include quarto schema in
include(b4a97d0), closes #390 - formatter: align headerless simple tables from first row (
ecdd482) - parser: stop truncating wide simple-table cells (
f97694a) - parser: consume top border of single-row multiline tables (
0872624) - lsp: compute pull diagnostics on demand (
9993d69) - linter: point bibliography span at the value (
3a70be2) - parser: emit bare URIs as lossless
AUTO_LINK(52226d5)
Dependencies
- updated crates/panache-formatter to v0.17.0
- updated crates/panache-parser to v0.19.1
2.58.0 (2026-06-23)
Features
- linter: add
consumer-divergencerule (39c799f) - linter: add opt-in unsafe auto-fixes (
0267d9d) - linter: add
empty-valuesrule (aac9a11) - config: add
[compat]section for quarto, pandoc (3d16467) - linter: validate Quarto YAML schema options (
7b3d363), closes #385 - add
crossref-prefixesfor extension crossrefs (0b190cc) - formatter: tighten spacing around scripts and groups (
d0075c3) - formatter: add presets for badness and arity (
6a57811) - lsp: stream partial pull diagnostics (
1983a7d) - lsp: add
textDocument/linkedEditingRange(1a9d07b) - lsp: reload config on
didChangeConfiguration(c1595be)
Bug Fixes
Performance Improvements
- parser: de-duplicate definition marker parsing (
91a1f10)
Dependencies
- updated crates/panache-formatter to v0.16.0
- updated crates/panache-parser to v0.19.0
2.57.0 (2026-06-21)
Features
- lsp: on-type continuation indent for lists (
3c9bc3a) - linter: make rule metadata the source of truth (
f0c1c74) - lsp: add did-create/rename/delete file operations (
e1b1648) - lsp: extend file rename to more shortcodes and frontmatter (
255978e) - lsp: add
semanticTokens/fullhighlighting (0c7d247) - lsp: populate diagnostic
related_documents(33b743d) - lsp: add pull diagnostics with push mode-switch (
822a2ed) - parser: retag comment/PI/verbatim as
HTML_BLOCK_RAW(447d537) - parser: tokenize table separator rows in the CST (
3de91a6)
Bug Fixes
- parser: stop caption theft across simple/multiline tables (
89610d4) - linter: dedup citation keys before reporting (
8ce3a15) - lsp: stop losing diagnostics to lint cancellation races (
f72fd78) - parser: detect setext heading level via underline node (
ff43f66), closes #377 - formatter: keep indent on YAML value below its key (
52d578a) - parser: skip code spans in citation detection (
859a3db)
Performance Improvements
Dependencies
- updated crates/panache-formatter to v0.15.0
- updated crates/panache-parser to v0.18.0
2.56.0 (2026-06-17)
Features
- formatter: expose config-enum JsonSchema behind schema feature (
5062bb5) - formatter: add
table-indentconfig option (1365b80), resolves #344 and #352 - formatter: hang math binary continuations flush under the RHS (
0fae430) - formatter: align assignment-led math chains under the RHS (
e20d0d6) - break out dprint plugin into its own repo (
014ab7c) - config: add
cache = <bool>option to toggle caching (aa20278)
Bug Fixes
Dependencies
- updated crates/panache-formatter to v0.14.0
- updated crates/panache-parser to v0.17.2
2.55.0 (2026-06-15)
Features
Bug Fixes
Dependencies
- updated crates/panache-formatter to v0.13.0
- updated crates/panache-parser to v0.17.1
2.54.0 (2026-06-13)
Features
- formatter: treat
vignetteyaml field as verbatim (f9d7c5a), closes #366 - lsp: flag broken project manifests on their own URI (
af5c288) - formatter: break math binary chains outside relations (
dde4511) - formatter: nest binary breaks under math relation chains (
0128da4) - formatter: break over-width display math at relations (
9d7c2e5) - parser: tokenize math delimiters and punctuation (
7249710) - formatter: space math command operators (
1e43f25) - formatter: precedence-aware math operator spacing (
adbebe0) - formatter: don’t escape
|in commonmark (0092e6c), ref #367
Bug Fixes
- parser: claim caption-led table as list item’s first line (
ac1f18b) - formatter: keep blockquote prefix on quoted tables (
b9f7d2a) - formatter: dedent indented code in list items (
bf14ecc) - formatter: wrap task-item text at content column (
42ecf70) - formatter: nest task-list children at content column (
d6fb32b) - formatter: drop stray blank line after hashpipe block scalar (
c56f60f) - parser: keep table captions lossless inside containers (
b04f65a) - parser: treat deep list marker as lazy continuation (
3fe17e0)
Performance Improvements
Dependencies
- updated crates/panache-formatter to v0.12.0
- updated crates/panache-parser to v0.17.0
2.53.0 (2026-06-10)
Features
Bug Fixes
- formatter: add span-aware grid table formatting (
75e5b2e), closes #359 - parser: report YAML required-simple-key errors (
f8f804c) - lsp: answer panicking request handlers with InternalError (
c4dc85d) - formatter: don’t indent multi-line YAML scalar (
b9927fa) - lsp: adopt LogOutputChannel for vscode-languageclient 10 (
ffd61cc)
Performance Improvements
- lsp: avoid reparse on formatting (
95330af) - lsp: address cross-file leak and
project_graphinvalidation (bdf45f9) - cache external formatter blocks (
d6b81f9) - cli: use shared thread budget for format/lint of multiple files (
83aa8ec) - cli: share one external-tool thread budget (
91a61e0) - linter: run external linters across languages concurrently (
02c1e38)
Dependencies
- updated crates/panache-formatter to v0.11.0
- updated crates/panache-parser to v0.16.0
2.52.0 (2026-06-07)
This release comes with two major changes:
There is now an experimental math parser and formatter in Panache! The formatter can be enabled via the following setting:
[experimental] format-math = trueThe formatter is very basic at the moment, only supporting alignment and whitespace normalization, but the intent is for it to eventually support operator-precedence-aware line breaking and other features.
Panache now has its own YAML parser and formatter! We have previously relied on the external
yaml_parserandpretty_yamlcrates. But with this release, we have now shifted over to our own hand-crafted YAML parser and formatter, fully compatible with the YAML 1.2 spec. YAML syntax is now also a first-class citizen in the Panache CST, with all markers and trivia preserved, even in the hashpipe YAML syntax for Quarto/R Markdown documents. The changes won’t be immediately visible to users, but will pave the way for better linting and LSP features in the future.
Features
- parser: tokenize math operators into
MATH_OPERATOR(303e05b) - formatter: add experimental math content formatter (
a0e5f51) - linter: surface math diagnostics via
math-syntaxrule (20c0b5b) - parser: parse math content into a structural CST (
cfb0c45) - lsp: source YAML parse-error diagnostics from the parser channel (
ad2ec30) - parser: prefix-aware YAML scanner and builder (
66a8e99) - parser: swap YAML parser to our built-in parser (
4ed243a) - formatter: swap YAML formatting over to our own formatter (
9e722e5) - extensions: add
space_reference_linksextension (309739d) - extensions: add
wikilinks_title_after/before_pipe(49500f1) - parser: add syntax-error channel for embedded YAML (
523fb62) - parser: embed prefix-aware YAML under HASHPIPE_YAML_CONTENT (
d515896) - parser: drop host envelope from standalone YAML parse (
5fecc99) - inline YAML parser CST into Panache’s CST (
d240130)
Bug Fixes
- formatter: preserve full code fence info string (
e9638be), closes #356 - linter: raise
math-syntaxdiagnostics to error (238a3de) - linter: catch stray
:::inside tight list items (d88856d), closes #333 - parser: don’t strip blockquote markers in
<details>(4579dd8), closes #350 - formatter: align nested pipe tables to container indent (#346) (
1095aee) - parser: reject bare multi-word fence info in Pandoc (
395b000) - parser: peel line prefix after a hashpipe block scalar (
e246d30) - parser: don’t start list at continuation for footnote def (
9494b14), closes #348 - parser: detect grid borders on dispatch line inside list items (
e7fa051) - parser: lift tables and fenced divs from list-item content (
6f3821c)
Performance Improvements
Dependencies
- updated crates/panache-formatter to v0.10.0
- updated crates/panache-parser to v0.15.0
2.51.0 (2026-06-02)
Features
- config: abort on unknown extensions, add exts to schema (
397e1e5) - config: abort on unknown config fields (
d8ec90c) - lsp: allow folding of HTML blocks (
eb97109), closes #342 - linter: add
empty_list_itemrule (d033968), closes #341 - cli: allow
-o extensions.<name>=<bool>overrides (2df73ab) - formatter: add
east_asian_line_breaksextension (4f28716), in #339, closes #339
Bug Fixes
- formatter: preserve layout when paragraph swallows a fence shape (
6458e96), closes #340 - parser: restrict bare-URI autolinks to known schemes (#337) (
930db45), closes #336 - formatter: fix panic when formatting
<!--->(b580bb9) - parser: keep
.class/#idon executable fence info (4c8f396), fixes #334 - formatter: keep list marker off reflowed line start (
68bc1fc) - formatter: keep escaped pipe in table-cell code span (
0b94ca2) - parser: reject deeply-indented empty bullets as nested lists (
15691ff), ref #341
Dependencies
- updated crates/panache-formatter to v0.9.0
- updated crates/panache-parser to v0.14.0
2.50.0 (2026-05-29)
Features
- lsp: honor config excludes in full doc format (
bbc1407) - linter: increase the reach of
stray-fenced-div-markers(a334951), closes #333 - lsp: code actions to convert links inline to reference (
e958a37), closes #331 - linter: add
link-text-is-urlrule with autolink autofix (1249e16), closes #331 - formatter: reflow grid table cells (
721b110), closes #323 - formatter: reflow multiline table cells (
5682db7), ref #323 - parser: reject yaml node property under parent key indent (
db371fd) - parser: reject yaml %YAML directive with malformed version (
557b116) - parser: reject invalid yaml block-scalar indent + tab-in-quoted (
e577390) - parser: detect tab-in-indent-slot in yaml
check_tab_as_indent(8b2ece9) - parser: reject yaml anchor in invalid positions (
c8b8d6d) - parser: reject yaml tag with c-flow-indicator char (
d83dca9) - parser: reject yaml anchor decorating alias node (
53289ca) - parser: dispatch yaml
!tagtokens in scanner (378a380) - parser: wrap indentless yaml seq when anchor decorates value (
a7ca3c1) - parser: propagate yaml anchors and aliases through flow projection (
5874f78) - parser: dispatch yaml
&anchor/*aliasin scanner (3959305) - parser: support flow collections as complex yaml keys (
f1799d2) - parser: reject yaml doc markers in flow and seq-item quoted dedent (
8eddfdc) - parser: reject doc-level comment-split plain scalar (BS4K) (
641313a)
Bug Fixes
- lsp: expose table reference to find-references (
a194b21) - linter: fix false positive on bookdown table reference (
773fcc1) - parser: don’t swallow space after inline code in emph (
adf92fa), closes #332 - linter: count reference images as definition uses (
56964e6), closes #325 - formatter: preserve grid table column widths (
c4d011b) - keep grid tables at column 0 to match pandoc (
73016e3) - add
inline-imagesto gfm flavor (8ade630) - parser: preserve
\<ws>escape arg and tab-as-content in yaml fold (c99c6a5) - parser: emit yaml anchor before tag in event projection (
26c0b5f) - parser: allow column-0 block scalar body at doc root (
a0f358c) - parser: reject YAML comment not preceded by space (
a6125c3) - parser: reject unterminated and over-indented YAML scalars (
23f855e)
Dependencies
- updated crates/panache-formatter to v0.8.0
- updated crates/panache-parser to v0.13.0
2.49.0 (2026-05-26)
The largest change in this release is likely a new wrap mode, semantic, which is a hybrid between sentence and preserve modes based on Semantic Line Breaks. You configure it by setting
[format]
wrap = "semantic"in the config. It will break lines at sentence boundaries, like the sentence mode, but also preserve existing break points. In the future, I expect to tailor some lint rules to the mode according to the sembr spec, but for now it is just a new wrap mode. Thanks to @BoltonBailey for the suggestion (#313).
This release also comes with support for a new extension, four-space-rule, which is a standard Pandoc extension (off by default) that enforces a four-space indent for continuation lines. This helps Panache play nicely with systems based on Python-Markdown, where this rule is enforced. Thanks to @DamonBayer for the suggestion in #308.
Finally, there are a number of smaller bug fixes and improvements to the parser and formatter, as well as new presets for external formatters (ormolu, biome, csharpier, mix, rustfmt, isort, runic, and stylua).
Features
- formatter: add
semanticwrap mode (41f7025), closes #313 - extensions: support
four-space-ruleextension (77768ba), closes #308 - formatter: add presets for csharpier, mix, ormulu, runic (
d6da0e0) - formatter: add presets for biome, isort, rustfmt, stylua (
f477d46) - formatter: add language-aware and configurable abbrevations (
ca9b514), closes #307
Bug Fixes
- parser: parse blockquotes flush against div fences (
faf7ad1), closes #310 and #309 - formatter: normalize smart dashes in headings, guard rule (
82c9a31) - parser: parse multiline tables in list+blockquote (
74896c6) - parser: recognize nested grid/simple tables (
feb5693) - parser: detect pipe tables in list+blockquote (
75a3157) - formatter: keep code spans and autolinks literal under smart (
7114c5d) - parser: walk chars in
advance_columns(c0f983b), closes #314, #315, #316, #317, #318, #319, #320, #321, and #322 - parser: enable reference links in GFM defaults (
581ebfb)
Dependencies
- updated crates/panache-formatter to v0.7.0
- updated crates/panache-parser to v0.12.0
2.48.0 (2026-05-20)
Features
Bug Fixes
- ci: pin linux-gnu binaries to a glibc 2.17 floor (
a1dfa9e), fixes #300 - cli: anchor exclude/include at the config’s directory (
24b948d) - config: anchor flavor-overrides at the unified project dir (
38f1a21) - lsp: floor citation completion window to char boundary (
8b79812), fixes #298 - parser: strip list+bq prefix on line-block lookahead (
280c6c1) - parser: use stripped content in def-list emit (
a8ba276) - parser: strip list+bq prefix on fenced-code lookahead (
bc0efc3) - linter: resolve
#ref-<citekey>anchors for cited keys (a0c0afd), closes #296 - parser: dispatch bq-in-listitem first-line HTML blocks (
bc32e49) - parser: dispatch bq-in-listitem first-line content (
c1c0db5) - parser: emit
BLOCK_QUOTE_MARKERfor bq continuations in footnotes (f24b787) - interpret a-j alphabetical list as one list (
bed78dd)
Dependencies
- updated crates/panache-formatter to v0.6.1
- updated crates/panache-parser to v0.11.0
2.47.0 (2026-05-17)
Features
- linter: add
footnote-ref-in-footnote-defrule (5976e68), closes #290 - linter: add
heading-eaten-attrs+heading-strip-comments-residue(966135d), closes #288 - formatter: trim trailing blanklines in fenced divs (
6d2fe6c) - formatter: add
{lang}and{ext}placeholders (b00c479) - formatter: add
""as configurable external formatter (31c0bcb), closes #287 - linter: add
crossref-as-link-targetrule (c2e649c), closes #285 - cli: revert
--line-widthetc, add--option/-o(cd49506) - remove unused
blank-linesoption (c23da16) - cli: add line width, wrap, and blankline to format (
2f3e593) - cli: add and honor
PANACHE_CACHE_HOMEenv variable (96d3cd6)
Bug Fixes
- parser: treat footnote refs inside footnote-def bodies as text (
1f37425), ref #290 - formatter: reflow
BRACKETED_SPANcontent (0aac341), closes #291 - parser: lift bq + multi-line
<div>open + same-line close (259241a) - parser: lift multi-line
<div>open + same-line close (61e1df1) - parser: widen
<div>lift for depth-aware and unclosed shapes (c7e4830) - parser: lift same-line HTML block with trailing text (
add805e) - formatter: collapse blank lines inside fenced divs (
eb52b1e), fixes #286 - parser: lift list-item Comment/PI trailing-text split (
50b4b45) - parser: demote indented isInlineTag to RawInline (
c0cf92b) - projector: strip RawBlock first-line indent (
926096e) - parser: bq-wrapped HTML comment/PI trailing split (
af26bdd) - parser: split Pandoc HTML comment / PI trailing-text (
3171eae) - parser: strip list-item indent for HTML-block lift (
f19ec57) - parser: lift multi-line HTML blocks as list-item (
faf5c85) - parser: lift same-line HTML block as sole list-item content (
cb0a2c1) - parser: route indented HTML close-tag bytes (
82bc43d) - parser: keep HTML_BLOCK on standalone
</div>close form (fe1cd9c) - parser: lift mutliline html tags with trailing bytes (
ea463f3) - parser: structurally lift multi-line HTML opens (
5d65a02) - parser: avoid HTML_BLOCK_DIV panic on multi-line div (
5613174) - parser: let blockquotes close lists properly (
88ca2c2), closes #292 - parser: handle
:-captions directly before:::(2f6a3ca)
Dependencies
- updated crates/panache-formatter to v0.6.0
- updated crates/panache-parser to v0.10.0
2.46.0 (2026-05-12)
Features
Bug Fixes
- cli+windows: cleanly handle tmp file removal (
d3aed21) - formatter: don’t strip
!exprin hashpipe yaml (f03ca70), closes #280 - parser: lift bq messy-shape HTML bodies into CST (
e923d7c) - parser: lift bq same-line HTML body into CST (
1ba1b1e) - parser: expose HTML_ATTRS for non-div strict-block tags in bq (
2bd4542) - parser: extend bq HTML lift to non-div and inline-block (
8b88578) - parser: lift bq-wrapped clean
<div>body into CST (4bc4612) - parser: lift matched-pair inline-block HTML bodies into CST (
f335b42), fix #4 - parser: lift multi-line non-div strict-block HTML opens into CST (
59a5f91) - parser: lift non-div strict-block butted-close shapes into CST (
98767ab), fix #4 - parser: lift inner strict-block HTML elements into CST (
3f6f644) - projector: lift empty
<div>into structural CST walk (179a681), fix #4 - projector: strip blockquote markers from HTML block bodies (
47e6c38) - parser: lift same-line
<div>shapes into CST (33b6297) - parser: lift messy
<div>shapes into CST (4c03405) - parser: lift inner
<div>elements into CST (1b37801) - parser: mirror Pandoc’s
isInlineTagfor<script>(ba9c96f) - parser,formatter: don’t escape
[,](26bbb1c) - parser: capture citation inside reference (
c6685f4), closes #278 - parser: correctly merge unevenly indented lists (
b661b61), fixes #277 - parser: closer cannot interrupt under pandoc (
74d333a) - parser: don’t let
<style>tags interrupt under pandoc (b77db95) - parser: fix plain/paragraph handling for html in parser (
d7745dd) - parser: accept correct tags for Pandoc’s closing-forms (
7ab94d1) - parser: match Pandoc on closing forms of inline blocks (
525cdf4) - parser: handle multi-line void open tag (
05b369d) - parser: handle infinite recursion in incomplete tags (
95c95bf) - parser: handle Pandoc’s void block tags (
a327162) - parser: handle context-aware block/inline dispatcher (
1b8330d) - parser: don’t hardcode
<divinto CST (7c6515e) - parser: fix dialect-divergence in pandoc/commonmark (
3a81ac2) - formatter: don’t skip
PLAINin second pass (a693f40), closes #279
Dependencies
- updated crates/panache-formatter to v0.5.1
- updated crates/panache-parser to v0.9.0
2.45.0 (2026-05-09)
Features
Bug Fixes
Dependencies
- updated crates/panache-formatter to v0.5.0
- updated crates/panache-parser to v0.8.0
2.44.0 (2026-05-07)
Features
Bug Fixes
2.43.1 (2026-05-06)
Bug Fixes
- editors: vsix publishing step (
a0d602c)
2.43.0 (2026-05-06)
Features
Bug Fixes
Dependencies
- updated crates/panache-parser to v0.7.1
2.42.1 (2026-05-05)
Bug Fixes
- editors: remove links in docs to pass vs code check (
f9240fb)
2.42.0 (2026-05-05)
Features
- linter: add linting rule for bad HTML entities (
93aa280), closes #251 - wire new reference impl into salsa and CST (
3ba22c1) - add
parse_with_refdefsandUNRESOLVED_REFERENCE(e6c17fb) - cli: add
panache parse --to pandoc-astoutput mode (f0f9ace) - parser: expose pandoc-native projector as public API (
5b79b92) - editors: add
executableStrategy, deprecate old options (884a3c4) - editors: add log-level setting (
a6cf4c7) - editors: add restart server command (
ab5cfb0) - editors: register as default formatter for rmd & qmd (
889d640)
Bug Fixes
- parser: degrade unresolved bracket if inner emph leaks (
e1c291b), closes #250 - handle ambiguous markers and indented code block (
8d3db6d) - parser: allow drift tolerance for list parsing (
1836a7b), closes #246 - formatter: handle nexted list with same line marker (
8d0653a), closes #247 - parser: handle tilde-fences dispatch correctly (
519abd1), closes #248 - cli: link to correct reference page for rules (
c807d70), closes #245 - recursive into linst/blockquote/list (
175d78e) - handle lazy-continuation for blockquote + list (
4a490ff) - allow continuation list without blank line in definition (
daed645) - peek-ahead in blankline in blockquote (
74adea6) - handle pandoc-commonmark divergence on html comments (
ca301f9) - handle same-line block quote marker (
3c6c3dd) - parser: handle direct list-in-lis correctly (
5c6a4ae) - correctly handle definition inside footnote (
3a30b05) - correctly parse and format definition with bare list (
72c9a2b) - parse and format headings inside lists (
d7e714e) - parser: fix early-bail to not fire incor for strikeout (
f486309) - parser: require two spaces after roman marker (
8d7255f) - parser: allow unindented block to follow atx heading (
bf84aa1) - parser: fix byte-order breakage in tilde-fenced code (
18ca6c2), closes #249 - editors: update package lock file and get rid off uuid (
b02ef2c)
Performance Improvements
- lsp: share salsa-cached refdef set across LSP keystroke parses (
e1e2927)
Dependencies
- updated crates/panache-formatter to v0.4.2
- updated crates/panache-parser to v0.7.0
2.41.1 (2026-05-01)
Bug Fixes
- formatter: extend block-token list (
d087729), closes #238 - parser: suppress nested links in Pandoc link text (
b8e1c9a), bugs #1 and #2 - parser: handle Pandoc emphasis on the IR path (
afa0ef5) - parser: finish milestone - full commonmark compliance (
33a88e8) - parser: implement IR algorithm (
bb91c85) - formatter,parser: handle setext in list (
86494b5) - parser: fix emphasis parsing for cmark (
de1b406) - parser: handle empty maker followed by indented content (
6a9b188) - parser: open inline blockquote for commonmark (
a2ad903) - parser: handle rule of 5 cols for commonmark (
dcb36e6) - parser: honor source-column tab stops (
15ebe05) - parser: make fenced code openers interrupt paragraphs (
f9a3b50) - parser: handle two tab cases in commonmark tests (
3bf2140) - parser: don’t allow links to contain links in cmark (
52eb5f2) - parser: handle last HTML block edge case (
3a13337) - parser: handle dialect-specific list item closing (
c61f93b) - parser: handle last refdef dialect mismatch (
245543b) - parser: handle last block quote discrepancy in cmark (
0fce82a) - parser: correctly handle non-uniform list indents (
f7750dd) - parser: handle continuation in block quote better (
2f209e5) - parser: implement better link scanning (
eaca3a1) - parser: don’t skip code spans in closer scan (
687e908) - parser: allow partial emphasis matching for commonmark (
e172b52) - parser: recurse inte same-line nested lists markers (
ac05e88) - parser: handle emphasis edge case (
1b13a73) - parser: improve cmark emphasis parsing (
95b2811) - parser: handle edge-cases for cmark emphasis (
be57d7d) - maintain list markers for commonmark (
084fc87) - parser: relax indented-code opener (
c0dcfb7) - parser: support multiline setext headings (
4b4e1a3) - parser: handle parser losslessnes from emphasis (
0104a7c) - parser: don’t let
]terminate a link inside code span (18e028d) - parser: fix parenthesis tracking (
d37ba7d) - parser: properly handle multilevel ref def (
50f28f4)
Performance Improvements
- parser: add IR-driven dispatch for Pandoc links/images (
1e4227e) - parser: add IR-driven dispatch for [text]{attrs} (
cf50ec5) - parser: add IR-driven dispatch for citations (
9e826db) - parser: add IR-driven dispatch for
[^id]footnote refs (614221e) - parser: add IR-driven dispatch for
^[note]and<span>(1b9e618) - parser: early-exit + scratch reuse (
c2c0387) - parser: add leading-byte gate (
c851afe) - parser: add byte-level blank-line check (
7530c25) - parser: add byte-level link-suffix whitespace skips (
89b31e4) - parser: skip exclusion-mask pass when no brackets (
92ec5db) - parser: byte-level is_blank_line on blank-check paths (
fab385e) - parser: leading-byte gate in collect_refdef_labels (
7058785) - parser: zero-alloc Roman numeral check (
ff4d3eb) - parser: leading-byte gates on hot block parsers (
57f9f69) - parser: memchr-based code-span scan + zero-alloc (
490d593) - parser: byte-level trim helpers on hot per-line paths (
a63a02a) - improve performance on the IR path (
44d6d5b)
Dependencies
- updated crates/panache-formatter to v0.4.1
- updated crates/panache-parser to v0.6.1
2.41.0 (2026-04-29)
Features
Bug Fixes
- parser: respect escapes inside reference definitions (
2ec4025) - parser: allow fancy lists in core cmark, improve logic (
191f636) - parser: don’t allow ref defs to break paragraphs (
b05e3f3) - parser: allow breaks in reference links (
7da4875) - parser: for cmark, cap digits for lists at 1-9 (
39ba64b) - parser: correctly handle empty list items (
1143607) - parser: properly handle fenced code inside list items (
6b6ccdd) - parser: make blanklines inside list item a loose list (
23d7a90) - parser: handle ruler as only list item (
a1004e6) - parser: handle thematic breaks and setext headings (
a02c3d5) - parser: handle autolinks and blockquotes for cmark (
b1cedd4) - parser: handle HTML blocks for pandoc/commonmark (
227648e) - parser: handle pandoc/cmark difference in fenced code (
b370edd) - parser: handle backslash escapes, autolinks, empty code (
317b150) - parser: allow space after atx and any length setext (
647d274) - parser: enable
all_symbols_escapablefor commonmark (04c52d7) - formatter: ensure blankline before header in commonmark (
fd96f2a) - handle thematic breaks in commonmark correctly (
f98fca0) - parser: fix image link handling in commonmark (
cac6004) - parser: preserve entity references in cmark (
0ae7579) - parser: handle ATX headings in commonmark correctly (
8c09c19) - parser: add extensions to commonmark flavor (
59166ab) - parser: don’t emit synthethic token (
a137fc4), closes #235
Dependencies
- updated crates/panache-formatter to v0.4.0
- updated crates/panache-parser to v0.6.0
2.40.0 (2026-04-27)
Features
Bug Fixes
Dependencies
- updated crates/panache-parser to v0.5.1
2.39.0 (2026-04-27)
Features
Bug Fixes
Dependencies
- updated crates/panache-formatter to v0.3.0
- updated crates/panache-parser to v0.5.0
2.38.0 (2026-04-24)
Features
Bug Fixes
- formatter: don’t break display math inside emphasis (
d2eee34), closes #214 - formatter: handle nested lists with continuation (
185fa02), closes #212 - parser: don’t let definition list adopt trailing list (
b2fba48) - properly parse and format blockquote markers in deflist (
b27eeb7), closes #209 - lsp: only complete real
@-type references (0419b45) - formatter: strip whitespace from code in list (
b1b60c0) - parser: allow Rcpp as known language in hahspipe parse (
0fd5979) - lsp: don’t lowercase bib entries (
2ee14d9) - formatter: allow
Rcppas language for clang-format (521e087) - linter: correctly normalize bookdown equation label (
dd7b736) - lsp: harden go-to-definition/reference triggers (
16a9364) - linter: don’t mix references with chunk labels (
077db86) - handle UTF-8 boundary bug in table parsing (
2c4e20f), closes #211 - parser: correctly emit blanklines in tables/captions (
0465f45), closes #210
2.37.0 (2026-04-22)
Features
Bug Fixes
- parser: don’t parse caption as definition (
e542c1f) - greedily consume table captions (
58afc1c) - parser: handle empty lines in hashpipe normalizer (
51e6146), closes #201 - parser: don’t drop adjacent table caption (
9144d63), closes #200 - lsp: handle nagivation URI correctly on windows (
63f317e) - formatter: correctly handle blanklines in blockquote (
834757c), fixes #199 - formatter: handle blank line before fenced code (
e7337fd), closes #198 - formatter: strip trailing whitespace in hashpipe flow (
9757c2f), fixes #194 - parser: correctly parse deep list in blockquote (
51484ac), closes #195 - formatter: quote ambiguous labels in hashpipe conversion (
e473944), closes #192 - avoid wrapping on fancy markers in unsafe contexts (
4de13dd), closes #193 - formatter: handle citation spacing correctly (
543aa46), ref #193 - formatter: don’t collapse whitespace in hashpipe yaml (
5d4b5d2), closes #185 - parser: handle varying indentation for blockquotes (
cdd3eec), closes #186 - formatter: add list markers to unsafe wrappers (
a7f1ed5), closes #187 - formatter: normalize scalars to avoid idempotency issue (
da9e3a0), closes #189 - parser: accept empty headings (
d081dd7) - parser: properly handle adjacent tables (
6206623) - parser: don’t treat
:table caption as def list (a287631) - parser: handle bare URI in gfm flavor properly (
2559a99), closes #197 - parser: fix logic around
blank_before_header(c8f48c9) - parser: handle bare
#|comments (1a7d009), fixes #188 and #190
2.36.0 (2026-04-19)
Features
Bug Fixes
- avoid special normalization of yaml and hashpipe items (
d8bfb76) - formatter: handle list-in-blockquote idempotency issue (
3d20ce4), closes #177 - handle idempotency in hashpipe yaml reconstruction (
b28d675), closes #172 - parser: parse display math over paragraph boundary (
b5c9be2), closes #176 - parser: handle utf-8 slicing in inline spans (
8ccfe5c), closes #175 - parser: flush list-item inline buffer (
a49179b), closes #174 - parser: enable
inline_linkfor GFM flavor (8059792), closes #171 - update cargo lock file (
3fc4d9b)
2.35.0 (2026-04-16)
Features
- add info-level debugging logs for external formatters (
6228b55)
Bug Fixes
- switch back to
v*tagging for main program (9adc923) - parser: handle utf-8 properly (
92da1cd), closes #164 - lsp: remove extra space in tasklist-bullet list action (
6cc80b3) - lsp: convert to actual task list (
233f47c) - parser: handle utf-8 properly (
92da1cd), closes #164 - switch back to
v*tagging for main program (9adc923) - switch back to
v*tagging for main program (9adc923)
2.34.0 (2026-04-14)
Features
Dependencies
- The following workspace dependencies were updated
- dependencies
- panache-parser bumped from 0.2.1 to 0.3.0
- dependencies
2.33.1 (2026-04-14)
Bug Fixes
- formatter: avoid reflow-induced reparsing (388b288), closes #134
- formatter: prevent reinterpreting parse avoiding wrap (fbf7733)
- parser: handle deep indentation and roman nos in list (04b80f5), closes #143
- parser: handle deep roman list and quotation (b7aac81), closes #137
- scripts: correctly resolve tag in installation scripts (5b474fc)
Reverts
- “chore: don’t include component in tag for root release” (eb9e15f)
Dependencies
- The following workspace dependencies were updated
- dependencies
- panache-parser bumped from 0.2.0 to 0.2.1
- dependencies
2.33.0 (2026-04-13)
Features
Bug Fixes
- cli: change
RUFF_CACHE_DIRtoPANACHE_CACHE_DIR(644480b) - formatter: don’t allow
([@sec](https://github.com/sec))to wrap to new line (215a9c1), closes #138 - formatter: fix block quote marker leakage into emphasis (b5deeb3)
- formatter: improve citation and hashpipe handling (768c741)
- formatters: use proper extensions for external format (9fd9ab9)
- parser: fix continuation detection in indented context (4f1e51d), closes #139
- parser: fix losslessness bug in grid table parsing (28f47dd), closes #132
- parser: fix missing whitespace in nested fenced code (426aa87)
- parser: mitigate infinite recursion in line block (612dc80)
- parser: mitigate UTF-8 panic in hashpipe path (26c702d), closes #135
- parser: preserve nonbreaking spaces in parser (8c1756b)
- parser: properly handle blandlines inside display math (1e37724), closes #130
Performance Improvements
- parser: move inline math tracking into container stack (5df8308)
Reverts
Dependencies
- The following workspace dependencies were updated
- dependencies
- panache-parser bumped from 0.1.0 to 0.2.0
- dependencies
2.32.0 (2026-04-09)
Features
- config: more presets and add metadata (8623393)
- editors: add Zed extension (c87e45d), closes #102
- formatter: contextual abbreviaton rules for wrapping (1cf1a57)
- formatter: indent tables by two spaces (864cc25), closes #89
- formatter: presets for sqlfmt, alejandra, etc (75f3df3)
- formatter: reinstate wrapping in footnotes (6bc8be1)
- formatter: wrap table captions (84a7fd1)
- implement caching for linting and formatting (db37713)
Bug Fixes
- cli: unify missing linters/formatters (20c06c7)
- formatter: fix idempotency issue with lists and images (9a4c5ae)
- formatter: handle idempotency issues in YAML, divs (100f94c)
- formatter: handle inline footnote newline wrapping (b65a1f2)
- formatter: setup proper rules for sentence wrapping (4227f3a), closes #113
- formatter: treat code as non-breakable in sentence wrap (482fe61)
- formatter: use pandoc blankline normalization in divs (8491e97)
- formatting: slacken non-breaking code logic (131bc56)
- linter: pass explicit shell dialect for shellsheck (2d8c065)
- parser: handle complex fenced div case (34e6e8c)
- workaround ambiguous fenced div idempotency (19409ce)
2.31.0 (2026-04-02)
Features
- linter: add ruff as external linter (a0506b6)
- linter: add support for eslint external linter (4d51e97)
- linter: attach notes to external lints (954dbd9)
- linter: restrict external linters by language (92a812c)
- linters: support shellsheck as external linter (6875102)
- linter: support clippy as external linter (db3340f)
- linter: support shellsheck as external linter (e84c323)
- linter: support staticcheck as external linter (d665b04)
- lsp: add source action for linting (01722b3)
- lsp: use exact mappings for code action on ext linter (5b905ef)
Bug Fixes
2.30.0 (2026-04-01)
Features
Bug Fixes
2.29.0 (2026-03-28)
Features
- formatter: separate top-level lists with blankline (777e090)
- lsp,config: add suppor for
gfm-auto-identifiers(31736da) - lsp: add file renaming for linked documents (8a7d08a)
- lsp: add hover support for for heading references (3ca2b24)
- lsp: add hover support for linked markdown files (4d88705)
- lsp: add hover support for reference definitions (16bdd6f)
- lsp: add rename handler for footnote ids (42be81d)
- lsp: code action for converting bullet/ordered lists (d620006)
- lsp: code action for converting list to task list (f04e91e)
- lsp: extend file rename to shortcodes and nav elements (492877f)
- lsp: support go-to-definition for example lists (b7fbc19)
- lsp: support renaming for example references (15f6267)
- parser: parse yaml comments (8b8e731)
- support
mmd-header-identifiersextension (ffe7834) - support
mmd-link-attributesextension (5b44f9e) - support
mmd-title-blockextension (276e31c)
Bug Fixes
- formatter: handle idempotency failure with AUTO_LINK (94c6c95)
- formatter: mitigate idempotency growth in hashpipe yaml (82a3da1)
- lsp,linter: correctly resolve cross-reference to header (c3a42cd)
- parser: actually enable
hard-line-breaksextension (70c9201) - parser: add missing code block extensions for gfm flavor (1058df6)
2.28.0 (2026-03-25)
Features
Bug Fixes
- formatter: wrap and space blockquote in deflist (22409e9)
- lsp: don’t allow slugs in implicit links (e7926fa)
- lsp: resolve go-to-headin for implicit links (13fb0c4)
- parser: emit list item buffer in nested def list (9342463)
- parser: handle nested lazy lists in definition lists (7b32604)
- wasm: clean up and fix some warnings (1261e92)
2.27.0 (2026-03-24)
Features
- cli: don’t error when running on glob or dir (99e0440)
- formatter: format definition lists like pandoc (8d96a40)
- formatter: format nested headings (75a74b3)
- formatter: normalize loose and compact definitions (21b3c87)
- lsp: filter headings in document symbols (c6af6bb)
- lsp: introduce incremental parsing as experimental opt (5be6df6)
Bug Fixes
- check LINK_REF first (91ee195)
- config: match includes/excludes relative to config root (db2f95d)
- parser: encapsulate multiple definition list items (e28fda6)
- parser: handle list as first lement in definition (5871252)
- parser: parse headings in definition list items (3aa9686)
- parser: parse headings in list items (55e5632)
- pre-commit: remove pandoc submodule (5baed02), closes #92
Performance Improvements
2.26.0 (2026-03-21)
Features
Bug Fixes
2.25.0 (2026-03-20)
Features
Bug Fixes
- formatter: don’t interpret ````markdown as fenced code (9e17ebc)
- formatter: preserve markers in headerless table (62ec59a)
- formatter: recover lost indentation in code block (2f94707)
- formatter: restrict yaml frontmatter replacement (7e9bf72)
- lsp: correctly handle renaiming (b5c0b5b)
- lsp: limit highlight of definition to actual label (e377024)
- parser,formatter: fix regression in definition list (10a2cd7)
- parser: don’t treat continuation as code block (927efeb)
- parser: fix losslessness bug in empty definition (4ede2f8)
- parser: match pandoc’s rules for list item identation (c15688d)
2.24.1 (2026-03-19)
Bug Fixes
2.24.0 (2026-03-19)
Features
2.23.0 (2026-03-18)
Features
Bug Fixes
2.22.0 (2026-03-17)
Features
Bug Fixes
2.21.0 (2026-03-16)
Features
- build binaries for linux musl too (d6ada87)
- build binaries for windows arm too (05f8c46)
- cli: add
--message-format <fmt>for linter (2eafc8c) - config: add
[format]as replacement for[style](c86ef90) - config: add include, exclude, extend-include/exclude (0d3a05e), closes #71
- config: expose
auto-identifiersextension (bdf0081) - config: move rules to
[lint.rules]category (6fc9ade) - formatter: drop blanklines at start of document (e784c3d)
- formatter: remove code block config options (3dd5846)
- linter: add contextual hint for heading hierarchy lint (1ce7a18)
- linter: improve lint display (bd74591)
- lsp: adapt project graphs to
project.rendersettings (be63ee9) - parser,linter: add support for github emojis
:smile:(116fad2)
Bug Fixes
Performance Improvements
- editors: bundle vsix extension and use esbuild (815635c)
2.20.0 (2026-03-13)
Features
- linter: add linting rule for missing code chunk labels (a8f4709), closes #68
- linter: add rule for duplicate chunk labels (50806ba)
- lsp: add find-references support for crossrefs (475bd94)
- lsp: add go-to-def, rename for exec chunk labels (5f4367d)
- lsp: extend find-references to citations (ec2d328)
- parser: parse in-comment execution options (35c772d)
Bug Fixes
- parser: handle unicode properly (5886d05)
2.19.0 (2026-03-12)
Features
Bug Fixes
2.18.0 (2026-03-12)
Features
Bug Fixes
2.17.0 (2026-03-11)
Features
Performance Improvements
- formatter: use built-in greedy wrapper (ac73a3a)
2.16.0 (2026-03-11)
Features
Bug Fixes
2.15.0 (2026-03-10)
Features
- formatter: normalize indented tables (c4b394f)
Bug Fixes
- formatter: fix idempotency around table caption (aad08f6)
- formatter: fix idempotency failure with display math (d7e2b47)
- formatter: fix idempotency issue in hard break in list (1b46852)
- formatter: fix idempotency issue with display math (f47edc9)
- formatter: handle footer and multirow grid tables (821e54f)
- formatter: handle idempotency in code span formatting (188d10f)
- formatter: handle idempotency with blockquote marker (854b5fe)
- formatter: handle tex blocks properly in formatter (04ad902)
- formatter: preserve malformed display math with dollars (78e2907)
- formatter: protect inline math spaces (d6470b6)
- parser,formatter: handle consecutive tables (f1a4c08)
- parser,formatter: harden grid table parsing (05bdab9)
- parser: don’t hardcode emphasis markers (ce7125e)
- parser: parse whitespace after code block starter (3d28e74)
2.14.1 (2026-03-10)
Bug Fixes
- formatter: correct list idempotency (3b0db0e)
- formatter: fix idempotency failure in atx headings (6a61caf)
- formatter: handle div in loose list (6514e58)
- formatter: handle escaped char inside table (130df6f)
- formatter: handle horizontal before setext heading (225d7b2)
- formatter: handle non-ASCI able content (4ea70f4)
- formatter: handle underscore emphasis with nested asterisks (71f41b0)
- formatter: subdue blockquote marker after hard break (e3b53c9)
- parser,formatter: tighten code fence logic (9c1ffcc)
- parser: allow fenced blocks to interrupt paragraphs (0e521b5)
- parser: allow references with leading spaces (9051331)
- parser: avoid stealing captions as definition items (22855d0)
- parser: cater to spanning-style rows (57e3ab3)
- parser: don’t interpret continuation line as list (af73bd4)
- parser: emit leading spaces before rule (8d58381)
- parser: emit original line block marker (0866449)
- parser: fix backtick-parsing in attributes (5f82e22)
- parser: handle table with complex layout (47fd1a3)
- parser: honor
blank-before-headerextension (c1f3571) - parser: preserve leading whitespace before fences (7f12c62)
- parser: relax fence block detection (6cc356d)
2.14.0 (2026-03-09)
Features
Bug Fixes
- formatter: apply block code formatting inline (5d76bea)
- formatter: don’t line break after initials (3030451)
- formatter: fix idempotency in fancy list formatting (f5c6509)
- formatter: handle crossref in blockquote (2b4e729)
- formatter: handle empty cells in grid tables (ecc7515)
- formatter: harden external formatting (2946761)
- formatter: require blankline before line block (0589776)
- parser: correctly parse trailing
#(942c1fa) - parser: don’t drop trailing whitespace in fenced div (7bd2d31)
- parser: don’t require blankline before fenced div (f17c3aa)
- parser: don’t trim trailing space in definition (edeae6f)
- parser: handle line block inside grid table (100ebed)
- parser: handle list inside blockquote (e20e756)
- parser: handle rows exceeding separator width (4a42c63)
- parser: handle shortcode in heading (200bfd8)
- parser: handle spaces in indented code block (cdbf952)
- parser: handle table after div close (a4c2940)
- parser: handle trailing whitespace in grid table (0677abb)
- parser: handle unicode in shortcode (7f603dc)
- parser: parse indented block in block quote losslessly (bbd2f86)
- paser: don’t trim trailing whitespace after marker (32e9734)
Performance Improvements
- lsp: add lazy definition and hover handling (69f7cce)
- lsp: add LRU tuning (7a5d439)
- lsp: derive lint and metadata diagnostics through salsa (4ede8cb)
- lsp: introduce durability macros into graph (b74248e)
- lsp: unify lint pipeline to avoid duplicate parse (070e7f5)
- lsp: use
salsa::internedfor project graph intternally (996be36)
2.13.0 (2026-03-07)
Features
Bug Fixes
- formatter: fix wrapping for definition lists (4dd084b)
- formatter: omit quarto/knitr comments from formatting (36ceccb)
- formatter: use correct ruff args (408d330), closes #46
- linter: mitigate spurious warning for quarto crossrefs (a0e0769)
- lsp,linter: correct bib file found range, deduplicate (9d5dfbb)
- parser,formatter: align with pandoc’s fenced div parse (1982972)
- parser: fix infinite recursiong bug in tex cmd parse (1f71833)
- parser: handle tab stops gracefully (9f8aa96)
- parser: only accept four spaces-indented def lists (11fb109)
Performance Improvements
2.12.0 (2026-03-05)
Features
Bug Fixes
- fix compilation error (194858a)
- formatter: handle indentation in indented code blocks (9112856)
- handle code block on first line of definition item (4bb42f5)
- lsp: expand selection for edit range to top-level block (0a39399)
- lsp: improve expansion handling for range formatting (11c4d51)
- lsp: replace correct segment when using range format (5968b6a)
- parser, formatter: correctly handle blocks in deflist (4ffc8bc)
- parser,formatter: handle loose/compact definitions (063f9f3), closes #45
- parser: don’t treat indented lists and code blocks (7b14077)
- parser: require blankline before list in definition (ac971c0)
- resolve bibliography paths relative to metadata files (3a878bc), closes #44
2.11.0 (2026-03-04)
Features
- add support for implicit header references (d9fe4a3)
- formatter: add preset for clang-format (d3f2a60)
- formatter: add preset for shfmt (83143a2)
- formatter: add preset for taplo TOML formatter (d5b83e5)
- lsp,linter: add support for inline YAML references (08c141d)
- lsp,linter: enable bookdown project integration (315bc50)
- lsp,linter: support diagnostics and more for includes (15b61fc)
- lsp,linter: use project and metadata files (3ed27fb)
- lsp: add go-to-def handler for crossrefs (35c2a06)
- lsp: add renaming support for bibliography entries (7bb30d0)
- lsp: handle quarto cross-references separately (086e6ed)
- lsp: maintain project-wide state (6ea5356)
- parser: support bookdown crossref syntax (45ef2eb)
Bug Fixes
- formatter: handle equation attributes with line after (eecf1a5)
- lsp,linter: deduplicate bibliography entries (6602569)
- lsp: fix duplicate bibliography issue (7f85ff7)
- lsp: show correct lines for bib diagnostics (30177ae)
- lsp: use platform-independent file Uris (658c3a4)
- lsp: use platform-independent URIs (2aecf8e)
- parser, formatter: don’t wrap latex commands (619dea5)
2.10.0 (2026-03-03)
Features
Bug Fixes
2.9.0 (2026-03-02)
Features
- formatter: normalize links to match pandoc (3b5fdce)
Bug Fixes
2.8.0 (2026-03-02)
Features
Bug Fixes
2.8.0 (2026-03-02)
Features
Bug Fixes
2.7.0 (2026-03-01)
Features
Bug Fixes
Performance Improvements
- lsp: add incremental parsing (b804ee9)
2.6.3 (2026-02-27)
Performance Improvements
2.6.2 (2026-02-27)
Bug Fixes
2.6.1 (2026-02-25)
Bug Fixes
- parser: handle complex emphasis cases (f7fe514)
2.6.0 (2026-02-20)
Features
- config: add
[style]section, deprecate old version (2b83231) - config: add
append_argsandprepend_args(56cb4c1) - config: allow partial overrides (d53e1d0)
- config: flavor-independent code block styling (5c14f2f)
- config: remove pointless
min_fence_length(4204ed5) - config: remove unused
normalize_indented(da087e4) - config: use
[formatters.<formatter]style (7d91023) - formatter: don’t assume
#|for unknown language (b50f3ab) - formatter: format simple tables (5d048c6)
- formatter: support ojs, mermaid, dot in hashpipe conversion (8695ae2)
- formatter: trim trailing blanklines (6e7cd61)
- linter: add rule for duplicate references (97fbc8a)
- lsp: add convert to loose/compact list code action (a63c104)
- lsp: convert between footnote styles (2fe5030)
- lsp: enable footnote preview on hover (d25c74a)
- parser: drop
ROOTnode from AST tree (6c9bd8f) - parser: parse
](in links and images (73a8da0) - update wasm build (ff6acd9)
Bug Fixes
- config: override code block flavor defaults (4023e29)
- formatter: concatenate successive blanklines (5e1c06a)
- formatter: correct alignment in multline tables (04c9ad6)
- formatter: fix idempotency issue in table formatting (fe4af95)
- formatter: handle attributes correctly in code blocks (6228182)
- parser: avoid parsing expressions (69bea2b)
- parser: correctly parse multiline captions before table (c8389d4)
- parser: don’t parse links in
CODE_INFO(2f10b8b) - wasm: guard yaml formatter behind wasm flag (063143c)
2.5.1 (2026-02-18)
Bug Fixes
2.5.0 (2026-02-17)
Features
Bug Fixes
- config: override flavor defaults (8fe291b)
- formatter: strip newline for external yaml format (3d54b3e)
- parser: correctly parse lists with different markers (273ba39)
- parser: handle lazy lists with blanklines (9d82a92)
- parser: parse blanklines away from plain nodes (e7972ee)
- parser: parse display math if begin/ends on delim line (ef16594)
2.4.0 (2026-02-15)
Features
Bug Fixes
- formatter: wrap first lines in definition lists (3ad7576)
2.3.0 (2026-02-14)
Features
- cli: add support for external linters (c1937de), closes #23
- formatter: add support for formatting grid tables (ef47bac)
- lsp: add go to definition for links, images, footnotes (d749424)
- lsp: add support for external linters (just jarl for r now) (5162096)
- lsp: implement
textDocment/foldingRange(7ce6ce2) - parser: parse code block language as token (c29016e)
- parser: preseve LF and CRLF line endings (a470713)
Bug Fixes
- formatter: handle unicode in table formatting (44f4bcf)
- formatter: honor “line-ending” configuration option (248e2f2)
- lsp: correctly detect flavor in document symbols (60af5b4)
- parser: consistently handly CRLF line endings (6b43c9c)
- parser: correctly parse captions before tables (2cb9e2d)
- wasm: fix wasm build by fixing command invocation (a9a29a7)
2.2.0 (2026-02-13)
Features
Bug Fixes
2.1.0 (2026-02-12)
Features
- lsp: add initial support for document symbols (81a7ef9)
Bug Fixes
2.0.0 (2026-02-12)
⚠ BREAKING CHANGES
- change external formatting to be opt-in
Features
- add presets for external formatters (70b297a)
- add range formatting (902cb95)
- change external formatting to be opt-in (8d91753)
- formatter: standardize unordered lists to
-marker (33ae608) - implement a linter (4af0d5e)
- implement wrapping for links and images (929f993)
- lsp: integrate linter with LSP server (f0ae3e9)
Bug Fixes
- correctly deal with nested lists in definitions (5f00893)
- correctly delegate non-stdin formatters (869d473)
- correctly praser backslash-escaped math (c28cdc5)
- don’t use defunct
--writeflag (bbe3291) - fix bug in flavor deserialization (3e40177)
- fix clippy problems (5996d90)
- fix erroneous handling of blanklines in indented code (d058b61)
- fix some linting issues (11fc9a7)
- handle code blocks nested in lists (761737d)
- lsp: correctly compute range to replace (056f5cc)
- properly emit table blanklines into AST (c48fc9e)
- properly handle code blocks in lists (42930e0)
- refactor parser to capture lossless tree (9bbfd9f)
- use async formatter in LSP formatting (8efbb1a)
1.0.0 (2026-02-11)
⚠ BREAKING CHANGES
- force subcommand use, add config to parse
- use block parser in formatter
- rename WrapMode options
- change second argument in
format()toConfig
Features
- add
blank_linesoption (c1080a4) - add
CodeSpanto syntax (4e63609) - add
parse()function (18b85ac) - add a block parser (200965d)
- add a LSP (5befe3d)
- add automatic flavor detection and configuration settings (bf96aee)
- add basic formatter (de69b6c)
- add blank line after headings (ee6f3e9)
- add completion (7b74ed3)
- add emphasis (c348dd2)
- add formatter playground (2cd7148)
- add line ending normalization and detection (2e06143)
- add parse subcommand (f220fb3)
- add placeholder for inline parser (891883d)
- add support for footnote references (cdbd4f8)
- add support for link attributes (8ee3d98)
- add support for using remporary files with extformat (b7f68a1)
- break math blocks onto separate lines (7727bba)
- change second argument in
format()toConfig(3f993e8) - corectly parse inline math (085081c)
- create custom paragraph wrapper (15a1203)
- enable bracketed spans and native spans by default (788009c)
- enable configurable backlash math support (a207b1f)
- force subcommand use, add config to parse (0fe779f)
- handle headerless simple tables (e346cf1)
- handle labels after equations (826b61b)
- implement backslash escape sequences (8140e7f)
- implement code fences in block parser (0c04bce)
- implement config system for extensions (8b3c02b)
- implement inline code span parsing (00ed086)
- implement inline math parsing (3fa4ca0)
- implement line blocks (56e285d)
- improve handling of frontmatter in lexer and parser (a4f0821)
- make block parser recursive (60b0438)
- normalize emphasis (6ba2061)
- package as flake (b24730b)
- parse
BlankLinein lexer (d727494) - parse and format headings (cc4f95c)
- parse div blocks (df2e717)
- parse horizontal rules (9b48280)
- parse inline math as part of syntax (d8ce545)
- partially implement reference links (93fa82d)
- properly format code blocks (9e8e256)
- rename package to panache (e64efb4)
- rename WrapMode options (f6a6b55)
- show nice diffs with
--checkargument (807428c) - suppor bracketed spans (55668d3)
- support citations (4d30e28)
- support definition lists (3c64756)
- support display math (88a2d4a)
- support example lists (84a5ed6)
- support external formatting (10aed07)
- support fancy lists (4b41828)
- support fenced divs (cf2bafa)
- support formatting for pipe tables (ce4378f)
- support grid tables (642a8a3)
- support header attributes (daa3fca)
- support horizontal rules (362357a)
- support image attributes (f67f682)
- support images (3b76a50)
- support indented code blocks (097239b)
- support inline code attributes (0feac47)
- support inline footnotes (c54bd3b)
- support inline footnotes (e379f65)
- support inline latex (81d7ee0)
- support inline links (9d052dd)
- support inline raw attributes (189ded7)
- support latex blocks (e211119)
- support lazy block quotes (6fa9e53)
- support lists (e650b12)
- support metadata blocks (7e4d320)
- support multiline tables (0ecdf67)
- support native spans (f57bdf2)
- support pipe tables (a9730cc)
- support raw blocks (c17761e)
- support raw html (1839481)
- support reference images and links (0a5389d)
- support simple tables (7f808ca)
- support simple tables (dba5cbf)
- support single and double backslash math (9a72c6a)
- support strikethrough (5e4cb3b)
- support sub- and superscript (e313a81)
- support table captions (22240c5)
- use
rmarkdownnotr-markdown(235363f) - use block parser in formatter (60cb5b4)
Bug Fixes
- add basic handling of comments (578f72f)
- add missing stdin field (4e27a82)
- add support for tex commands (21c2f9b)
- allow multiple frontmatter blocks (6e81a0d)
- config: avoid panic when unwrapping non-existent config (752a72f)
- correctly align and format right-aligned lists (d15e8d8)
- correctly catch horizontal rule with
*(7ae1e37) - correctly extract language from blocks (548d7c3)
- correctly handle lazy continuation in definition lists (47cbcc6)
- correctly parse bracketed spans in headings (772656e)
- correctly parse commend end (88a612c)
- correctly parse headerless simple tables (325b2c4)
- correctly parse html comments without preceding space (e7180fd)
- correctly parse hyphens in text as non-list markers (3eaa872)
- correctly sparse task list checkboxes (037db65)
- correctly wrap flat lists (afed9e3)
- correctly wrap in lists (c06a73c)
- correctly wrap list items (038b57a)
- don’t wrap math (4e876c1)
- enforce Pandoc spec rules for inline math parsing (2612ae5)
- fix clippy lints (a5c646f)
- fix continuation bug (9e24a23)
- fix failing test due to formatting (96b4ec4)
- fix handling of block quotes (7a421af)
- fix handling of fenced code blocks (7a45752)
- fix infinite loops (62365e9)
- fix lint errors (1326251)
- fix linter warning (9ad69a9)
- fix list indentation issue (674c0b0)
- fix missing quote markers (0685219)
- fix pandoc defaults (62f6eb7)
- fix some clippy issues (c36caa7)
- fix word wrapping (5cf939d)
- format syntax (f00cc8a)
- handle headerless simple tables (202858d)
- handle lazy block quotes (d92a732)
- handle links and images as children of a paragraph (5f13634)
- handle links properly (50b8475)
- handle nested block quotes (7b92701)
- handle nested lists (198a811)
- handle tex environments (f952861)
- handle wrapping around punctuation correctly (ed79abc)
- improve list continuation parsing (2f5bc99)
- initalize logger conditionally inside
format()(15b9be3) - lexer: correctly parse
$$$as block math (59446d7) - make block quote parsing more robust (c361bcf)
- normalize line endings to unix style (88c000f)
- omit block quote markers from wrapped paragraph (d067268)
- pandoc has raw_tex by default (3e83ccb)
- parse dollar signs as text (2503bed)
- parse inline math as part of paragraph (2e42843)
- properly handle attributes (75f5d43)
- properly handle fenced divs (eed54f8)
- properly handle lazy continuation (5bd232b)
- remove clippy warnings (d8819c3)
- remove unchanged variable (199b77a)
- support numbered lists (5435b5f)
- use a for loop instead of while (8c99913)
Performance Improvements
- add
byte_offsetto avoid recomputing each time (bc97d3b) - disable
debug!andtrace!in release builds (b40d27c) - move assertion into debug profile (fa73acd)
- preallocate string size (d989e26)
- reduce allocations in wrap_text (3ccda66)
- simplify paragraph wrapper (8235242)
- switch to trace logging (e4a0beb)