diff --git a/internal/lsp/cmd/test/format.go b/internal/lsp/cmd/test/format.go index 9442727a84..7189fe1e9d 100644 --- a/internal/lsp/cmd/test/format.go +++ b/internal/lsp/cmd/test/format.go @@ -5,6 +5,9 @@ package cmdtest import ( + "bytes" + "io/ioutil" + "os" "os/exec" "regexp" "strings" @@ -15,37 +18,33 @@ import ( "golang.org/x/tools/internal/tool" ) -var formatModes = [][]string{ - []string{}, - []string{"-d"}, -} - func (r *runner) Format(t *testing.T, spn span.Span) { - for _, mode := range formatModes { - tag := "gofmt" + strings.Join(mode, "") - uri := spn.URI() - filename := uri.Filename() - args := append(mode, filename) - expect := string(r.data.Golden(tag, filename, func() ([]byte, error) { - cmd := exec.Command("gofmt", args...) - contents, _ := cmd.Output() // ignore error, sometimes we have intentionally ungofmt-able files - contents = []byte(normalizePaths(r.data, fixFileHeader(string(contents)))) - return contents, nil - })) - if expect == "" { - //TODO: our error handling differs, for now just skip unformattable files - continue - } - app := cmd.New("gopls-test", r.data.Config.Dir, r.data.Config.Env) - got := CaptureStdOut(t, func() { - _ = tool.Run(r.ctx, app, append([]string{"-remote=internal", "format"}, args...)) - }) - got = normalizePaths(r.data, got) - // check the first two lines are the expected file header - if expect != got { - t.Errorf("format failed with %#v expected:\n%s\ngot:\n%s", args, expect, got) - } + tag := "gofmt" + uri := spn.URI() + filename := uri.Filename() + expect := string(r.data.Golden(tag, filename, func() ([]byte, error) { + cmd := exec.Command("gofmt", filename) + contents, _ := cmd.Output() // ignore error, sometimes we have intentionally ungofmt-able files + contents = []byte(normalizePaths(r.data, fixFileHeader(string(contents)))) + return contents, nil + })) + if expect == "" { + //TODO: our error handling differs, for now just skip unformattable files + t.Skip("Unformattable file") } + app := cmd.New("gopls-test", r.data.Config.Dir, r.data.Config.Env) + got := CaptureStdOut(t, func() { + _ = tool.Run(r.ctx, app, append([]string{"-remote=internal", "format"}, filename)) + }) + got = normalizePaths(r.data, got) + if expect != got { + t.Errorf("format failed for %s expected:\n%s\ngot:\n%s", filename, expect, got) + } + // now check we can build a valid unified diff + unified := CaptureStdOut(t, func() { + _ = tool.Run(r.ctx, app, append([]string{"-remote=internal", "format", "-d"}, filename)) + }) + checkUnified(t, filename, expect, unified) } var unifiedHeader = regexp.MustCompile(`^diff -u.*\n(---\s+\S+\.go\.orig)\s+[\d-:. ]+(\n\+\+\+\s+\S+\.go)\s+[\d-:. ]+(\n@@)`) @@ -57,3 +56,40 @@ func fixFileHeader(s string) string { } return strings.Join(append(match[1:], s[len(match[0]):]), "") } + +func checkUnified(t *testing.T, filename string, expect string, patch string) { + if testing.Short() { + t.Skip("running patch is expensive") + } + if strings.Count(patch, "\n+++ ") > 1 { + // TODO(golang/go/#34580) + t.Skip("multi-file patch tests not supported yet") + } + applied := "" + if patch == "" { + applied = expect + } else { + temp, err := ioutil.TempFile("", "applied") + if err != nil { + t.Fatal(err) + } + temp.Close() + defer os.Remove(temp.Name()) + cmd := exec.Command("patch", "-u", "-p0", "-o", temp.Name(), filename) + cmd.Stdin = bytes.NewBuffer([]byte(patch)) + msg, err := cmd.CombinedOutput() + if err != nil { + t.Errorf("failed applying patch to %s: %v\ngot:\n%s\npatch:\n%s", filename, err, msg, patch) + return + } + out, err := ioutil.ReadFile(temp.Name()) + if err != nil { + t.Errorf("failed reading patched output for %s: %v\n", filename, err) + return + } + applied = string(out) + } + if expect != applied { + t.Errorf("apply unified gave wrong result for %s expected:\n%s\ngot:\n%s\npatch:\n%s", filename, expect, applied, patch) + } +} diff --git a/internal/lsp/cmd/test/rename.go b/internal/lsp/cmd/test/rename.go index f36ac8fd78..c5297b7683 100644 --- a/internal/lsp/cmd/test/rename.go +++ b/internal/lsp/cmd/test/rename.go @@ -6,7 +6,6 @@ package cmdtest import ( "fmt" - "strings" "testing" "golang.org/x/tools/internal/lsp/cmd" @@ -14,35 +13,28 @@ import ( "golang.org/x/tools/internal/tool" ) -var renameModes = [][]string{ - []string{}, - []string{"-d"}, -} - func (r *runner) Rename(t *testing.T, spn span.Span, newText string) { filename := spn.URI().Filename() - for _, mode := range renameModes { - goldenTag := newText + strings.Join(mode, "") + "-rename" - app := cmd.New("gopls-test", r.data.Config.Dir, r.data.Config.Env) - loc := fmt.Sprintf("%v", spn) - args := []string{"-remote=internal", "rename"} - if strings.Join(mode, "") != "" { - args = append(args, strings.Join(mode, "")) - } - args = append(args, loc, newText) - var err error - got := CaptureStdOut(t, func() { - err = tool.Run(r.ctx, app, args) - }) - if err != nil { - got = err.Error() - } - got = normalizePaths(r.data, got) - expect := string(r.data.Golden(goldenTag, filename, func() ([]byte, error) { - return []byte(got), nil - })) - if expect != got { - t.Errorf("rename failed with %#v expected:\n%s\ngot:\n%s", args, expect, got) - } + goldenTag := newText + "-rename" + app := cmd.New("gopls-test", r.data.Config.Dir, r.data.Config.Env) + loc := fmt.Sprintf("%v", spn) + var err error + got := CaptureStdOut(t, func() { + err = tool.Run(r.ctx, app, []string{"-remote=internal", "rename", loc, newText}) + }) + if err != nil { + got = err.Error() } + got = normalizePaths(r.data, got) + expect := string(r.data.Golden(goldenTag, filename, func() ([]byte, error) { + return []byte(got), nil + })) + if expect != got { + t.Errorf("rename failed with %v %v expected:\n%s\ngot:\n%s", loc, newText, expect, got) + } + // now check we can build a valid unified diff + unified := CaptureStdOut(t, func() { + _ = tool.Run(r.ctx, app, []string{"-remote=internal", "rename", "-d", loc, newText}) + }) + checkUnified(t, filename, expect, unified) } diff --git a/internal/lsp/diff/myers/unified.go b/internal/lsp/diff/myers/unified.go index 8339b1064a..9d73dff460 100644 --- a/internal/lsp/diff/myers/unified.go +++ b/internal/lsp/diff/myers/unified.go @@ -104,6 +104,9 @@ func addEqualLines(h *Hunk, lines []string, start, end int) int { } func (u Unified) Format(f fmt.State, r rune) { + if len(u.Hunks) == 0 { + return + } fmt.Fprintf(f, "--- %s\n", u.From) fmt.Fprintf(f, "+++ %s\n", u.To) for _, hunk := range u.Hunks { diff --git a/internal/lsp/testdata/format/bad_format.go.golden b/internal/lsp/testdata/format/bad_format.go.golden index efbf7620c7..31affeccf3 100644 --- a/internal/lsp/testdata/format/bad_format.go.golden +++ b/internal/lsp/testdata/format/bad_format.go.golden @@ -19,25 +19,3 @@ func hi() { log.Printf("") } --- gofmt-d -- ---- format/bad_format.go.orig -+++ format/bad_format.go -@@ -1,16 +1,13 @@ - package format //@format("package") - - import ( -- "runtime" - "fmt" - "log" -+ "runtime" - ) - - func hello() { - -- -- -- - var x int //@diag("x", "LSP", "x declared but not used") - } - - diff --git a/internal/lsp/testdata/format/good_format.go.golden b/internal/lsp/testdata/format/good_format.go.golden index 961de47480..99f47e2e8d 100644 --- a/internal/lsp/testdata/format/good_format.go.golden +++ b/internal/lsp/testdata/format/good_format.go.golden @@ -9,5 +9,3 @@ func goodbye() { log.Printf("byeeeee") } --- gofmt-d -- - diff --git a/internal/lsp/testdata/format/newline_format.go.golden b/internal/lsp/testdata/format/newline_format.go.golden index af427dfe18..7c76afdd56 100644 --- a/internal/lsp/testdata/format/newline_format.go.golden +++ b/internal/lsp/testdata/format/newline_format.go.golden @@ -2,12 +2,3 @@ package format //@format("package") func _() {} --- gofmt-d -- ---- format/newline_format.go.orig -+++ format/newline_format.go -@@ -1,2 +1,2 @@ - package format //@format("package") --func _() {} -\ No newline at end of file -+func _() {} - diff --git a/internal/lsp/testdata/format/one_line.go.golden b/internal/lsp/testdata/format/one_line.go.golden index 3cdcf6998c..4d11f84cba 100644 --- a/internal/lsp/testdata/format/one_line.go.golden +++ b/internal/lsp/testdata/format/one_line.go.golden @@ -1,11 +1,3 @@ -- gofmt -- package format //@format("package") --- gofmt-d -- ---- format/one_line.go.orig -+++ format/one_line.go -@@ -1 +1 @@ --package format //@format("package") -\ No newline at end of file -+package format //@format("package") - diff --git a/internal/lsp/testdata/noparse_format/noparse_format.go.golden b/internal/lsp/testdata/noparse_format/noparse_format.go.golden index 7bdcdadcfd..0060c5c92f 100644 --- a/internal/lsp/testdata/noparse_format/noparse_format.go.golden +++ b/internal/lsp/testdata/noparse_format/noparse_format.go.golden @@ -1,4 +1,2 @@ -- gofmt -- --- gofmt-d -- - diff --git a/internal/lsp/testdata/noparse_format/parse_format.go.golden b/internal/lsp/testdata/noparse_format/parse_format.go.golden index 1191b9602a..667c90b227 100644 --- a/internal/lsp/testdata/noparse_format/parse_format.go.golden +++ b/internal/lsp/testdata/noparse_format/parse_format.go.golden @@ -5,16 +5,3 @@ func _() { f() } --- gofmt-d -- ---- noparse_format/parse_format.go.orig -+++ noparse_format/parse_format.go -@@ -1,5 +1,5 @@ - package noparse_format //@format("package") - - func _() { --f() --} -\ No newline at end of file -+ f() -+} - diff --git a/internal/lsp/testdata/rename/a/random.go.golden b/internal/lsp/testdata/rename/a/random.go.golden index 794483b3e1..7459863ec9 100644 --- a/internal/lsp/testdata/rename/a/random.go.golden +++ b/internal/lsp/testdata/rename/a/random.go.golden @@ -1,23 +1,3 @@ --- GetSum-d-rename -- ---- rename/a/random.go.orig -+++ rename/a/random.go -@@ -19,13 +19,13 @@ - x, y int - } - --func (p *Pos) Sum() int { -+func (p *Pos) GetSum() int { - return p.x + p.y //@rename("x", "myX") - } - - func _() { - var p Pos //@rename("p", "pos") -- _ = p.Sum() //@rename("Sum", "GetSum") -+ _ = p.GetSum() //@rename("Sum", "GetSum") - } - - func sw() { - -- GetSum-rename -- package a @@ -62,27 +42,6 @@ func sw() { } } --- f2name-d-rename -- ---- rename/a/random.go.orig -+++ rename/a/random.go -@@ -3,7 +3,7 @@ - import ( - lg "log" - "fmt" //@rename("fmt", "fmty") -- f2 "fmt" //@rename("f2", "f2name"),rename("fmt","f2y") -+ f2name "fmt" //@rename("f2", "f2name"),rename("fmt","f2y") - ) - - func Random() int { -@@ -37,6 +37,6 @@ - case string: - lg.Printf("%s", y) //@rename("y", "y2"),rename("lg","log") - default: -- f2.Printf("%v", y) //@rename("y", "y3"),rename("f2","fmt2") -+ f2name.Printf("%v", y) //@rename("y", "y3"),rename("f2","fmt2") - } - } - -- f2name-rename -- package a @@ -127,27 +86,6 @@ func sw() { } } --- f2y-d-rename -- ---- rename/a/random.go.orig -+++ rename/a/random.go -@@ -3,7 +3,7 @@ - import ( - lg "log" - "fmt" //@rename("fmt", "fmty") -- f2 "fmt" //@rename("f2", "f2name"),rename("fmt","f2y") -+ f2y "fmt" //@rename("f2", "f2name"),rename("fmt","f2y") - ) - - func Random() int { -@@ -37,6 +37,6 @@ - case string: - lg.Printf("%s", y) //@rename("y", "y2"),rename("lg","log") - default: -- f2.Printf("%v", y) //@rename("y", "y3"),rename("f2","fmt2") -+ f2y.Printf("%v", y) //@rename("y", "y3"),rename("f2","fmt2") - } - } - -- f2y-rename -- package a @@ -192,27 +130,6 @@ func sw() { } } --- fmt2-d-rename -- ---- rename/a/random.go.orig -+++ rename/a/random.go -@@ -3,7 +3,7 @@ - import ( - lg "log" - "fmt" //@rename("fmt", "fmty") -- f2 "fmt" //@rename("f2", "f2name"),rename("fmt","f2y") -+ fmt2 "fmt" //@rename("f2", "f2name"),rename("fmt","f2y") - ) - - func Random() int { -@@ -37,6 +37,6 @@ - case string: - lg.Printf("%s", y) //@rename("y", "y2"),rename("lg","log") - default: -- f2.Printf("%v", y) //@rename("y", "y3"),rename("f2","fmt2") -+ fmt2.Printf("%v", y) //@rename("y", "y3"),rename("f2","fmt2") - } - } - -- fmt2-rename -- package a @@ -257,28 +174,6 @@ func sw() { } } --- fmty-d-rename -- ---- rename/a/random.go.orig -+++ rename/a/random.go -@@ -2,7 +2,7 @@ - - import ( - lg "log" -- "fmt" //@rename("fmt", "fmty") -+ fmty "fmt" //@rename("fmt", "fmty") - f2 "fmt" //@rename("f2", "f2name"),rename("fmt","f2y") - ) - -@@ -33,7 +33,7 @@ - - switch y := x.(type) { //@rename("y", "y0") - case int: -- fmt.Printf("%d", y) //@rename("y", "y1"),rename("fmt", "format") -+ fmty.Printf("%d", y) //@rename("y", "y1"),rename("fmt", "format") - case string: - lg.Printf("%s", y) //@rename("y", "y2"),rename("lg","log") - default: - -- fmty-rename -- package a @@ -323,28 +218,6 @@ func sw() { } } --- format-d-rename -- ---- rename/a/random.go.orig -+++ rename/a/random.go -@@ -2,7 +2,7 @@ - - import ( - lg "log" -- "fmt" //@rename("fmt", "fmty") -+ format "fmt" //@rename("fmt", "fmty") - f2 "fmt" //@rename("f2", "f2name"),rename("fmt","f2y") - ) - -@@ -33,7 +33,7 @@ - - switch y := x.(type) { //@rename("y", "y0") - case int: -- fmt.Printf("%d", y) //@rename("y", "y1"),rename("fmt", "format") -+ format.Printf("%d", y) //@rename("y", "y1"),rename("fmt", "format") - case string: - lg.Printf("%s", y) //@rename("y", "y2"),rename("lg","log") - default: - -- format-rename -- package a @@ -389,28 +262,6 @@ func sw() { } } --- log-d-rename -- ---- rename/a/random.go.orig -+++ rename/a/random.go -@@ -1,7 +1,7 @@ - package a - - import ( -- lg "log" -+ "log" - "fmt" //@rename("fmt", "fmty") - f2 "fmt" //@rename("f2", "f2name"),rename("fmt","f2y") - ) -@@ -35,7 +35,7 @@ - case int: - fmt.Printf("%d", y) //@rename("y", "y1"),rename("fmt", "format") - case string: -- lg.Printf("%s", y) //@rename("y", "y2"),rename("lg","log") -+ log.Printf("%s", y) //@rename("y", "y2"),rename("lg","log") - default: - f2.Printf("%v", y) //@rename("y", "y3"),rename("f2","fmt2") - } - -- log-rename -- package a @@ -455,24 +306,6 @@ func sw() { } } --- myX-d-rename -- ---- rename/a/random.go.orig -+++ rename/a/random.go -@@ -16,11 +16,11 @@ - } - - type Pos struct { -- x, y int -+ myX, y int - } - - func (p *Pos) Sum() int { -- return p.x + p.y //@rename("x", "myX") -+ return p.myX + p.y //@rename("x", "myX") - } - - func _() { - -- myX-rename -- package a @@ -517,21 +350,6 @@ func sw() { } } --- pos-d-rename -- ---- rename/a/random.go.orig -+++ rename/a/random.go -@@ -24,8 +24,8 @@ - } - - func _() { -- var p Pos //@rename("p", "pos") -- _ = p.Sum() //@rename("Sum", "GetSum") -+ var pos Pos //@rename("p", "pos") -+ _ = pos.Sum() //@rename("Sum", "GetSum") - } - - func sw() { - -- pos-rename -- package a @@ -576,27 +394,6 @@ func sw() { } } --- y0-d-rename -- ---- rename/a/random.go.orig -+++ rename/a/random.go -@@ -31,12 +31,12 @@ - func sw() { - var x interface{} - -- switch y := x.(type) { //@rename("y", "y0") -+ switch y0 := x.(type) { //@rename("y", "y0") - case int: -- fmt.Printf("%d", y) //@rename("y", "y1"),rename("fmt", "format") -+ fmt.Printf("%d", y0) //@rename("y", "y1"),rename("fmt", "format") - case string: -- lg.Printf("%s", y) //@rename("y", "y2"),rename("lg","log") -+ lg.Printf("%s", y0) //@rename("y", "y2"),rename("lg","log") - default: -- f2.Printf("%v", y) //@rename("y", "y3"),rename("f2","fmt2") -+ f2.Printf("%v", y0) //@rename("y", "y3"),rename("f2","fmt2") - } - } - -- y0-rename -- package a @@ -641,27 +438,6 @@ func sw() { } } --- y1-d-rename -- ---- rename/a/random.go.orig -+++ rename/a/random.go -@@ -31,12 +31,12 @@ - func sw() { - var x interface{} - -- switch y := x.(type) { //@rename("y", "y0") -+ switch y1 := x.(type) { //@rename("y", "y0") - case int: -- fmt.Printf("%d", y) //@rename("y", "y1"),rename("fmt", "format") -+ fmt.Printf("%d", y1) //@rename("y", "y1"),rename("fmt", "format") - case string: -- lg.Printf("%s", y) //@rename("y", "y2"),rename("lg","log") -+ lg.Printf("%s", y1) //@rename("y", "y2"),rename("lg","log") - default: -- f2.Printf("%v", y) //@rename("y", "y3"),rename("f2","fmt2") -+ f2.Printf("%v", y1) //@rename("y", "y3"),rename("f2","fmt2") - } - } - -- y1-rename -- package a @@ -706,27 +482,6 @@ func sw() { } } --- y2-d-rename -- ---- rename/a/random.go.orig -+++ rename/a/random.go -@@ -31,12 +31,12 @@ - func sw() { - var x interface{} - -- switch y := x.(type) { //@rename("y", "y0") -+ switch y2 := x.(type) { //@rename("y", "y0") - case int: -- fmt.Printf("%d", y) //@rename("y", "y1"),rename("fmt", "format") -+ fmt.Printf("%d", y2) //@rename("y", "y1"),rename("fmt", "format") - case string: -- lg.Printf("%s", y) //@rename("y", "y2"),rename("lg","log") -+ lg.Printf("%s", y2) //@rename("y", "y2"),rename("lg","log") - default: -- f2.Printf("%v", y) //@rename("y", "y3"),rename("f2","fmt2") -+ f2.Printf("%v", y2) //@rename("y", "y3"),rename("f2","fmt2") - } - } - -- y2-rename -- package a @@ -771,27 +526,6 @@ func sw() { } } --- y3-d-rename -- ---- rename/a/random.go.orig -+++ rename/a/random.go -@@ -31,12 +31,12 @@ - func sw() { - var x interface{} - -- switch y := x.(type) { //@rename("y", "y0") -+ switch y3 := x.(type) { //@rename("y", "y0") - case int: -- fmt.Printf("%d", y) //@rename("y", "y1"),rename("fmt", "format") -+ fmt.Printf("%d", y3) //@rename("y", "y1"),rename("fmt", "format") - case string: -- lg.Printf("%s", y) //@rename("y", "y2"),rename("lg","log") -+ lg.Printf("%s", y3) //@rename("y", "y2"),rename("lg","log") - default: -- f2.Printf("%v", y) //@rename("y", "y3"),rename("f2","fmt2") -+ f2.Printf("%v", y3) //@rename("y", "y3"),rename("f2","fmt2") - } - } - -- y3-rename -- package a @@ -836,21 +570,6 @@ func sw() { } } --- z-d-rename -- ---- rename/a/random.go.orig -+++ rename/a/random.go -@@ -11,8 +11,8 @@ - return y - } - --func Random2(y int) int { //@rename("y", "z") -- return y -+func Random2(z int) int { //@rename("y", "z") -+ return z - } - - type Pos struct { - -- z-rename -- package a diff --git a/internal/lsp/testdata/rename/b/b.go.golden b/internal/lsp/testdata/rename/b/b.go.golden index 39831ded4a..5fd037a255 100644 --- a/internal/lsp/testdata/rename/b/b.go.golden +++ b/internal/lsp/testdata/rename/b/b.go.golden @@ -1,4 +1,2 @@ --- uint-d-rename -- -cannot rename builtin "int" -- uint-rename -- cannot rename builtin "int" diff --git a/internal/lsp/testdata/rename/bad/bad.go.golden b/internal/lsp/testdata/rename/bad/bad.go.golden index 8b436f6e7c..7f45813926 100644 --- a/internal/lsp/testdata/rename/bad/bad.go.golden +++ b/internal/lsp/testdata/rename/bad/bad.go.golden @@ -1,4 +1,2 @@ --- rFunc-d-rename -- -renaming "sFunc" to "rFunc" not possible because "golang.org/x/tools/internal/lsp/rename/bad" has errors -- rFunc-rename -- renaming "sFunc" to "rFunc" not possible because "golang.org/x/tools/internal/lsp/rename/bad" has errors diff --git a/internal/lsp/testdata/rename/testy/testy.go.golden b/internal/lsp/testdata/rename/testy/testy.go.golden index c3cd6fffe9..288dfee968 100644 --- a/internal/lsp/testdata/rename/testy/testy.go.golden +++ b/internal/lsp/testdata/rename/testy/testy.go.golden @@ -1,14 +1,3 @@ --- bar-d-rename -- ---- rename/testy/testy.go.orig -+++ rename/testy/testy.go -@@ -3,5 +3,5 @@ - type tt int //@rename("tt", "testyType") - - func a() { -- foo := 42 //@rename("foo", "bar") -+ bar := 42 //@rename("foo", "bar") - } - -- bar-rename -- package testy @@ -18,18 +7,6 @@ func a() { bar := 42 //@rename("foo", "bar") } --- testyType-d-rename -- ---- rename/testy/testy.go.orig -+++ rename/testy/testy.go -@@ -1,6 +1,6 @@ - package testy - --type tt int //@rename("tt", "testyType") -+type testyType int //@rename("tt", "testyType") - - func a() { - foo := 42 //@rename("foo", "bar") - -- testyType-rename -- package testy diff --git a/internal/lsp/testdata/rename/testy/testy_test.go.golden b/internal/lsp/testdata/rename/testy/testy_test.go.golden index 5dd44a71ba..480c8e9953 100644 --- a/internal/lsp/testdata/rename/testy/testy_test.go.golden +++ b/internal/lsp/testdata/rename/testy/testy_test.go.golden @@ -1,24 +1,3 @@ --- b-d-rename -- ---- rename/testy/testy.go.orig -+++ rename/testy/testy.go -@@ -2,6 +2,6 @@ - - type tt int //@rename("tt", "testyType") - --func a() { -+func b() { - foo := 42 //@rename("foo", "bar") - } ---- rename/testy/testy_test.go.orig -+++ rename/testy/testy_test.go -@@ -4,5 +4,5 @@ - - func TestSomething(t *testing.T) { - var x int //@rename("x", "testyX") -- a() //@rename("a", "b") -+ b() //@rename("a", "b") - } - -- b-rename -- testy.go: package testy @@ -39,18 +18,6 @@ func TestSomething(t *testing.T) { b() //@rename("a", "b") } --- testyX-d-rename -- ---- rename/testy/testy_test.go.orig -+++ rename/testy/testy_test.go -@@ -3,6 +3,6 @@ - import "testing" - - func TestSomething(t *testing.T) { -- var x int //@rename("x", "testyX") -+ var testyX int //@rename("x", "testyX") - a() //@rename("a", "b") - } - -- testyX-rename -- package testy