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

我最近使用 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


任何线索如何使用它?


天涯尽头无女友
浏览 203回答 2
2回答

qq_笑_17

可以这样做:    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

胡子哥哥

您可以-fix=true在运行检查器时提供标志。singlechecker将通过运行checker.RegisterFlags()来注册该标志。然后,传递的标志将在analysisflags.Parse()中解析
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go