pr-to-go-linter
tarafından github
Birleştirilmiş veya açık bir PR deseninden yeni bir pkg/linters analizörü oluşturur.
npx skills add https://github.com/github/gh-aw --skill pr-to-go-linterPR to Go Linter
Use this skill when a user asks to create a new custom Go linter based on a code pattern fixed in a pull request.
Goal
Convert one concrete PR pattern into a new go/analysis linter under pkg/linters/<name>/ with tests and runner registration.
Inputs
- Repository owner/name
- Pull request number
- Target linter name (kebab-case)
Workflow
- Read PR metadata and changed files.
- Read the PR diff and extract the repeated pattern that was fixed.
- Define one precise diagnostic rule from that pattern.
- Confirm no existing linter in
pkg/linters/already covers it. - Implement:
pkg/linters/<name>/<name>.gowith exportedAnalyzerpkg/linters/<name>/<name>_test.gousinganalysistestpkg/linters/<name>/testdata/src/<name>/<name>.gofixtures with// wantcmd/linters/main.goregistration inmultichecker.Main(...)
- Validate:
go test ./pkg/linters/<name>/...go build ./cmd/lintersmake golint-custom
Rule quality checks
- High signal, low false positives on this repository.
- Diagnostic is specific and fixable.
- Rule scope matches code in the PR (do not generalize beyond evidence).
- Do not change unrelated linter packages.
Example pattern source
For PR #33038 (Refactor pkg mutex sites to use deferred unlocks consistently), derive a linter idea that reports lock/unlock sections that manually unlock instead of deferring unlock immediately after lock when the function body matches the same cache/logger-style critical section pattern.
Output expectations
- Minimal implementation-only diff in
pkg/linters/<name>/andcmd/linters/main.go. - Tests prove both flagged and non-flagged cases.
- PR summary explains: source PR, extracted pattern, and why the rule is safe.