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
 
