internal/lsp: change the unified diff tests to be less fragile

Change-Id: Ifd9dd5684c8467442cb551a72b4d35ae6faed599
Reviewed-on: https://go-review.googlesource.com/c/tools/+/197158
Run-TryBot: Ian Cottrell <iancottrell@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
diff --git a/internal/lsp/cmd/test/format.go b/internal/lsp/cmd/test/format.go
index 9442727..7189fe1 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 @@
 	"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 @@
 	}
 	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 f36ac8f..c5297b7 100644
--- a/internal/lsp/cmd/test/rename.go
+++ b/internal/lsp/cmd/test/rename.go
@@ -6,7 +6,6 @@
 
 import (
 	"fmt"
-	"strings"
 	"testing"
 
 	"golang.org/x/tools/internal/lsp/cmd"
@@ -14,35 +13,28 @@
 	"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 8339b10..9d73dff 100644
--- a/internal/lsp/diff/myers/unified.go
+++ b/internal/lsp/diff/myers/unified.go
@@ -104,6 +104,9 @@
 }
 
 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 efbf762..31affec 100644
--- a/internal/lsp/testdata/format/bad_format.go.golden
+++ b/internal/lsp/testdata/format/bad_format.go.golden
@@ -19,25 +19,3 @@
 	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 961de47..99f47e2 100644
--- a/internal/lsp/testdata/format/good_format.go.golden
+++ b/internal/lsp/testdata/format/good_format.go.golden
@@ -9,5 +9,3 @@
 	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 af427df..7c76afd 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 3cdcf69..4d11f84 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 7bdcdad..0060c5c 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 1191b96..667c90b 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 @@
 	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 794483b..7459863 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 @@
 	}
 }
 
--- 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 @@
 	}
 }
 
--- 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 @@
 	}
 }
 
--- 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 @@
 	}
 }
 
--- 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 @@
 	}
 }
 
--- 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 @@
 	}
 }
 
--- 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 @@
 	}
 }
 
--- 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 @@
 	}
 }
 
--- 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 @@
 	}
 }
 
--- 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 @@
 	}
 }
 
--- 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 @@
 	}
 }
 
--- 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 @@
 	}
 }
 
--- 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 @@
 	}
 }
 
--- 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 39831de..5fd037a 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 8b436f6..7f45813 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 c3cd6ff..288dfee 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 @@
 	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 5dd44a7..480c8e9 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 @@
 	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