Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Badness
Badness is a language server, formatter, and linter for LaTeX, built on a lossless concrete syntax tree.
It parses LaTeX once and serves three tools from that tree:
- Formatter (
badness format): deterministic, rule-based layout. - Linter (
badness lint): diagnostics with source snippets. - Language server (
badness lsp): both, live in your editor.
The architecture follows rust-analyzer: a generic, error-tolerant, hand-written parser produces a lossless tree, semantics are layered on top as a separate concern, and recomputation is incremental. badness never requires resolving macros or catcodes to succeed—anything it cannot statically recognize degrades to generic nodes rather than a crash. Two properties hold by construction and are enforced as tests: losslessness (the tree reconstructs the input byte-for-byte) and idempotence (formatting an already formatted file changes nothing).
Installation
Badness is available from several sources:
- crates.io:
cargo install badness - npm:
npm install -g badness(bundles a prebuilt binary) - PyPI:
uv tool install badness/pipx install badness - Prebuilt binaries: from the releases page
- VS Code/Open VSX: the Badness extension (also works in Positron and Cursor)
- From source:
cargo install --path .in a checkout
The VS Code/Open VSX extension bundles the badness binary and starts the
language server automatically when you open a .tex file.
Usage
# Format a file in place (or stdin → stdout with no path)
# Verify formatting without writing—exits non-zero if anything would change
# Lint, reporting parse diagnostics
# Run the language server over stdio
Formatter style is set through flags: --line-width (default 80),
--indent-width (default 2), and --wrap (reflow by default; also
preserve, sentence, and semantic). Persistent settings live in a
badness.toml. See the documentation for the full reference.
The language server runs over stdio (badness lsp); see the editor setup
guide for Neovim and VS Code
wiring.
Documentation
Full documentation lives at https://badness.dev/ (built with
mdBook from docs/).
Contributing
Architecture, tenets, and conventions are documented in
AGENTS.md, written for both human and AI contributors. In short:
keep the syntactic layer free of semantic knowledge, every parser feature needs
corpus and snapshot tests plus a losslessness assertion, and code stays
rustfmt-clean with clippy warnings treated as errors.