diff --git a/internal/lsp/cmd/rename.go b/internal/lsp/cmd/rename.go index 98f7d69c1d..42eeeaa12c 100644 --- a/internal/lsp/cmd/rename.go +++ b/internal/lsp/cmd/rename.go @@ -23,8 +23,9 @@ import ( // 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 @@ func (r *rename) Run(ctx context.Context, args ...string) error { 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: