Changelog
0.27.0 (2026-10-08)
Features
Bug Fixes
- formatter: separate multiline math siblings (
d8d4531), fixes #204 - formatter: put intertext on separate lines (
7da63df), fixes #202 - formatter: split leading labels in math grids (
561dff9), fixes #201 - formatter: format CAS affiliations as keyvals (
9b550a9)
Dependencies
- updated crates/badness-formatter to v0.10.2
- updated crates/badness-parser to v0.11.1
0.26.0 (2026-10-06)
Features
- docs: add homepage link headers (
a5b01eb) - docs: serve markdown to agents (
9b97446) - lint lonely items in document body (
7b73d15) - config: support extending config files (
a376f19) - lsp: distinguish symbol completions (
92ed0e4), closes #190 - lsp: show command signatures in completion (
9d5d913), fixes #190
Bug Fixes
- tests: avoid Nix build race and panic wording (
a0eefb2) - linter: infer equation ranges across files (
7fb6654), closes #195 - lint: count referenced subequations labels (
516a421), refs #195 - formatter: preserve Beamer overlay body lines (
1576e17) - docs: omit decorative logos from markdown (
7e82888) - docs: scope worker to content pages (
f25e029) - docs: keep markdown chapter links usable (
246d691) - constrain label completion to key range (
19230cc) - replace full reference completion keys (
cc2ab0e) - lint: honor simple equation reference ranges (
1b43349), refs #195 - format: normalize algorithm2e statement spacing (
aaff9b9), fixes #193 - lsp: broaden command completion kinds (
5474ca2), refs #190
Dependencies
- updated crates/badness-formatter to v0.10.1
- updated crates/badness-parser to v0.11.0
0.25.0 (2026-09-27)
Features
- lsp: support source file and folder renames (
8640b6d)
Bug Fixes
- formatter: keep environment argument values intact (
8b50184) - formatter: fill textual optional arguments (
34b86fe) - docs: repair social previews and accessibility (
ced6e51) - lsp: publish IPC advertisements atomically (
b124210) - update salsa (
c65ca08) - linter: allow implicit braces (
21389da), fixes #186 - match exclusions across symlinked project roots (
8dc3b45)
Dependencies
- updated crates/badness-formatter to v0.10.0
0.24.0 (2026-09-21)
Breaking Changes
The semantic wrap mode now considers line-width and reflows if the line width is exceeded. To get the old behavior, set
[format]
wrap = "semantic"
line-width = 0 # disable line width limit
Features
- lsp: add expl3 completion (
17ab28b) - format: honor width in semantic wrapping (
fc6feee), closes #183 - lint: add expl3 semantic checks (
7e1ad2c)
Bug Fixes
- linter: avoid uncertain duplicate warnings (
3dfe033), fixes #185 - fix rename race (
b6d7b7f) - parser: capture xparse
cenvironment bodies (a3558a5), fixes #184 - lint: accept exam question parts without arguments (
3e4ff7c), fixes #181 - formatter: preserve glued opaque environments (
cab55f6)
Performance Improvements
- lsp: reduce repeated hover lookup work (
6ef4bf8) - lsp: reduce configuration validation overhead (
ae34296) - lsp: reduce warm rename overhead (
132a112) - build: enable ThinLTO with one codegen unit (
2e9414c)
Dependencies
- updated crates/badness-formatter to v0.9.0
- updated crates/badness-parser to v0.10.0
0.23.0 (2026-09-03)
Features
Bug Fixes
- linter: skip positional verbatim arguments (
08b5243), fixes #175 - linter: ignore Beamer overlay ranges (
d57390f), fixes #174 - formatter: stabilize long optionals (
04d8ecf) - parser: parse long mixed optionals (
38adc16) - formatter: format empheq as math (
e7a2140), fixes #172 - linter: retain braces around math operators (
946bf2b)
Dependencies
- updated crates/badness-formatter to v0.8.3
- updated crates/badness-parser to v0.9.0
0.22.1 (2026-08-31)
Bug Fixes
- formatter: attach citations to sentences (
57e9bb8), fixes #163 - formatter: normalize commented env args (
6154eb9)
Dependencies
- updated crates/badness-formatter to v0.8.2
- updated crates/badness-parser to v0.8.1
0.22.0 (2026-08-28)
Features
- lsp: add Beamer frame symbols (
11f2a76)
Bug Fixes
- accept Windows short paths in BIBINPUTS (
3a243cd) - resolve bibliography search paths (
c867a8e), fixes #161 - formatter: align macro statement prefixes (
4e7efa5), fixes #158 - formatter: prioritize math breakpoints (
9f85294) - formatter: preserve postfix limit signs (
658ef51) - loosen test (
5a6eeb8)
Dependencies
- updated crates/badness-formatter to v0.8.1
- updated crates/badness-parser to v0.8.0
0.21.0 (2026-08-27)
Features
- formatter: close display math lines (
7394f25) - formatter: glue inline command arguments (
f1093ff) - formatter: split environment keyvals (
3ea1412) - editors: add Zed extension (
c898e44)
Bug Fixes
- formatter: preserve BibTeX lint directives (
e0567a9), fixes #159 - formatter: split commented begin tails (
5d30318) - formatter: preserve authored line-break rows (
4886414) - lint: remove
\paragraphrule from headings lint (0343e90) - lint: retire mismatched delimiter rule (
a034f0b) - formatter: keep labels with headings (
7ba5fa5) - formatter: match omitted environment slots (
c00340f) - formatter: honor control-word boundaries (
4ee6fc6) - formatter: recognize unary math signs (
6afa14f)
Performance Improvements
- formatter: cache group break state (
4a37963)
Dependencies
- updated crates/badness-formatter to v0.8.0
- updated crates/badness-parser to v0.7.0
0.20.0 (2026-08-26)
Features
- formatter: configure item indentation (
b869f10), closes #150 - formatter: indent commented begin arguments (
1da8350) - report inert suppression directives (
70e57f7) - lint: check minipage caption labels (
6ea84bd) - lint: flag indented docstrip guards (
9aabc58) - drop MSRV to 1.89 (
b5c6250) - linter: warn on retired suppressions (
7c30f9d)
Bug Fixes
- formatter: close environment lines (
c72d71d) - formatter: treat gathered as math (
b31668c) - formatter: align nested math environments (
eeebbbf) - support Rust 1.94 (
a7afd67)
Dependencies
- updated crates/badness-formatter to v0.7.0
- updated crates/badness-parser to v0.6.0
0.19.0 (2026-08-25)
Features
- linter: check labels before list items (
779e9cc) - lint: detect invalid macrocode frames (
9be2612) - ci: scan arXiv source projects (
c5e256b), ref #152 - formatter: separate section headings (
a75a46e) - collect labels from environment options (
df6f1f3) - add command declarations (
c9effb8) - lsp: add table column refactor (
def2998) - formatter: align row terminators (
7277610) - lint: detect extra alignment tabs (
1129686)
Bug Fixes
- formatter: keep scripted colon relations tight (
77833dc) - formatter: preserve colon relations (
dbb64a2) - lsp: refresh cached config (
27f22d0) - parser: close citation command set (
e10aa54) - linter: handle nested subfigure labels (
bb0fed5) - lsp: scope range formatting to selection (
4439eeb), fixes #149 - formatter: wrap long citation lists (
8dbca9e) - honor curated ref/cite families in declarations (
a3aa4ba)
Performance Improvements
- firewall declarations by parse and semantic tier (
ef61239)
Dependencies
- updated crates/badness-formatter to v0.6.0
- updated crates/badness-parser to v0.5.0
0.18.0 (2026-08-24)
Features
- add LSP memory benchmark (
9a975d7) - formatter: glue item overlays (
e7b3efe) - parser: reparse math fragments (
4638eb5) - formatter: unify math spacing (
170da11) - add semantic math atom classification (
3889311) - parser: add argument domains (
f7f4b01)
Bug Fixes
- parser: consume CRLF control symbols atomically (
20dd182) - parser: parse alignment char constants (
78f3cd9) - parser: guard expl3 mode boundaries (
08c0387) - formatter: preserve trailing control newline (
2a7977b), fixes #141 - lsp: replace project snapshot generations (
a1194cb) - lsp: gate query logging (
f212680) - parser: tighten catcode signal (
834c7b6) - parser: pass plain braces through optionals (
82b30f1) - parser: parse href URLs verbatim (
03ad84f) - formatter: preserve glued forced blocks (
4938f6c) - formatter: align virtual dtx tables (
e0a2cde) - parser: preserve argument mode semantics (
63aefa8) - formatter: bound relation alignment (
a560698) - formatter: preserve math line breaks (
a1ad967) - parser: honor TeX script atom boundaries (
e6131b6)
Dependencies
- updated crates/badness-formatter to v0.5.0
- updated crates/badness-parser to v0.4.0
0.17.0 (2026-08-20)
Breaking changes
- parser: pair one-sided environment aliases (
d757cdc), closes #117 - parser: arity-directed expl3 attachment (#119) (
5f2f9d8)
Features
- formatter: format DTX doc environments (
ac98c95), fixes #127 - parser: intra-file incremental reparse (#130) (
393e0c3) - bench: time the keystroke pipeline (
b1b2b0e) - parser: pair one-sided environment aliases (
d757cdc), closes #117 - parser: arity-directed expl3 attachment (#119) (
5f2f9d8) - formatter: wrap picture statements at TikZ unit boundaries (
5079f96) - formatter: hang statement continuations in picture bodies (
5266aba)
Bug Fixes
- parser: isolate command definition names (
8d6e274), fixes #133 - formatter: preserve TeX line semantics (
f16188b), fixes #132 - formatter: handle mixed dtx doc regions (
6edfd81), fixes #126 - preserve dtx documentation math (
de0c54c), fixes #138 - formatter: preserve guarded dtx paragraphs (
0373420), fixes #123
Performance Improvements
- lsp: share document text and line index (
3d4a5f8)
Dependencies
- updated crates/badness-formatter to v0.4.0
- updated crates/badness-parser to v0.3.0
0.16.0 (2026-08-14)
Features
- config: declare environments in
badness.toml(#115) (a80b5af) - formatter: lay out picture bodies as statements (
b437091), closes #114 - linter: add
% badness-lintsuppression directives (c03114d), refs #114 - formatter: add suppression comment directives (
1810cde), refs #114 - linter: add
blank-line-in-keyval(0758ea4) - formatter: segment a mandatory keyval group (
d79ec73) - formatter: width-driven layout for opaque brace groups (
03022a8) - cli: add the strict trivia-invariance check (
3796d7a) - linter: add
label-before-captionrule (e8c5b7f) - linter: colorize the pretty lint report (
e4faf16) - parser: pair user-defined environment delimiters (
2bbff60), closes #109 - cli: read stdin from
-, not a bare terminal (5bb4788), closes #111 - formatter: lay conditionals out all-or-nothing (
ed84bfe) - parser: gated
CONDITIONALnode for\if…\else…\or…\fi(e0ca4ef) - bib: parse and preserve
%comments (e005cc9) - skill: add formatter-fixture for construct coverage (
a52095a) - lsp: add inverse search over IPC (
3b829eb) - lsp: add
textDocument/forwardSearch(8028a40) - formatter: explode sibling-attached expl3 branches (
d3fc51a) - formatter: expand optional arguments to the width (
4c28ba4) - formatter: add optional serde and schema features (
80726c7) - formatter: reflow doc-margined out-of-region expl3 runs (
aa9445a) - formatter: reflow dtx prose around margined blocks (
4f118a2) - semantic: add curated block-level command property (
c54a5ff)
Bug Fixes
- formatter: break a keyval group’s glued opener (
507a982) - scripts: keep pdflatex stdout off hyperref’s
.out(1e7c4c1) - formatter: body a
\begintail past the declared arity (bd7028e) - parser: break every gate’s run at a docstrip guard (
d682e8f) - formatter: guard a prose argument’s edge comments (
8976815) - formatter: break around curated block-level commands (
09b8d4f) - linter: pair straight quotes into one finding (
e1ff0d1) - parser: harden environment-alias pairing (
84f11a2) - project: link a subfile to its parent document (
df3e66c), closes #112 - lsp: spell decoded URI paths with native separators (
f199bd1) - formatter: break around sectioning commands (
f4be809) - formatter: stop deleting
]inside prose arguments (7d2799f) - formatter: make optional fallbacks deterministic (
9d2095c) - formatter: correct what
lower_conditionalassumes (902dbd9)
Performance Improvements
- cli: use Histogram for the
--checkdiff, measured on the corpora (29a678a) - cli: pick Patience over Histogram for the
--checkdiff (595abb3) - cli: diff
--checkwith Histogram, write it buffered (f34abb8) - lint: render pretty snippets from a line window (
9dffc3d) - parser: one batch driver for all nine shape gates (#113) (
9e01ee5) - parser: bound the environment-alias closer scan (
ae83909) - formatter: gate the doc-margin scans on
cx.is_dtx(4e7babf) - parser: answer
on_doc_margin_linefrom a pre-scan (930380b)
Dependencies
- updated crates/badness-formatter to v0.3.0
- updated crates/badness-parser to v0.2.0
0.15.0 (2026-08-07)
Features
- formatter: default every file kind to reflow (
ba9f2f9) - formatter: add a line-ending style (
373a16c) - wasm: add
badness-wasmplayground shim crate (6486890)
Bug Fixes
- formatter: hug detonating atoms in fallback fills (
db63ddb) - formatter: accept a relation as an expl3
Nslot (4a3d92b), closes #106 - formatter: gate the expl3 forced-break dispatch in fallback lines (
7437f69) - linter: skip parameter-template keys in key scans (
928aa4a), closes #104 - formatter: keep fitting math segments flat (
903ec3e)
Dependencies
- updated crates/badness-formatter to v0.2.0
- updated crates/badness-parser to v0.1.1
0.14.0 (2026-08-06)
Features
- cli: diff changed files in
format --check(eed1537) - semantic: curate filecontents and ltxdockit verbatim envs (
d805548), closes #98 - formatter: respace flush expl3 argument braces (
c44125c) - formatter: add trivia-perturbation invariance oracle (#103) (
f22d668) - packaging: publish badness-bin to the AUR on release (
82a64c2) - lint: add
--output jsonmachine-readable findings (92b04bd) - formatter: explode expl3 conditional branches (R4) (
bebdbde) - parser: recognize package-defined verbatim envs (
696f109) - build: bundle man pages and completion in tarballs (
8268c88)
Bug Fixes
- formatter: render expl3 conditionals all-or-nothing (
c8b3aef) - formatter: keep annotated expl3 branches on the exploded path (
ac07506), refs #101 - formatter: drop expl3 sibling break coupling (
836ed83), closes #101 - packaging: tolerate pre-0.14 release tarballs in PKGBUILD (
750493b) - installer: detect musl/libc in installation script (
eb195a1) - formatter: pin forced expl3 block body to break mode (
349ccdd) - formatter: stabilize trailing expl3 hang group (
72a6d35), closes #96 - npm: fall back to musl when glibc build fails (
bd1891e) - formatter: stabilize trailing expl3 conditional (
b5ed902), refs #96 - parser: pair \left/\right inside macro code (
20a59ef), closes #95 - parser: bound math bracket gate at dollar closer (
703f5f5), closes #99 - formatter: keep expl3 parameter runs tight (
47d6277), exception #1 and #2 - formatter: sticky-break fill for expl3 statements (
107ecb0), closes #94 - linter: stop TikZ/pgf false positives (
aca172f) - linter: drop “Part”, gate hard-coded-reference item labels (
274c124) - linter: gate space-before-command on trailing break (
2f66cae) - linter: skip hex constants, font maps in straight-quotes (
2fb9ee3) - linter: skip redefined commands in deprecated/primitive (
0490f16) - linter: skip starred headings in sectioning-level-jump (
befe30e) - parser: parse array and tikzcd bodies as math (
9db4e8f)
0.13.0 (2026-08-01)
Features
- semantic: curate
codeexampleas verbatim env (4fb98f7) - lexer: infer expl3 in toggle-less
.dtx(caba767) - lsp: link package docs via texdoc in hover (
40b2665) - lsp: filter cite completion by title and author (
509cd4a) - linter: express and apply cross-file fixes (
e9071f8) - vscode: add feature toggles for the LSP (
bb3f13c), closes #86 - formatter: align user environments on
&(ee88953), closes #84 - formatter: hang expl3 attached brace arguments (
c25c91b) - formatter: hang \item continuations under preserve (
5edeea7), closes #82 - incremental: mark SourceFile.path HIGH durability (
bca096a) - linter: flag unclosed math delimiters as likely typos (
4731c18)
Bug Fixes
- parser: parse
.code.texunder package flavor (2694a86) - linter: withhold deprecated-command fix in reference position (
668647a) - linter: skip compound-logo swallowed space (
0a546b7) - linter: ignore
\string-prefixed package loads (e20504e) - linter: skip
\textttdashes and\foreachranges (f605ee5) - linter: skip citation locators and env titles in hard-coded-reference (
620bde5) - linter: skip xypic
@DSL inmakeat-macro(81e4c81) - parser: attach math optional across balanced
$...$(b5c6c50) - formatter: scope preserve spacing collapse to prose (
0999610) - formatter: normalize inner spacing under preserve (
be8d5ba) - linter: skip prose rules in Lua code and doc placeholders (
bcd4f44)
Performance Improvements
- line-index: precompute wide-char table, own no text (
d9c526f)
0.12.0 (2026-07-30)
Features
- formatter: break leading
\labelonto its own line (18b17c5) - add stable-diff paragraph wrapping (#41) (
5734632) - format: indent expl3 continuation groups one step (
d53f064) - config: add
BADNESS_CONFIGenv var for config path (b8756e8) - cli: add hidden
debug formatcheck command (da5959f) - config: add global user config fallback (
41c4570), closes #40 - formatter: add
math-wrapdisplay-math break policy (dbba5eb), closes #42
Bug Fixes
- formatter: pin inter-argument docstrip guards to column 0 (
3556c79), closes #78 - formatter: keep stable-wrap break mask aligned on Nil atoms (
d4211b1) - parser: shape-gate unclosed
\leftinstead of erroring (29aa319), closes #77 - parser: close the latex2e format-error buckets from the smoke test (#80) (
bb9484e) - parser: stop the lexer hiding braces, guards, and short-verb bars (#79) (
a6e2119), refs #71 - parser: stop environments escaping their brace group (#75) (
7d82f35), refs #71 - parser: scope the math gates’ paragraph-break anchor to the body’s own level (#74) (
ef89b76), closes #70 - gate expl3 relayout to top-level toggles (
81a1a92), closes #69 - parser: suppress braced verbatim on redefinition (
513e963) - formatter: preserve fully-guarded expl3 chunks (
5d2e46b), closes #72 - parser: treat escaped backtick char constant as data (
d7edf4b), refs #71 - format: keep glued brace opener on its line (
97e7abb) - format: treat sign after opener as unary in math (
94af6dd) - format: keep guarded expl3 code groups broken (
417c480), closes #61 - format: keep doc-margin math environments verbatim (
d8e3864), refs #61 - format: make trailing comments zero-width in expl3 code (
db53fc8) - format: keep doc-commented expl3 statements whole (
fb61e15) - parser: treat expl3 regions and v-arg names as macro data (
e9deecf), issue #60 - parser: add
^^A, v-arg, and char-constant lexing (ff2b516) - parser: gate
\[/\(and isolate\def-family names (bb55149), closes #65 - lexer: accept comment tail on macrocode end frame (
fa01c29), closes #62 - parser: gate
\begin/\endon a name-shaped group (0dfeb0b) - parser: gate text-mode brackets on a reachable closer (
47f92f9), refs #60 - lexer: add l3doc to curated doc classes (
e34cd7f) - parser: gate dollar math on a reachable closer (
4a01a6b) - formatter: feed run-final trivia to expl3 run separator (
ad2ce81), closes #58 - formatter: own only macrocode bodies in dtx expl3 regions (
d0abf21) - formatter: refine expl3 group style in regions (
1cda543), refs #57 - parse doc short verbs and chunked dtx macro code (
37fbf9c), refs #57 - formatter: strip script braces before operator atoms (
d627794), closes #56 - parser: count nested optionals in math bracket gate (
7b98255), closes #55 - parser: widen definition bodies to hooks and
\newcommand(ab7d809) - formatter: keep trailing comments riding their line (
71baa30), closes #54 - parser: make verb delimiter capture opt-in (
4788af9), closes #53 - formatter: keep own-line comments in list bodies (
f468619), closes #48 - formatter: keep grid indent on doc-commented rules (
e0ccee0), closes #49 - formatter: collapse fitting multi-line optional args (
cf15d18), closes #47 - formatter: lift
\begin-line%in every env layout (9c7fe0e), closes #38 - parser: accept split
\begin/\endin env definitions (e4f711d), closes #45 - parser: stop math brackets parsing as optional args (
0eb49d5), closes #43 - formatter: improve display-math break-point detection (
9e97826), refs #42 - formatter: keep multi-line math LHS off the relation column (
b7fd62b), closes #39 - formatter: keep trailing
%glued to a block segment (5369c22), closes #38 - vscode: swap npm-run-all for npm-run-all2 (
b631714)
0.11.0 (2026-07-20)
Breaking changes
- lsp: move texmf config to editor settings (
2f83a84)
Features
- lsp: move texmf config to editor settings (
2f83a84) - formatter: hang nested blocks in align grids (
5103bab) - linter: document bib rules in –explain and docs (
a2a742c), closes #24
Bug Fixes
- tests: adapt to
lsp-server0.10ResponseAPI (5f1e889) - linter: skip script labels inside argument groups (
1f8c0eb), closes #37 - parser: name blank line as math terminator (
2751787), ref #35 - linter: ignore key arguments in dash-length (
506e5f0) - linter: ignore rule-command spans in dash-length (
adeecf6), closes #34 - linter: ignore key arguments in math-shape rules (
387810a), closes #25 - parser: keep unmatched
[a plain atom in math (c185c13), closes #23 - linter: ignore labels in exclusive conditional branches (
a6e0c22) - linter: ignore package loads in exclusive branches (
d16d3d1), closes #27 - linter: target the whole construct for DOC_COMMENT-bound suppressions (
cd647fa), fixes #26
0.10.0 (2026-07-15)
Features
- add
--force-excludetoformatandlint(05c8e32)
0.9.0 (2026-07-14)
Features
- linter: make fixes carry multiple atomic edits (
7f52ef5) - linter: add diagnostic related information (
ada447b) - parser: add a release-mode stuck-loop step limiter (
f93b1e5) - lsp: add diagnostic tags and rule doc links (
906b0df)
Bug Fixes
- lsp: recover poisoned db mutexes instead of panicking (
5844ff2) - bib: resolve field aliases in missing-required check (
f20283b)
0.8.0 (2026-07-11)
Features
- lsp: show source package in macro hover (
eaf030e) - lint: add
unknown-optionrule for local packages (f040033) - bib: document links for doi and url fields (
e1f15f7) - completion: argument-value enum completion (
f363499) - bench: add linter speed benchmark vs lacheck and chktex (
e6a821e) - bench: add whole-project folder benchmark (
620c7cc) - bib: typed AST wrapper layer for BibTeX CST (
0abe33a) - ast: typed AstNode/AstToken wrapper layer (
35eae44)
Performance Improvements
- cli: parallelize lint –fix across files (
133a4c3)
0.7.0 (2026-07-08)
Features
- lsp: selection ranges from CST hierarchy (
2aff55f) - formatter: column-spec-aware table alignment (
9ab94ba) - linter: package-aware duplicate and provides lints (
758fac3) - semantic: recognize package metadata and options (
0cd95ce) - lsp: color and TikZ/PGF library completion (
1a881f3) - lint: add unreferenced-label rule (
4d975a1) - lint: add verbatim-trailing-text rule (
a11358d) - lint: flag line-break tie in missing-nonbreaking-space (
de2d51f) - lint: autofix obsolete-environment eqnarray to align (
aa26b13) - lint: add missing-required-argument rule (
5206ee6) - lsp: references, rename, goto-def for user macros (
fdeb0e9) - lsp: negotiate client capabilities at initialize (
36b6ed2) - lsp: change-environment refactor command (
1f27fab) - lsp: glossary/acronym key completion (
f73f138) - lsp: signature help for command arguments (
0c5f649) - lsp: label hover and symbol numbers from
.aux(3efb7aa) - semantic: classify what a
\labellabels (01a8b0b) - project: scan
.auxfor label numbers and toc (ed48898) - config: add
[build]section withaux-dir(ad8cc8a) - lsp: go-to-definition for include/package file arguments (
99927ea) - lsp: resolve packages via TEXMF index and CTAN metadata (
24ba5c7)
Bug Fixes
- bib: tighten title-capitalization camelCase heuristic (
91de065) - ci: rename aux.rs, allow option-ext MPL-2.0 (
cc1c834)
Performance Improvements
- formatter: parallelize the CLI format paths (
d38b4d6) - linter: cache registry, stream rewalkers, parallelize CLI (
5c3813a) - signature: bake CTAN metadata via phf, not runtime parse (
f635d23)
0.6.0 (2026-07-06)
Features
- completion: complete
\usepackage/\documentclassnames (2457147) - completion: add baked package/class name lists (
ff4906d) - lsp: add document links (
915aea6) - lsp: highlight matching
\begin/\endpair (d643518) - lsp: re-indent on close via onTypeFormatting (
5972340) - parser: parse math environments in math mode (
9097be3) - formatter: implement sentence and semantic wrap modes (
17003ba) - linter: add hard-coded-reference rule (
da66c29) - linter: add sectioning-level-jump rule (
6ac6def) - linter: add makeat-macro rule (
2ae6d07) - linter: add space-before-command rule (
36d5fa3) - linter: add abbreviation-spacing rule (
2fea8db) - linter: add swallowed-space rule (
c48aa20) - linter: add primitive-command rule (
94da7ca) - linter: add math-operator-name rule (
17cc5f2) - linter: add times-variable rule (
52de07a) - linter: add dash-length rule (
a6218e0) - linter: add straight-quotes rule for ASCII quotes (
adff4ba) - linter: add ellipsis rule for literal … (
488ebdd) - linter: generate rules reference from metadata (
74e2234) - math: normalize operator spacing (
36c9314) - semantic: keep built-in over delegating arity-0 redef (
9fd50d8) - add title, author, date, thanks to signatures db (
3c537d1) - formatter: stack binary chains under the relation too (
0777920) - formatter: align relation chains in display math (
e69a72e) - formatter: join alignment-cell continuation lines (
cd3e590) - semantic: resolve packages to .dtx sources (
249e68e)
Bug Fixes
- parser: point unclosed-delimiter errors at the opener (
1029351) - formatter: tight spacing and no paren breaks in display math (
7112b8c) - linter: allow en dash between proper names in dash-length (
2ab4342) - formatter: peel over-attached cell off table rules (
7c91ac9)
Reverts
- “feat(formatter): stack binary chains under the relation too” (
4a6988b)
0.5.0 (2026-07-01)
Features
- lsp: add range formatting support (
5ad2827) - lsp: add workspace symbols support (
eb8a111) - formatter: format expl3 code (catcode 9/10 model) (
ac4ff31) - lsp: watch on-disk tex/bib/config and reanalyze (
b551c01) - dtx: reflow documentation prose under reflow (
be57646) - lsp: outline entries for dtx documented macros (
cba0b01) - lsp: add
textDocument/documentHighlight(404069b) - bench: add formatter speed bench vs tex-fmt & latexindent (
82ddeb5) - format: reflow brace-group bodies as statements (
bb976e0) - lsp: discover and apply badness.toml per document (
e56a8af) - lint: add missing-nonbreaking-space (tie before cite/ref) (
4d75da4) - lsp: surface linter autofixes as code actions (
13c727e) - lsp: resolve completion items with signature and citation detail (
f9892e6) - lsp: add hover for commands, environments and citations (
3c6047c) - lsp: add pull diagnostics (
a73fd7b)
Bug Fixes
- lsp: honor excludes for siblings (
7a50529)
Performance Improvements
- signature: bake CWL tier into a build-time phf map (
a920d4a)
0.4.0 (2026-06-23)
Features
- semantic: mark the cross-reference family inline (
c7c77a7) - semantic: ingest CWL corpus as a bulk signature tier (
4740bf5) - lint: don’t withold lints that disturbs alignment (
8ea1efc) - bib: diagnose missing field separator; fix value trivia attachment (
e14751c) - bib: autofix duplicate-field when values are identical (
c34bd78) - bib: duplicate-field lint rule (
f2f6d60) - lsp: rename labels and citation keys (textDocument/rename + prepareRename) (
7b1d01b) - config: badness.toml configuration (CLI) (
8c68ca2) - project: package load graph + package signatures into scope (
f8e6bc7) - semantic: doc/ltxdoc prose↔code association query (
a52f17c) - file-kind: .ins installation-script support (plain code, Preserve) (
85c9c7a) - formatter: .dtx two-layer formatting (foundation, Preserve) (
6c7861f) - semantic: doc/ltxdoc signatures + DOC_COMMENT node (M3) (
95ec2a2) - parser: lex expl3 syntax mode (_/: as letters) (
c98e2e8) - parser: lex .dtx docstrip guards as GUARD tokens (M2) (
b09c507) - parser: parse .dtx docstrip surface syntax (M0+M1) (
8e54604) - lsp: add textDocument/foldingRange (
f0ea513)
Bug Fixes
- cli: fix file-detection in cli linter (
7821b6a)
0.3.0 (2026-06-21)
Features
- lsp: add textDocument/references (find references) (
2ef3606) - sty/cls: format and lint LaTeX package/class sources (
54692cf) - lsp: bib-aware completion and \cite key completion (
493ad41) - bib: add generator to sync bib_fields.json with biblatex data model (
189de08) - bib: align entry-type required fields to the data model (
35b81d9) - bib: derive field/entry DB from biblatex’s canonical data model (
55a6883) - bib: recognize the full standard biblatex field set (
e2c2639) - semantic: flag user verbatim environments via begin-code catcode scanning (
eefc1a1) - semantic: scan \def-defined verbatim commands and helper chains (
6cad9c1) - semantic: flag user verbatim-argument commands via definition scanning (
19ef5f1) - lsp: go-to-definition for refs and citations (
2535199) - cli: –stdin-filepath routes lint stdin to the bib pipeline (
f8a4831) - cli: –stdin-filepath routes format stdin to the bib pipeline (
96f1b80) - lsp: cross-file project assembly — undefined-ref/citation fire live (
38b7f2c) - bib: Phase 4 — incremental, LSP, and project-graph integration (
b593bdc) - bib: linter rules + CLI wiring (Phase 3) (
571c2d3) - bib: field & entry sorting (Phase 2c) (
438a61d) - bib: value reflow (Phase 2b) — wrap long field values by category (
3cfed27) - bib: formatter (Phase 2) — lower bib CST to shared Wadler IR (
de48afd) - bib: semantic model + field/entry signature DB (
b59befc) - bib: differential parse oracle vs texlab + phased roadmap (
d7360b6) - bib: first-stab BibTeX/BibLaTeX parser (
6f38675) - lsp: add basic completion (
20903b7) - linter: autofix infra + dollar-display-math $$→[ fix (
216f590) - linter: obsolete-environment, dollar-display-math, mismatched-delimiter lints (
8f89b51) - formatter: break wide display math at top-level operators (
716612f) - linter: cross-file label resolution + undefined-ref / duplicate-label (
270a035) - formatter: keep appendix environment body flush like document (
b1a55f7) - formatter: collapse cite-family key lists deterministically (
d88e7e3) - semantic: extract unbraced \newcommand\foo definition form (
f2472d5) - parser: bind leading comments into the following construct (
0afabeb) - lsp: add document symbols (
5547650) - parser: don’t wrap a lone block environment in a PARAGRAPH (
b4a46fe) - formatter: use latexindent-style desc hang (
46ab231) - formatter: reflow inline prose commands inline, not as blocks (
5d706b2) - collapse blanklines into 1 (
b19d8da) - formatter: grid-align comments and rule lines; enable tables (
4cbb183) - formatter: lower display math as an indented block (
5e2cefc) - parser: lex verbatim-argument commands; fix multi-line VERB formatting (
73cf04c) - cli: add badness parse command (
7735a75) - formatter: align itemize blocks (
47a2b19) - formatter: don’t indent document environment (
3cd0d04) - linter: add rule layer with duplicate-label and deprecated-command (
4aaee37) - align & columns in align/matrix environments (
d5abdca) - match \left … \right delimiter pairs in math (
3079875) - add structured math model and math formatting (
02802f6) - support argument-taking verbatim environments (
ab8eb74) - add file-walk for formatter (
1603230)
Bug Fixes
- lsp: handle Windows file URIs in path completion (
5b38f45) - formatter: keep a trailing % on the \begin header line (
e02413f) - formatter: ass JSS/Sweave verbatim environments to signatures (
21b5e61) - don’t reflow single
%(be49170) - formatter: don’t push
%to next line (de271ae) - formatter: fall back when an alignment cell contains a comment (
918c592) - parser: don’t treat comment-only lines as paragraph breaks (
3c83c01) - formatter: keep command-only lines on their own line under reflow (
739a32f) - linter: migrate render.rs to annotate-snippets 0.12 API (
602d835)
0.2.0 (2026-06-12)
Features
0.1.0 (2026-06-12)
Breaking changes
- rename fmt to format (
1fedc1b)
Features
- formatter: reflow signature-marked prose arguments (
18c99ee) - lsp: ra-style writer/threadpool, cancellation, incremental sync (
8628f92) - lsp: reuse cached salsa tree for formatting (
30cd2d5) - implement semantic group scanning (
4f5e9ca) - parser: model \ line break as a LINE_BREAK node (
651e1c5) - formatter: paragraph reflow via a Wadler Fill node (
0cbe264) - semantic: add built-in signature database (
e9bf2de) - rename fmt to format (
1fedc1b) - linter: add minimal
badness lintcommand (443fa6a) - lsp: add minimal lsp server (
7e6f4fe) - formatter: indent multi-line group/argument bodies (
5e66038) - parser: differential parse oracle vs texlab (
25e065c) - lsp: add semantic model and reference support (
61707c1) - build project graph (
cc81a29) - incremental: salsa harness for cached parsing (
67a1948) - formatter: environment-body indentation (
5b3d1b5) - formatter: whitespace normalization (first real rule) (
00385eb) - formatter: Phase 2 formatter MVP — identity round-trip (
ab2ef57) - parser: Phase 1 recursive-descent grammar with error recovery (
511352c)