Straitjacket

Config file

Instead of passing flags every time, check a straitjacket.toml into your repo. Straitjacket picks it up automatically — from the current directory or any parent — so every run (local or CI) starts from the same settings.

# straitjacket.toml
paths = ["src", "tests"]
skip = ["motion"]
max-lines = 800
theme-files = ["src/theme/tokens.css"]
file-size-exclude = ["notes/"]
no-comments = false

Every key is optional. Written out in full, the defaults are:

paths = ["."]
only = []
skip = []
max-lines = 1500
file-size-exclude = []
todo-exclude = []
theme-files = []
max-nesting = 8
no-comments = false
include-json = false
no-ignore = false
no-fail = false
fail-on-unused-markers = true

Keys#

Every key mirrors a CLI flag one-for-one, in kebab-case:

key type flag
paths list of strings positional paths
format text | json | sarif --format
only list of rule ids --only
skip list of rule ids --skip
max-lines number (0 disables file-size) --max-lines
max-nesting number (0 disables deep-nesting) --max-nesting
file-size-exclude list of path prefixes
todo-exclude list of path prefixes
theme-files list of paths allowed to define colors
no-comments boolean --no-comments (no-comments mode)
include-json boolean --include-json
no-ignore boolean --no-ignore
no-fail boolean --no-fail
fail-on-unused-markers boolean --no-fail-on-unused-markers

An unknown key is an error, and so is an unknown rule id in only/skip — a typo'd setting is surfaced, not silently ignored. The rule ids are the ones in the rules reference.

theme-files designates the files that are allowed to define color literals, so a palette or token module doesn't have to be papered over with markers. file-size-exclude and todo-exclude are path prefixes those two rules skip.

Precedence#

Settings layer in this order, each overriding the one before:

  1. Built-in defaults
  2. straitjacket.toml
  3. CLI flags

So a --max-lines 0 on the command line wins over max-lines = 800 in the file, which wins over the default of 1500.

Discovery#

Straitjacket looks for straitjacket.toml in the current directory and walks up to the filesystem root, using the first it finds. When a file is loaded it prints a one-line note to stderr, so stdout stays clean for --format json and --format sarif.

Sections from removed rules#

Configuration written for an older Straitjacket that carried the fact-backed rules — [facts], [effects], [errors] — is rejected with an error naming the rules that went away, rather than being quietly ignored. Delete the section; those rules are not coming back in this line of the tool.

With the GitHub Action#

The Action runs Straitjacket inside your checked-out repo, so a committed straitjacket.toml is picked up with no extra configuration. Leave the Action's inputs blank to defer to the file; set an input to override it for that workflow.