badness 0.5.0

A language server, formatter, and linter for LaTeX
# Command-Line Help for `badness`

This document contains the help content for the `badness` command-line program.

## `badness`

A formatter, linter, and language server for LaTeX

**Usage:** `badness [OPTIONS] <COMMAND>`

###### **Subcommands:**

* `format` — Format LaTeX source
* `lint` — Lint LaTeX source, reporting parse diagnostics
* `parse` — Parse LaTeX source and print its concrete syntax tree (CST)
* `lsp` — Run the language server over stdio
* `init` — Write a commented starter `badness.toml` to the current directory

###### **Options:**

* `--config <PATH>` — Path to a `badness.toml` to use instead of discovering one. Applies to `format` and `lint`; ignored by `parse`, `lsp`, and `init`
* `--no-config` — Ignore any `badness.toml` and use built-in defaults



## `badness format`

Format LaTeX source.

With paths, formats each file in place. With no paths, reads stdin and writes the formatted result to stdout.

**Usage:** `badness format [OPTIONS] [PATHS]...`

###### **Arguments:**

* `<PATHS>` — Files to format. Omit to read from stdin

###### **Options:**

* `--check` — Report which files would change without writing them. Exits non-zero if any file is not already formatted
* `--stdin-filepath <PATH>` — Name the stdin buffer so its language is dispatched by extension (`.bib` → BibTeX, anything else → LaTeX). No file is read or written; only the extension is used. Ignored when paths are given
* `--line-width <LINE_WIDTH>` — Maximum line width before the formatter breaks a line
* `--indent-width <INDENT_WIDTH>` — Number of spaces per indent step
* `--wrap <WRAP>` — How to lay out line breaks inside a paragraph

  Possible values:
  - `reflow`:
    Greedy fill: wrap words to the line width (default)
  - `sentence`:
    One sentence per line. (Not yet implemented — behaves like `preserve`.)
  - `semantic`:
    Semantic line breaks (sembr.org). (Not yet implemented — like `preserve`.)
  - `preserve`:
    Leave authored line breaks untouched

* `--exclude <PATTERN>` — Gitignore-style pattern to skip during directory discovery (repeatable). Added on top of any `exclude`/`extend-exclude` from `badness.toml`



## `badness lint`

Lint LaTeX source, reporting parse diagnostics.

With paths, lints each file. With no paths, reads stdin. Exits non-zero if any diagnostics are reported.

**Usage:** `badness lint [OPTIONS] [PATHS]...`

###### **Arguments:**

* `<PATHS>` — Files to lint. Omit to read from stdin

###### **Options:**

* `--fix` — Apply safe autofixes in place, then report what remains. Requires path arguments; has no effect on stdin (there is nothing to write)
* `--unsafe-fixes` — Also apply fixes that may change typeset output (requires `--fix`)
* `--stdin-filepath <PATH>` — Name the stdin buffer so its language is dispatched by extension (`.bib` → BibTeX, anything else → LaTeX). No file is read or written; only the extension is used. Ignored when paths are given
* `--exclude <PATTERN>` — Gitignore-style pattern to skip during directory discovery (repeatable). Added on top of any `exclude`/`extend-exclude` from `badness.toml`
* `--select <RULE>` — Run only these rules (repeatable). Overrides `[lint] select` from `badness.toml` when given
* `--ignore <RULE>` — Disable these rules (repeatable). Overrides `[lint] ignore` from `badness.toml` when given



## `badness parse`

Parse LaTeX source and print its concrete syntax tree (CST).

A debugging aid: prints the lossless parse tree as an indented `KIND@range` listing, with token text, followed by any parse errors. With a path, parses that file. With no path, reads stdin.

**Usage:** `badness parse [PATH]`

###### **Arguments:**

* `<PATH>` — File to parse. Omit to read from stdin



## `badness lsp`

Run the language server over stdio

**Usage:** `badness lsp`



## `badness init`

Write a commented starter `badness.toml` to the current directory

**Usage:** `badness init [OPTIONS]`

###### **Options:**

* `--force` — Overwrite an existing `badness.toml`