Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Changelog

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 \label labels (01a8b0b)
  • project: scan .aux for label numbers and toc (ed48898)
  • config: add [build] section with aux-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/\documentclass names (2457147)
  • completion: add baked package/class name lists (ff4906d)
  • lsp: add document links (915aea6)
  • lsp: highlight matching \begin/\end pair (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

  • add vscode and open vsx extensions (975f1e4)
  • npm: package for npm (b3a576f)

0.1.0 (2026-06-12)

Breaking changes

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 lint command (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)

Bug Fixes

  • attach arguments to environment (a6772d2)
  • parser: stop $-math at group and \end anchors (1319fd8)