Linting & Formatting
Use lintro for linting and formatting checks.
Rustume uses lintro for all linting and formatting —
run uv run lintro chk to check and uv run lintro fmt to auto-fix. Do not run native tools
directly; lintro orchestrates the same toolchain CI uses.
Quick commands
# Check for issues (CI mode — fails on warnings)
uv run lintro chk
# Auto-fix formatting
uv run lintro fmt
# Run tests with coverage reporting
uv run lintro tst
Run these from the Rustume repository root where
pyproject.toml lives — requires uv.
What lintro runs
lintro auto-detects and runs 28 tools across the
monorepo (see uv run lintro tools):
| Category | Tools |
|---|---|
| Rust | rustfmt, clippy, cargo_audit, cargo_deny |
| Python | ruff, black, bandit, mypy, pydoclint, pytest |
| TypeScript / JavaScript | oxlint, oxfmt, prettier, tsc* |
| Shell | shellcheck, shfmt |
| Markup / config | markdownlint, yamllint, taplo, prettier |
| CI / containers | actionlint, hadolint |
| Security | gitleaks, osv_scanner, semgrep, bandit, cargo_audit, cargo_deny |
| SQL | sqlfluff |
| Framework checkers† | astro-check, svelte-check, vue-tsc |
* tsc and † astro-check are disabled in
.lintro-config.yaml for this
repo — the docs site type-checks via make site-test instead.
Configuration lives in
.lintro-config.yaml. CI runs
the same checks via
scripts/ci/lintro/.
Pre-commit workflow
Before pushing:
make test
uv run lintro chk
Fix formatting issues:
uv run lintro fmt
uv run lintro chk # verify clean
See Development setup for make test.
CI integration
Pull requests trigger ci-lintro-analysis.yml which:
- Pulls the lintro Docker image (or runs locally)
- Executes
lintro chkacross the workspace - Posts results as PR comment on failure
Conventional Commits PR titles are enforced separately
(semantic-pr-title.yml).
Makefile alternatives
The Makefile includes native Rust / JavaScript lint targets for quick local checks:
make lint # cargo clippy + bun lint
make fmt # cargo fmt + bun fmt
Prefer uv run lintro chk/fmt for parity with CI. Use
Makefile targets only for fast iteration on
Rust-only changes.
CI parity
CI runs lintro in Docker via
reusable-quality-lint. Match it locally with:
uv run lintro chk
uv run lintro fmt
Common fixes
Clippy -D warnings — all clippy warnings are errors. Fix
or allow explicitly with justification.
Import order — lintro fmt handles import sorting in
TypeScript files.
Trailing whitespace / final newline — auto-fixed by lintro fmt.
Conventional commits — PR titles must follow Conventional Commits format (enforced by CI, not lintro).
Adding new tools
To add a linter to lintro, follow the lintro plugin guide.
Rustume-specific CI wiring goes in scripts/ci/.
Editor integration
Configure your editor to run uv run lintro fmt on save, or use separate formatters that match
lintro output (rustfmt
for Rust, Prettier for
TypeScript). The source of truth is always lintro chk in CI.