| name | go-linters |
| description | Add and validate custom Go analysis linters in gh-aw. |
Go Linters
Use this guide when adding a new custom Go analysis linter in this repository.
For PR-driven linter generation (derive a rule from a specific pull request pattern), use .github/skills/pr-to-go-linter/SKILL.md.
Where to add a new linter
- Create a new package under
pkg/linters/<linter-name>/.
- Define an analyzer in that package (exported as
Analyzer).
- Add tests in the same package using
analysistest with fixtures under testdata/src/....
- Register the analyzer in
cmd/linters/main.go so it runs via the multichecker binary.
Build and test linters
- Test only your linter package:
go test ./pkg/linters/<linter-name>/...
- Build the custom linter runner:
- Run all custom linters across the repo:
make golint-custom builds cmd/linters and runs it against ./cmd/... and ./pkg/....
Coverage-aware perf gating
For linters that flag micro-optimizations (allocation/perf rules), only apply them on lines that
tests actually exercise — "hot paths" — rather than on dead or rarely-executed code where the
optimization brings no measurable benefit. Use the shared pkg/linters/internal/coverage package:
-
In your analyzer file, register a -hot-threshold flag in init() (not as a var initializer,
to avoid an //flag initialization cycle):