Code formatters and linters enforce consistent style and catch bugs before they reach production. Modern tools have evolved significantly, with Rust-based formatters offering dramatic speed improvements over earlier JavaScript-based tools.
The Modern Tooling Stack
In 2026, the landscape has shifted toward unified, fast tools that combine formatting and linting:
JavaScript: ESLint → Biome (migration in progress)
Python: autopep8 → Ruff (fast, Rust-based)
Rust: rustfmt, Clippy (built-in)
Go: gofmt (official)
Ruby: RuboCop
Swift: SwiftFormat
Kotlin: ktlint
The trend is clear: Rust-based tools are replacing slower alternatives across the ecosystem.
JavaScript/TypeScript: Biome
Biome has emerged as the leading tool for JavaScript and TypeScript, unifying the roles of ESLint (linting) and Prettier (formatting).
# Install
npm install --save-dev --save-exact @biomejs/biome
# Initialize configuration
npx @biomejs/biome init
// biome.json
{
"$schema": "https://biomejs.dev/schemas/1.8.0/schema.json",
"organizeImports": {
"enabled": true
},
"linter": {
"enabled": true,
"rules": {
"recommended": true,
"complexity": {
"noUselessConstructor": "error"
},
"correctness": {
"noUnusedVariables": "error"
},
"style": {
"useConst": "error"
}
}
},
"formatter": {
"enabled": true,
"indentStyle": "space",
"indentWidth": 2,
"lineWidth": 100
}
}
# Check code
npx @biomejs/biome check src/
# Format code
npx @biomejs/biome format --write src/
# Fix lint violations
npx @biomejs/biome check --apply src/
Biome is 20-50x faster than Prettier and ESLint combined for most projects.
ESLint (Still Relevant)
For projects with extensive custom rules or older codebases, ESLint remains the standard:
npm init @eslint/config@latest
// eslint.config.js (flat config, v9+)
import js from "@eslint/js";
export default [
js.configs.recommended,
{
rules: {
"no-unused-vars": "error",
"no-console": "warn",
"prefer-const": "error",
},
},
];
ESLint's flat config (v9+) simplified the configuration significantly. The ecosystem is gradually migrating, but the large plugin library still makes ESLint valuable for specialized needs.
Python: Ruff
Ruff has revolutionized Python linting and formatting. Written in Rust, it is 10-100x faster than Flake8 and Black.
pip install ruff
# pyproject.toml
[tool.ruff]
line-length = 88
target-version = "py312"
[tool.ruff.lint]
select = ["E", "F", "I", "N", "W", "UP"]
ignore = ["E501"]
[tool.ruff.format]
quote-style = "double"
indent-style = "space"
# Lint
ruff check src/
# Format
ruff format src/
# Fix
ruff check --fix src/
Ruff replaces Flake8, isort, pyupgrade, and autopep8 with a single tool.
Rust: rustfmt and Clippy
Rust's tooling is built-in and first-class:
# Format
rustfmt src/main.rs
# Lint
cargo clippy
# Clippy with strict checks
cargo clippy -- -W clippy::pedantic
# rustfmt.toml
max_width = 100
tab_spaces = 4
edition = "2024"
Go: gofmt and Staticcheck
Go has the simplest approach -- `gofmt` is the official formatter, and there is no debate about style:
# Format (enforces the one true style)
gofmt -w .
# Vet for suspicious constructs
go vet ./...
# Staticcheck for additional linting
go install honnef.co/go/tools/cmd/staticcheck@latest
staticcheck ./...
Multi-Language: pre-commit Hooks
Run formatters and linters automatically before every commit:
# .pre-commit-config.yaml
repos:
- repo: https://github.com/biomejs/pre-commit
rev: v0.1.0
hooks:
- id: biome-check
args: [--apply]
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.4.0
hooks:
- id: ruff
args: [--fix]
- repo: https://github.com/pre-commit/mirrors-prettier
rev: v3.1.0
hooks:
- id: prettier
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.6.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
pip install pre-commit
pre-commit install
Editor Integration
All major editors support formatters and linters via LSP:
// VS Code settings.json
{
"editor.formatOnSave": true,
"[javascript]": { "editor.defaultFormatter": "biomejs.biome" },
"[typescript]": { "editor.defaultFormatter": "biomejs.biome" },
"[python]": { "editor.defaultFormatter": "charliermarsh.ruff" }
}
CI Integration
Enforce formatting and linting in CI:
# .github/workflows/lint.yml
name: Lint
on: [pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- run: npm ci
- run: npx @biomejs/biome ci src/
Summary
The code quality tooling landscape in 2026 is defined by speed. Rust-based tools (Biome, Ruff) have displaced slower alternatives in the JavaScript and Python ecosystems. Go and Rust have official tooling that eliminates style debates. Use pre-commit hooks to enforce formatting locally and CI checks to prevent unformatted code from reaching the main branch. The key principle is automation -- manually policing code style is a waste of human attention. Let the tools handle formatting so code reviews can focus on architecture and logic.