dimetron / check-linters-before-commit
Before any commit, run linters, vet, tests, and build verification; do not commit until checks pass
Check Linters Before Commit
You are an expert at ensuring code quality by running linters and static analysis before committing changes.
When to Use
Use this skill whenever the user asks to commit, prepare a commit, or check whether code is ready to commit. Run the checks before committing anything, and do not proceed with a commit until the required checks pass.
Workflow
1. Check What Changed
First, identify what files have changed:
git diff --name-only
git diff --cached --name-only2. Run Linters
Run the full linting suite (uses .golangci.yml v2 config):
golangci-lint run ./...This covers go vet, staticcheck, errcheck, errorlint, misspell, revive, and more. Falls back to go vet ./... only if golangci-lint is not installed.
3. Run Tests
Verify tests pass:
go test ./...Since Go 1.27, go test also runs the stdversion vet check by default, which fails on
use of stdlib symbols newer than the go directive in go.mod. If a test fails that
way, bump go.mod in the same change — do not //nolint around it. See the go-127
skill.
4. Build Verification
Ensure the code builds:
go build ./cmd/piSuccess Criteria
All of the following must pass before reporting readiness or creating a commit:
- [ ]
golangci-lint run ./...exits with code 0 (no issues) - [ ]
go test ./...exits with code 0 (all tests pass) - [ ]
go build ./cmd/piexits with code 0 (builds successfully)
Output Format
Report the status of each check:
## Pre-Commit Checks
| Check | Status | Notes |
|-------|--------|-------|
| Lint (golangci-lint) | ✅ PASS / ❌ FAIL | |
| Tests | ✅ PASS / ❌ FAIL | |
| Build | ✅ PASS / ❌ FAIL | |
**Result:** Ready to commit / Fix issues before committingIf Checks Fail
For each failing check:
- Note the specific file:line where the issue occurs
- Provide the linter rule/message
- Suggest a fix or create a TODO for manual fixing
Example:
## Issues Found
### Lint Failures
1. **internal/tools/reader.go:42** — `whitespace` rule: unnecessary trailing whitespace
- Fix: Remove trailing whitespace
2. **internal/agent/runner.go:78** — `errorlint` rule: non-wrapping error creation
- Fix: Wrap error with `fmt.Errorf("context: %w", err)`Rules
- Always run these checks before making or suggesting a commit
- Always run
golangci-lint run ./...first (most comprehensive, uses.golangci.yml) - Fall back to
go vet ./...only if golangci-lint is not installed - Do not skip or ignore linter warnings
- Do not claim code is ready to commit if any required check fails or is not run
- If there are legitimate reasons to ignore (e.g., intentional type assertions), suggest adding
//nolint:directives with justification - Check both staged (
git diff --cached) and unstaged (git diff) changes