Lint is a fast, cheap quality gate
Linting catches issues structural enough to be caught without running the code: unused imports, undefined variables, suspicious patterns, style violations, simple bug shapes (mutable default arguments, nested ternaries). It's the cheapest CI step and should run first.
Tools you'll use
- Python:
ruff(Astral) replaces flake8, isort, pylint-most, black formatting. 100× faster than the previous stack. - JavaScript / TypeScript:
biome(the new Rust-based default) oreslint + prettier. Biome is faster and unified; eslint has the older plugin ecosystem. - Go:
golangci-lintbundles dozens of linters. - Rust:
clippyis built in. - YAML:
yamllint, plusactionlintfor GitHub Actions YAML specifically. - Shell scripts:
shellcheck.
Pre-commit hooks let you run these locally before pushing. CI is the safety net, not the first line.