为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 go/analysis 为 Go 检查器定义修复操作?

如何使用 go/analysis 为 Go 检查器定义修复操作?

Go
天涯尽头无女友 2022-05-23 16:11:44
我最近使用 and 编写了一个 Go 检查器golang.org/x/tools/go/analysis,golang.org/x/tools/go/analysis/singlechecker并且我设法编写了自己的自定义文件操作机制(跟踪文件偏移等),但我觉得我在与系统作斗争。https://pkg.go.dev/golang.org/x/tools/go/analysis/internal/checker中似乎Fix定义了一个标志,但我不知道如何使用它或挂钩到使用它的系统.也可以定义-fix        apply all suggested fixes当检查器编译时singlechecker:import (    "golang.org/x/tools/go/analysis/singlechecker")var (    Analyzer = &analysis.Analyzer{        Name: "name",        Run: run,    }    // Can't define a "fix" flag because golang.org/x/tools/go/analysis/internal/checker    // defines it and flags cannot be redefined.    // Fix = flag.Bool("autofix", false, "apply fixes automatically")    Fix bool)func main() {    // NOTE:    // Don't do this at home. This should be properly integrated with    // "golang.org/x/tools/go/analysis/internal/checker" flags (specifically -fix    // flag) but I have no idea how to do that and the documentation is non existent.    if len(os.Args) > 1 {        for _, arg := range os.Args[1:] {            if arg == "-fix" {                Fix = true                break            }        }    }    singlechecker.Main(Analyzer)}我也找不到任何关于它的文档。Fix在此处启用标志时应该运行的代码: https ://github.com/golang/tools/blob/268ba720d32c891185aa340e8851e215f23173db/go/analysis/internal/checker/checker.go#L265任何线索如何使用它?
查看完整描述

2 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

可以这样做:


    pass.Report(

    analysis.Diagnostic{

        Pos:     be.Pos(),

        Message: fmt.Sprintf("do not compare errors directly, use errors.Is() instead: %q", oldExpr),

        SuggestedFixes: []analysis.SuggestedFix{

            {

                Message: fmt.Sprintf("should replace %q with %q", oldExpr, newExpr),

                TextEdits: []analysis.TextEdit{

                    {

                        Pos:     be.Pos(),

                        End:     be.End(),

                        NewText: []byte(newExpr),

                    },

                },

            },

        },

    },

开始阅读的好地方是https://godoc.org/golang.org/x/tools/go/analysis#Diagnostic


查看完整回答
反对 回复 2022-05-23
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

您可以-fix=true在运行检查器时提供标志。singlechecker将通过运行checker.RegisterFlags()来注册该标志。然后,传递的标志将在analysisflags.Parse()中解析


查看完整回答
反对 回复 2022-05-23
  • 2 回答
  • 0 关注
  • 202 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信