internal/lsp/cmd: don't create .orig files for rename by default

Fixes golang/go#35551

Change-Id: I78086e0288da84a4c0b008d05e376f47b30d978a
Reviewed-on: https://go-review.googlesource.com/c/tools/+/207347
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Cottrell <iancottrell@google.com>
diff --git a/internal/lsp/cmd/rename.go b/internal/lsp/cmd/rename.go
index 98f7d69..42eeeaa 100644
--- a/internal/lsp/cmd/rename.go
+++ b/internal/lsp/cmd/rename.go
@@ -23,8 +23,9 @@
 
 // rename implements the rename verb for gopls.
 type rename struct {
-	Diff  bool `flag:"d" help:"display diffs instead of rewriting files"`
-	Write bool `flag:"w" help:"write result to (source) file instead of stdout"`
+	Diff     bool `flag:"d" help:"display diffs instead of rewriting files"`
+	Write    bool `flag:"w" help:"write result to (source) file instead of stdout"`
+	Preserve bool `flag:"preserve" help:"preserve original files"`
 
 	app *Application
 }
@@ -102,9 +103,10 @@
 		switch {
 		case r.Write:
 			fmt.Fprintln(os.Stderr, filename)
-			err := os.Rename(filename, filename+".orig")
-			if err != nil {
-				return errors.Errorf("%v: %v", edits, err)
+			if r.Preserve {
+				if err := os.Rename(filename, filename+".orig"); err != nil {
+					return errors.Errorf("%v: %v", edits, err)
+				}
 			}
 			ioutil.WriteFile(filename, []byte(newContent), 0644)
 		case r.Diff: