--- source_keys: - context7-pre-commit-com - pre-commit-com - context7-pre-commit-hooks - pre-commit-hooks-github --- # Hook Recommendations by Language / Context Use this table when creating a config from scratch or recommending hooks to add. Always check the existing config for duplicates before proposing. Fixer hooks (`trailing-whitespace`, `end-of-file-fixer`, `pretty-format-json` and the like) rewrite files but do NOT re-stage them, so the commit is still blocked and the user has to stage and commit again. Say so when proposing one — otherwise the first blocked commit reads as the hook being broken. ## `pre-commit/pre-commit-hooks` (rev `v6.0.0`) | Hook ID | Language / Context | |---------|---------------------| | `end-of-file-fixer` | Universal | | `trailing-whitespace` | Universal | | `check-merge-conflict` | Universal | | `detect-private-key` | Universal | | `check-added-large-files` | Universal | | `check-case-conflict` | Universal | | `mixed-line-ending` | Universal | | `no-commit-to-branch` | Universal — defaults to blocking `main`+`master` with no args; add `args: [--branch, ]` only to protect additional branch names | | `check-ast` | Python (`.py`) | | `check-builtin-literals` | Python (`.py`) | | `check-json` | JSON (`.json`) | | `pretty-format-json` | JSON (`.json`) | | `check-yaml` | YAML (`.yaml`, `.yml`) — for Kubernetes/Helm with custom tags add `args: ['--unsafe']` and `exclude: ^helm/templates/` | | `check-toml` | TOML (`.toml`) | Full repo URL: `https://github.com/pre-commit/pre-commit-hooks`. For Python formatting, check if `black`, `ruff`, or `isort` is already configured in `pyproject.toml` before recommending them. ## Other repos | Hook ID | Repo | Rev | Notes | |---------|------|-----|-------| | `shellcheck` | `https://github.com/jumanjihouse/pre-commit-hooks` | `3.0.0` | **Unverified — not in research corpus, verify upstream before use.** Recommended args: `args: [--severity=warning]` | | `gitleaks` | `https://github.com/gitleaks/gitleaks` | `v8.30.1` | **Unverified — not in research corpus, verify upstream before use.** | | `conventional-pre-commit` | `https://github.com/compilerla/conventional-pre-commit` | `v2.4.0` | Stage `commit-msg`; also add `default_install_hook_types: [pre-commit, commit-msg]` to the top-level config if not already present | ## Meta-validation (add last, after all other repos) ```yaml - repo: meta hooks: - id: check-hooks-apply # catches hooks that match no files - id: check-useless-excludes # catches exclude patterns that match no files ``` ## Local hooks (repo: local) Use for repo-specific scripts that don't belong in an external hook repo. ```yaml - repo: local hooks: - id: run-tests name: Run test suite entry: bash tests/run-tests.sh language: unsupported_script pass_filenames: false always_run: true stages: [pre-push] ``` `language: system` and `language: script` are deprecated names for the first two below. New local hooks use `unsupported` and `unsupported_script`. Language choices for local hooks: - `unsupported` — system PATH tool (pre-commit does not manage env) - `unsupported_script` — script at a repo-relative path - `fail` — always-fail guard; `entry` text becomes the error message - `python` — isolated venv; use `additional_dependencies` for pip packages - `node` — isolated node env; `additional_dependencies` are npm packages - `ruby` — isolated gem env; `additional_dependencies` are gems - `golang` — builds from source; `additional_dependencies` are Go module paths - `rust` — Cargo build - `docker` — Docker image built from `entry`; use when no other language fits - `docker_image` — pulls a pre-built Docker image by `entry` - `conda` — Conda environment; conda-native hooks - `coursier` — Coursier (Scala/JVM) environment; JVM hooks ## Rev pin freshness The revs above were last verified current at time of writing (matched against the plugin's own research corpus in `docs/research/docs/pre-commit/`; rows marked "Unverified" have no such backing and must be checked against upstream before use). Since the "Rev staleness" check in `references/modify-config.md` treats these tables as ground truth, a pin that goes stale here produces false-positive staleness warnings for users who already have a newer, correct rev. Re-verify these pins periodically (e.g. against each repo's latest release tag). When in doubt, treat `pre-commit autoupdate`'s own output as the authoritative staleness signal, not a mismatch against these tables.