Linting
Rule-based detection of bug-prone patterns, unused code and conventions the formatter does not cover.
Sub-techniques
3
| ID | Name | Description |
|---|---|---|
V1005.001 | Correctness rules | Rules for likely bugs: unused results, shadowing, unreachable code, wrong comparisons. |
V1005.002 | Convention rules | Project conventions encoded as lint rules instead of review comments. |
V1005.003 | Custom lint rules | Repository-specific rules written as plugins or pattern rules for mistakes that recur in review. |
Craft it
- Enable the linter's recommended set and fix or baseline existing findings.
- Turn recurring review comments into custom rules (an ESLint plugin, a Semgrep rule, a Clippy lint config).
- Fail CI on new findings only, so the baseline shrinks without blocking work.
Reverse engineer it
Signs that a codebase already runs this technique, and where to read how it is configured.
- Lint config in pyproject.toml ([tool.ruff]), eslint.config.js, .golangci.yml or clippy.toml.
- A CI job named lint, or a lint script in package.json, Makefile or justfile.
- Inline suppressions (noqa, eslint-disable) show which rules are enforced.
Where the scanned repositories configure it:
.github/workflows/*.ymlin 101 repositoriespackage.jsonin 64 repositoriespyproject.tomlin 40 repositories.pre-commit-config.yamlin 37 repositoriesMakefilein 27 repositorieseslint.config.mjsin 23 repositories
Detected by the scanner as: Linting (bug-prone patterns, unused code and conventions the formatter does not cover.)
Open-source packages
6
- Ruff astral-sh/ruff
- ESLint eslint/eslint
- golangci-lint golangci/golangci-lint
- Clippy rust-lang/rust-clippy
- ShellCheck koalaman/shellcheck
- Error Prone google/error-prone
Tools seen in scans
by repositories that run them
| Tool | Repos | Command seen | Runs in | Docs |
|---|---|---|---|---|
eslint autofix |
107 | eslint . |
pre-commit, ci, local | docs |
ruff-check autofix |
64 | ruff check . |
pre-commit, ci, local | docs |
clippy |
45 | cargo clippy --workspace --all-targets -- -D warnings |
pre-commit, ci, local | docs |
golangci-lint |
26 | golangci-lint run ./... |
pre-commit, ci, local | docs |
biome autofix |
24 | biome format --write . |
ci, local | docs |
flake8 |
17 | flake8 . |
pre-commit, ci, local | docs |
pylint |
17 | pylint comfy_api_nodes |
pre-commit, ci, local | docs |
shellcheck |
10 | shellcheck -V |
pre-commit, ci | docs |
go-vet |
9 | go vet ./... |
ci, local | docs |
staticcheck |
1 | staticcheck -checks=U1000 ./... 2>&1 |
ci | docs |
Procedure examples
repositories that run it, most-starred first; 40 of 144
| Repository | Tools | Runs in | Evidence |
|---|---|---|---|
| freeCodeCamp/freeCodeCamp | eslint |
local | api/package.json scripts.lint |
| nousresearch/hermes-agent | eslint, ruff-check |
pre-commit, ci, local | lefthook.yml pre-commit.jobs[1] |
| TheAlgorithms/Python | ruff-check |
pre-commit, ci | .github/workflows/ruff.yml jobs.ruff.steps[2] |
| microsoft/vscode | clippy |
ci | .github/workflows/pr-linux-cli-test.yml jobs.cli.steps[6] (Clippy lint) |
| ollama/ollama | golangci-lint |
ci | .github/workflows/test.yaml jobs.test.steps[13] |
| iptv-org/iptv | eslint |
local | package.json scripts.lint |
| vercel/next.js | eslint |
local | package.json scripts.lint-eslint |
| facebook/react-native | eslint |
local | package.json scripts.lint |
| langgenius/dify | eslint, golangci-lint, ruff-check |
ci, local | package.json scripts.lint:eslint |
| nodejs/node | shellcheck |
ci | .github/workflows/linters.yml jobs.lint-sh.steps[1] |
| langflow-ai/langflow | ruff-check |
pre-commit, ci, local | .github/workflows/py_autofix.yml jobs.lint.steps[2] |
| axios/axios | eslint |
ci, local | .github/workflows/run-ci.yml jobs.build-and-run-vitest.steps[3] (Lint) |
| mui/material-ui | eslint |
local | package.json scripts.eslint |
| fatedier/frp | go-vet, golangci-lint |
ci, local | Makefile target vet (line 37) |
| ant-design/ant-design | biome, eslint |
local | package.json scripts.format |
| mermaid-js/mermaid | eslint |
ci, local | .github/workflows/autofix.yml jobs.autofix.steps[4] (Fix Linting) |
| fastapi/fastapi | ruff-check |
pre-commit, ci | .github/workflows/pre-commit.yml jobs.pre-commit.steps[10] |
| django/django | biome, flake8 |
pre-commit, ci, local | .github/workflows/linters.yml jobs.biome.steps[3] |
| comfyanonymous/ComfyUI | pylint, ruff-check |
ci | .github/workflows/ruff.yml jobs.pylint.steps[4] (Run Pylint) |
| sveltejs/svelte | eslint |
ci, local | .github/workflows/ci.yml jobs.Lint.steps[5] (lint) |
| ggml-org/llama.cpp | flake8 |
pre-commit | .pre-commit-config.yaml hooks.flake8 |
| gin-gonic/gin | golangci-lint |
ci | .github/workflows/gin.yml jobs.lint.steps[2] (Setup golangci-lint) |
| home-assistant/core | pylint, ruff-check |
pre-commit, ci | .github/workflows/ci.yaml jobs.pylint.steps[3] (Run pylint (fully)) |
| infiniflow/ragflow | ruff-check |
pre-commit | lefthook.yml pre-commit.jobs[3] |
| earendil-works/pi | clippy |
ci | .github/workflows/env.yml jobs.tests.steps[4] (Daemon format, lint and unit t... |
| oven-sh/bun | clippy |
ci, local | .github/workflows/rust-lints.yml jobs.clippy.steps[2] (cargo clippy) |
| python/cpython | ruff-check |
pre-commit | .pre-commit-config.yaml hooks.ruff-check |
| microsoft/playwright | eslint |
ci, local | .github/workflows/infra.yml jobs.doc-and-lint.steps[5] |
| pallets/flask | ruff-check |
pre-commit, ci, local | .github/workflows/pre-commit.yaml jobs.main.steps[4] |
| unionlabs/union | eslint |
local | app2/package.json scripts.lint |
| TauricResearch/TradingAgents | ruff-check |
ci | .github/workflows/ci.yml jobs.lint.steps[3] (Lint the repository) |
| expressjs/express | eslint |
ci, local | .github/workflows/ci.yml jobs.lint.steps[3] (Run lint) |
| browser-use/browser-use | ruff-check |
pre-commit, ci | .github/workflows/lint.yml jobs.lint-syntax.steps[2] |
| grafana/grafana | eslint, golangci-lint |
pre-commit, ci, local | .github/workflows/frontend-lint.yml jobs.lint-frontend-prettier.steps[4] |
| google-gemini/gemini-cli | eslint |
local | package.json scripts.lint:fix |
| zed-industries/zed | clippy |
ci | .github/workflows/autofix_pr.yml jobs.run_autofix.steps[10] (autofix_pr::run_... |
| astral-sh/uv | clippy |
ci | .github/workflows/check-lint.yml jobs.clippy-ubuntu.steps[3] (Clippy) |
| alacritty/alacritty | clippy |
ci | .github/workflows/ci.yml jobs.build.steps[4] (Clippy) |
| prometheus/prometheus | golangci-lint |
ci | .github/workflows/ci.yml jobs.golangci.steps[4] (Lint) |
| nuxt/nuxt | eslint |
local | package.json scripts.lint |