SuperAPI AI 工具集

pr-to-go-linter

通用与其它

查看项目

更新于 10-15 21:52

技能介绍

用途:当用户要求基于某个拉取请求(PR)中修复过的代码模式创建新的自定义 Go linter 时使用该技能,目标是把一个具体的 PR 模式转换为 pkg/linters/<name>/ 下的新 go/analysis linter,并附带测试与 runner 注册。

输入:仓库 owner/name、PR 编号、目标 linter 名称(kebab-case)。

工作流程:读取 PR 元数据与改动文件;读取 PR diff 并提取被修复的重复模式;据此定义一条精确的诊断规则;确认 pkg/linters/ 中尚无 linter 已覆盖该规则;实现 pkg/linters/<name>/<name>.go(导出 Analyzer)、pkg/linters/<name>/<name>_test.go(使用 analysistest)、pkg/linters/<name>/testdata/src/<name>/<name>.go 测试固件(带 // want)、以及在 cmd/linters/main.go 的 multichecker.Main(...) 中注册。随后验证:go test ./pkg/linters/<name>/...、go build ./cmd/linters、make golint-custom。

规则质量要求:在该仓库上高信噪比、低误报;诊断具体且可修复;规则范围与 PR 中的代码一致,不超出证据做泛化;不修改无关的 linter 包。

示例模式来源:对于 PR #33038(将 pkg 中互斥锁位置重构为一致使用延迟解锁),可派生一个 linter 想法,在函数体匹配相同 cache/logger 风格临界区模式时,报告在 lock 后手动 unlock 而非立即 defer unlock 的加锁/解锁区段。

输出期望:pkg/linters/<name>/ 与 cmd/linters/main.go 中的最小实现改动;测试同时覆盖被标记与未被标记的用例;PR 摘要说明来源 PR、提取的模式以及该规则为何安全。