Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.0.0-20201028153306-37f0764111ff / go / analysis / internal / checker / checker_test.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201028153306-37f0764111ff/go/analysis/internal/checker/checker_test.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201028153306-37f0764111ff/go/analysis/internal/checker/checker_test.go
new file mode 100644 (file)
index 0000000..7c0d0a9
--- /dev/null
@@ -0,0 +1,97 @@
+package checker_test
+
+import (
+       "fmt"
+       "go/ast"
+       "io/ioutil"
+       "path/filepath"
+       "testing"
+
+       "golang.org/x/tools/go/analysis"
+       "golang.org/x/tools/go/analysis/analysistest"
+       "golang.org/x/tools/go/analysis/internal/checker"
+       "golang.org/x/tools/go/analysis/passes/inspect"
+       "golang.org/x/tools/go/ast/inspector"
+       "golang.org/x/tools/internal/testenv"
+)
+
+var from, to string
+
+func TestApplyFixes(t *testing.T) {
+       testenv.NeedsGoPackages(t)
+
+       from = "bar"
+       to = "baz"
+
+       files := map[string]string{
+               "rename/test.go": `package rename
+
+func Foo() {
+       bar := 12
+       _ = bar
+}
+
+// the end
+`}
+       want := `package rename
+
+func Foo() {
+       baz := 12
+       _ = baz
+}
+
+// the end
+`
+
+       testdata, cleanup, err := analysistest.WriteFiles(files)
+       if err != nil {
+               t.Fatal(err)
+       }
+       path := filepath.Join(testdata, "src/rename/test.go")
+       checker.Fix = true
+       checker.Run([]string{"file=" + path}, []*analysis.Analyzer{analyzer})
+
+       contents, err := ioutil.ReadFile(path)
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       got := string(contents)
+       if got != want {
+               t.Errorf("contents of rewritten file\ngot: %s\nwant: %s", got, want)
+       }
+
+       defer cleanup()
+}
+
+var analyzer = &analysis.Analyzer{
+       Name:     "rename",
+       Requires: []*analysis.Analyzer{inspect.Analyzer},
+       Run:      run,
+}
+
+func run(pass *analysis.Pass) (interface{}, error) {
+       inspect := pass.ResultOf[inspect.Analyzer].(*inspector.Inspector)
+       nodeFilter := []ast.Node{(*ast.Ident)(nil)}
+       inspect.Preorder(nodeFilter, func(n ast.Node) {
+               ident := n.(*ast.Ident)
+               if ident.Name == from {
+                       msg := fmt.Sprintf("renaming %q to %q", from, to)
+                       pass.Report(analysis.Diagnostic{
+                               Pos:     ident.Pos(),
+                               End:     ident.End(),
+                               Message: msg,
+                               SuggestedFixes: []analysis.SuggestedFix{{
+                                       Message: msg,
+                                       TextEdits: []analysis.TextEdit{{
+                                               Pos:     ident.Pos(),
+                                               End:     ident.End(),
+                                               NewText: []byte(to),
+                                       }},
+                               }},
+                       })
+               }
+       })
+
+       return nil, nil
+}