blob: 8a3ec4b2f648dcd585961f0b711db18df1cb8d18 [file] [log] [blame]
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"
)
var from, to string
func TestApplyFixes(t *testing.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 rewrtitten 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{
ident.Pos(), ident.End(), "", msg,
[]analysis.SuggestedFix{
{msg, []analysis.TextEdit{
{ident.Pos(), ident.End(), []byte(to)}},
}},
})
}
})
return nil, nil
}