Changelog

Release history and notable changes for Panache, the formatter, linter, and language server for Quarto, Pandoc, and Markdown.

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 fatou formatter preset (8d70ee0)
  • parser: flag unbalanced \left/\right in math (73750c9)
  • parser: lift open-only HTML block bodies (7a831ff)

Bug Fixes

  • formatter: route non-reflowable math verbatim (bd577dc)
  • linter: match reference labels on raw source text (cb7ae6d)
  • parser: map simple-table columns by display width (c2f1b14), fixes #411

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 .svx files, 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 extend for 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-ending under [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-key to 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: false opt-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-divergence rule (39c799f)
  • linter: add opt-in unsafe auto-fixes (0267d9d)
  • linter: add empty-values rule (aac9a11)
  • config: add [compat] section for quarto, pandoc (3d16467)
  • linter: validate Quarto YAML schema options (7b3d363), closes #385
  • add crossref-prefixes for 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/full highlighting (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

  • parser: replay table subtree instead of re-parsing (4a050dc)
  • parser: use memchr for refdef newline scan (0e64ba7)
  • salsa: raise lint-query lru to 512 (4f1615f)

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-indent config 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

  • parser: conform ordered marker on pipe-table line to pandoc (bf02d16)
  • formatter: collapse line breaks inside split citations (148f69f)

Dependencies

  • updated crates/panache-formatter to v0.14.0
  • updated crates/panache-parser to v0.17.2

2.55.0 (2026-06-15)

Features

  • formatter: nest broken binary math continuations by math-indent (5948ca1)
  • formatter: default math-indent to 2 (3d0422b)

Bug Fixes

  • editors: revert to use latest_github_release (dabe00d)
  • formatter: fix(formatter): charge math-indent against display line-break budget (754faaa)
  • parser: claim trailing caption for table-first list item (a09f066)
  • formatter: re-emit list marker for table-first item (9633b86)

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 vignette yaml 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

  • parser: make giant-blockquote parsing O(n) not O(n²) (4ec2cc0)
  • lsp: fold symbol-usage index into a single CST walk (e5f4498)

Dependencies

  • updated crates/panache-formatter to v0.12.0
  • updated crates/panache-parser to v0.17.0

2.53.0 (2026-06-10)

Features

  • formatter: enable wrap modes for folded yaml scalars (327f12c)
  • formatter: wrap folded YAML scalars (b8dc1c0)
  • parser: condition YAML validation on consumer profiles (f77f153)

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_graph invalidation (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 = true

    The 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_parser and pretty_yaml crates. 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-syntax rule (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_links extension (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-syntax diagnostics 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

  • lsp: run heavy lint reads on cloned salsa handle (111f6cc)
  • linter: share one CST walk across built-in rules (8569bbf)
  • lsp: debounce diagnostics, lint externally on save (99310a5)
  • parser: gate table detection before whole-buffer strip (f27fc80)

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_item rule (d033968), closes #341
  • cli: allow -o extensions.<name>=<bool> overrides (2df73ab)
  • formatter: add east_asian_line_breaks extension (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/#id on 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-url rule 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 !tag tokens 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 / *alias in 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-images to 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 semantic wrap mode (41f7025), closes #313
  • extensions: support four-space-rule extension (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

  • config: add anchor_dir and GlobMatcher (4410951)
  • config: discover .config/panache.toml (0d9a44f), closes #294
  • add JSON schema for configuration (5ae80bf), closes #295
  • editors: toggle symbol publication via settings (fdf5a94), closes #297

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_MARKER for 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-def rule (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-target rule (c2e649c), closes #285
  • cli: revert --line-width etc, add --option/-o (cd49506)
  • remove unused blank-lines option (c23da16)
  • cli: add line width, wrap, and blankline to format (2f3e593)
  • cli: add and honor PANACHE_CACHE_HOME env variable (96d3cd6)

Bug Fixes

  • parser: treat footnote refs inside footnote-def bodies as text (1f37425), ref #290
  • formatter: reflow BRACKETED_SPAN content (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

  • stop project root discovery walk on .git (b370865)
  • lsp: initiate root-dir walk from current file (52f52b7)
  • lsp: add completion for shortcodes (42280e5)
  • lsp: add file path completion in ![]() and []() (1081475)
  • parser: handle multi-line div tag blocks (5f350b4)

Bug Fixes

  • cli+windows: cleanly handle tmp file removal (d3aed21)
  • formatter: don’t strip !expr in 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 isInlineTag for <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 <div into CST (7c6515e)
  • parser: fix dialect-divergence in pandoc/commonmark (3a81ac2)
  • formatter: don’t skip PLAIN in 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

  • cli: add --verbose flag and use it in clean (a92d441), closes #272
  • cli: add a --to pandoc-json argument (b3f3785), closes #269
  • parser: gate html declarations on dialect (9e0b645)
  • parser: parser inline spans granularly (03333d2)
  • parser: add depth-aware html block parsing (2a5dcac)

Bug Fixes

  • parser: add commonmark-ascii fix (4cfcd1c)
  • parser,linter: introduce HTML_DIV_BLOCK parsing (3962e03), closes #263
  • linter: fix undefined-anchor false positive on brackspans (0b1a15a), ref #263
  • correctly parser trailing attributes in equations (492306f)
  • parser: parse references in captions (eb29a9d)

Dependencies

  • updated crates/panache-formatter to v0.5.0
  • updated crates/panache-parser to v0.8.0

2.44.0 (2026-05-07)

Features

  • linter: add undefined-achor rule (729d6be), closes #263
  • cli: report if no autofix is available with --fix (fb8e20b)
  • add dprint plugin crate (d4b5fc5)
  • cli: add --flavor argument to set flavor (7d84561), closes #262
  • cli: allow - as argument for stdin (c720c2e)

Bug Fixes

  • cli,linter: only report and write if there are fixes (b8255b7)
  • don’t overwrite flavor (84364a4)

2.43.1 (2026-05-06)

Bug Fixes

  • editors: vsix publishing step (a0d602c)

2.43.0 (2026-05-06)

Features

  • linter: add rule for stray fenced div markers (3b6ebe9), closes #255
  • linter: flag near-misses too in html entity rule (ce47752), closes #251
  • editors: bundle binaries in VSIX extension (8a98d01)

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_refdefs and UNRESOLVED_REFERENCE (e6c17fb)
  • cli: add panache parse --to pandoc-ast output 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

  • parser: handle inline HTML (5fb7272)
  • add Dialect to untangle CommonMark from Pandoc (a1cb7df)
  • add npm package (a8e86b2)

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_escapable for 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

  • linter: add adjacents footnote lint (9729418), closes #229

Bug Fixes

  • parser: include ~ in set of escapables (cfc0bfc), closes #231
  • parser: handle consecutive footnote definitions (e694627)
  • linter: gate lints by extensions (1a03e9b)
  • linter: de-duplicate linter diagnostics (9c63e7e)
  • linter: de-duplicate parsing calls, avoid extra parses (45407fe)

Dependencies

  • updated crates/panache-parser to v0.5.1

2.39.0 (2026-04-27)

Features

  • cli: make --debug actually useful in release builds (92a54ec)
  • cli: add --quiet command to suppress output (78818a1), closes #221
  • cli: lint and format in parallel (c7560a0)

Bug Fixes

  • formatter: avoid quote character collisions (3c04c34), closes #225
  • cli: disable color mode when TERM=dumb (eb8f12a), fixes #222
  • parser: emit empty cells for degenerate cells (095ada7), fixes #224

Dependencies

  • updated crates/panache-formatter to v0.3.0
  • updated crates/panache-parser to v0.5.0

2.38.0 (2026-04-24)

Features

  • cli: default to global cache dir (52ed047), closes #207

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 Rcpp as 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

  • formatter: place table captions after the table (7d38d60)
  • formatter: use hanging indent for table captions (1234626)
  • formatter: use : as table caption prefix (618326a)
  • formatter: force one blankline after hashpipe options (68bba1b), closes #115

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

  • support smart punctuation (926a4c8), closes #182
  • fallback to latest available release (008fe36)

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_link for 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

  • allow auto-flavor for .{R,r}markdown (27f3877)
  • linter: add rule for unused labels (a9d88d1)
  • linter: consider references across project (2b687dc)
  • lsp: support go-to-references for footnote definition (3d6e9f8)

Dependencies

  • The following workspace dependencies were updated
    • dependencies
      • panache-parser bumped from 0.2.1 to 0.3.0

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

2.33.0 (2026-04-13)

Features

  • cli: add --report argument for debug command (55f3489)
  • formatter: normalize non-breaking spaces to \ (8c1756b)

Bug Fixes

  • cli: change RUFF_CACHE_DIR to PANACHE_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

  • “chore(release): release 2.33.0 [skip ci]” (01ac037)
  • “ci: update smoke test” (93c2ae9)

Dependencies

  • The following workspace dependencies were updated
    • dependencies
      • panache-parser bumped from 0.1.0 to 0.2.0

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

  • formatter: honor wrapping mode in lists (7fbba26), closes #103
  • linter: gate notes on linter path (external/internal) (498ec8a)

2.30.0 (2026-04-01)

Features

  • lsp: add hover preview for equations (ea5f8b0)
  • parser,lsp: support bookdown equation references (bb1946b)

Bug Fixes

  • formatter: preserve non-breaking spaces (e0861db)
  • linter: canonicalize absolute path to project root (8362c9e)
  • parser,formatter: handle inline executable code (a2ba2f9)
  • parser: catch headings after yaml with no blankline (ba61c32)
  • unify cross-reference resolution (c324753)

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-identifiers extension (ffe7834)
  • support mmd-link-attributes extension (5b44f9e)
  • support mmd-title-block extension (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-breaks extension (70c9201)
  • parser: add missing code block extensions for gfm flavor (1058df6)

2.28.0 (2026-03-25)

Features

  • config: gate executable code behind extension (27a7e7e)
  • lsp: add code action for converting to explicit link (0b4a86c)
  • parser: emit CROSSREF_* markers for crossrefs (99d1174)
  • parser: introduce bookdown-specific syntax tokens (8a63e79)
  • wasm: update the WASM library (d004f73)

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

  • lsp: add section-based window incremental parsing (99f7a0f)
  • lsp: improve and document salsa durability policies (7400e6e)
  • lsp: improve fallbacks in incremental parsing (c13fcb4)
  • lsp: rollback non-working incremental parsing (4dd29d4)

2.26.0 (2026-03-21)

Features

  • formatter: escape ] (f846ffc)
  • formatter: standardize checkboxes to [x] (59312ba)
  • introduce pandoc-compat field (58d9e54)
  • lsp: implement document links (eb590e0)

Bug Fixes

  • parser: don’t accept [] as tasklist check box (8700911)
  • parser: emit LINK_REF nodes for reference images (127946d)

2.25.0 (2026-03-20)

Features

  • cli: add --dump-passes to panache debug format (f54549e)
  • editors: provide qmd and rmd languages in vscode (da9bc5a)
  • formatter: compress simple table columns to content (98c4e8a)

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

  • formatter: account for prefix when formatting hashpipe (b3471c2)
  • formatters: don’t hide warnings behind log flag (59b5dc0)
  • lsp: handle hyphenated references when renaming (2d507b8)

2.24.0 (2026-03-19)

Features

  • formatter: report missing external formatters jointly (1e5cd25)
  • lsp: add workspace heading symbols (ac6a8d9)

2.23.0 (2026-03-18)

Features

  • config: exclude LICENSE.md files by default (8cdad49), closes #80
  • linter,lsp: unify bookdown chunk label resolution (a71301f)
  • linter: warn on uncaptioned bookdown figure crossrefs (2de688a)
  • lsp,linter: support bookdown-style divs (d6f08af)
  • lsp: add support for Pandoc heading links (9690922)

Bug Fixes

  • cli: fix exit code with --force-exclude (f140a7b), closes #82
  • formatter: enforce wrapping in list item (c9266cb), closes #81
  • lsp: correctly report heading symbols (97d8bdb), closes #84
  • lsp: handle bookdown crossrefs with dashes (101e546)

2.22.0 (2026-03-17)

Features

  • add automatic installer scripts (1f20e76)
  • add suppor for tex_math_gfm extension (70e74cb)
  • config: add extensions.<flavor> (2accb02)
  • config: add flavor-overrides config option (6f54ff4)
  • formatter: format horizontal rules to line-width (4910606)

Bug Fixes

  • formatter: handle hashpipe YAML correct (27b3df6)
  • formatter: mitigate indentation infinite growth (264e49c), closes #78
  • parser,formatter: handle multiline exec options (e19c8ed)
  • parser: don’t parse horizontal rules as metadata/table (b695b3d)

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-identifiers extension (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.render settings (be63ee9)
  • parser,linter: add support for github emojis :smile: (116fad2)

Bug Fixes

  • config: correctly align GFM flavor with Pandoc (7f151f8)
  • exclude release-assets from crate package to prevent crates.io 413 error (#77) (34d8196)
  • fix problem with --force-exclude (f77b670)
  • fix relative path from root issue on macos (22470ab)
  • parser: add multiple missing extensions guards (b8e2e37)

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

  • add support for github alerts (31d8055)
  • linter: add linting rule for spaces in labels (d8e522e)
  • linter: add missing link references rule (2232449)

Bug Fixes

  • formatter: handle labels with spaces in them (be100ae), closes #66
  • lsp: handle umlauts properly (a8227fb), closes #65
  • parser: handle --- without blankline before (746d827)

2.18.0 (2026-03-12)

Features

  • cli: add --no-color and --isolated (f19b7f5)
  • cli: add --stdin-filename (a574782)

Bug Fixes

  • formatter: maintain idempotency with and \\n (b22e91e)
  • formatter: remove space in code block fences (0a81b0f)
  • parser: parse \cmd{\n<content>\n} as TEX_BLOCK (8373ffb)

2.17.0 (2026-03-11)

Features

  • editors: add VS code and Open VSX extensions (#57) (0570c84), closes #55

Performance Improvements

  • formatter: use built-in greedy wrapper (ac73a3a)

2.16.0 (2026-03-11)

Features

  • cli: add panache debug format for debugging (1319489)
  • formatter: use first-fit word wrapping (66957be)

Bug Fixes

  • build: gate warnings behind debug_assertions (71c1b24)
  • build: use InitializeResult defaults, update lockfile (e1b045e), closes #53
  • formatter: fix idempotency in emphasis formatting (5e492a5)
  • formatter: fix idempotency issue in definition list (04b2b7f)

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-header extension (c1f3571)
  • parser: preserve leading whitespace before fences (7f12c62)
  • parser: relax fence block detection (6cc356d)

2.14.0 (2026-03-09)

Features

  • cli: add --quiet flag (47ee630)
  • cli: add --verify for format and parser (f8fd6e6)
  • cli: make --verify a pure smoke-test screen (3619207)
  • formatter: don’t treat semicolons as sentence break (ade76a9), closes #48

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::interned for project graph intternally (996be36)

2.13.0 (2026-03-07)

Features

  • formatter: add tab-width setting (3e02336)
  • formatter: normalize spacing inside fenced div (6aa73d0)
  • formatter: wrap multiline footnote refs as Pandoc (722c76a)
  • lsp: add --debug flag (ad5d81a)
  • parser: add support for raw tex blocks (841a663)

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

  • lsp: build graph lazily (0efcc0d)
  • lsp: cache bibliography data (edecc10)

2.12.0 (2026-03-05)

Features

  • add RIS bibliography support (128eaf0)
  • formatter,linter: support ignore directives (17a3df2)
  • formatter: add blanklines between definitions if loose (c6a3d14)
  • improve hover preview for citations (45e0f11)
  • support JSON bibliographies (3a9ee26)

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

  • formatter: add sentence-wrapping mode (4048f55)
  • linter,lsp: add auto-fixing for external linters (f73e3be)

Bug Fixes

  • lsp,linter: return correct range for bibliography lint (313ca32)
  • lsp: add external lint fixing code action (1e5a847)
  • lsp: fix go-to-definition and hover handlers for citations (ef7d5e7)
  • lsp: handle go-to-definition for references (7a0bc17)

2.9.0 (2026-03-02)

Features

  • formatter: normalize links to match pandoc (3b5fdce)

Bug Fixes

  • handle list inside fenced div (6f1014c)
  • lsp: correctly extract text in AST wrappers (9bacf4d)
  • lsp: correctly map external lints to buffer (4bef1b3)

2.8.0 (2026-03-02)

Features

  • cli: add --json option to parse (c84ce49)
  • config: consistently use kebab-case (b01b5b1)
  • lsp: add support for external bibliographies (47d5177)
  • parser: handle CLRF line endings in bibtex parser (0d8a2c8)

Bug Fixes

  • correctly parse and format inline code spans with `s (7a6336b)
  • parser: correctly parse CRLF newline at end (af31e51)
  • parser: handle UTF-8 correctly in citation parsing (4678265)
  • parser: handle whitespace after heading and before attr (ee230ef)

2.8.0 (2026-03-02)

Features

  • cli: add --json option to parse (c84ce49)
  • config: consistently use kebab-case (b01b5b1)
  • lsp: add support for external bibliographies (47d5177)
  • parser: handle CLRF line endings in bibtex parser (0d8a2c8)

Bug Fixes

  • correctly parse and format inline code spans with `s (7a6336b)
  • parser: correctly parse CRLF newline at end (af31e51)
  • parser: handle UTF-8 correctly in citation parsing (4678265)
  • parser: handle whitespace after heading and before attr (ee230ef)

2.7.0 (2026-03-01)

Features

  • add pre-commit hook configuration (b31ecdb), closes #37

Bug Fixes

  • handle complex blocks in blockquotes (ec69e51)
  • parser: fix bug in losing blockquote marker (403165b)

Performance Improvements

  • lsp: add incremental parsing (b804ee9)

2.6.3 (2026-02-27)

Performance Improvements

  • refactor parser into block dispatcher approach (#36) (4804f80)

2.6.2 (2026-02-27)

Bug Fixes

  • parser: handle multilines in blockquotes (02d7c20)
  • reimplement support for setext headings (12c9182)

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_args and prepend_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 ROOT node 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

  • formatter: properly handle grid table alignments (56c5bba)
  • parser: fix issues with CRLF parsing (6ec62f0)

2.5.0 (2026-02-17)

Features

  • parser: parse compact and loose lists and use Plain (3258724)
  • parser: parse quarto equation references (0ce1f7d)
  • parser: parse shortcodes (c6abc24)
  • parser: rename BlockMathMarker to DisplayMathMarker (68c9c32)
  • parser: standalone figures as Figure node (59d74e7)

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

  • formatter: format YAML metadata with ext formatters (eb89f06)
  • lsp: emit warnings for missing bibliographies (14fa9c9)

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

  • cli: format and lint multiple files, or by globbing (f53a8fd)
  • formatter: initial formatting of execution options (879b291)
  • formatter: normalize hard line breaks to escaped (ada9f0f)

Bug Fixes

  • correctly parse and handle escaped line breaks (49154ff)
  • formatter: handle content after opening math delim (ef8c220)
  • lsp: auto-detect flavor from file extension (84dc96f)
  • make parser lossless (4add809)
  • parser: check for blank line in math after delim (f65858e)

2.1.0 (2026-02-12)

Features

  • lsp: add initial support for document symbols (81a7ef9)

Bug Fixes

  • don’t wrap quarto/rmd code chunk args in quotes (48ebd68), closes #22

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 --write flag (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() to Config

Features

  • add blank_lines option (c1080a4)
  • add CodeSpan to 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() to Config (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 BlankLine in 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 --check argument (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 rmarkdown not r-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_offset to avoid recomputing each time (bc97d3b)
  • disable debug! and trace! 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)