internal/lsp: correctly apply file edits for edit go directive

Fixes a bug where the go mod edit -go=version file edits
are never actually applied.

Change-Id: Id055b0fad3399a00e1245556eb39073f15be09d9
Reviewed-on: https://go-review.googlesource.com/c/tools/+/389216
Trust: Suzy Mueller <suzmue@golang.org>
Run-TryBot: Suzy Mueller <suzmue@golang.org>
gopls-CI: kokoro <noreply+kokoro@google.com>
Reviewed-by: Robert Findley <rfindley@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
(cherry picked from commit 4a5e7f0db6483413df162e738ff777a6568c1d55)
Reviewed-on: https://go-review.googlesource.com/c/tools/+/389494
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
diff --git a/internal/lsp/command.go b/internal/lsp/command.go
index e9d61d5..6f491f7 100644
--- a/internal/lsp/command.go
+++ b/internal/lsp/command.go
@@ -266,12 +266,18 @@
 		requireSave: true, // if go.mod isn't saved it could cause a problem
 		forURI:      args.URI,
 	}, func(ctx context.Context, deps commandDeps) error {
-		_, err := deps.snapshot.RunGoCommandDirect(ctx, source.Normal, &gocommand.Invocation{
-			Verb:       "mod",
-			Args:       []string{"edit", "-go", args.Version},
-			WorkingDir: filepath.Dir(args.URI.SpanURI().Filename()),
-		})
-		return err
+		snapshot, fh, ok, release, err := c.s.beginFileRequest(ctx, args.URI, source.UnknownKind)
+		defer release()
+		if !ok {
+			return err
+		}
+		if err := c.s.runGoModUpdateCommands(ctx, snapshot, fh.URI(), func(invoke func(...string) (*bytes.Buffer, error)) error {
+			_, err := invoke("mod", "edit", "-go", args.Version)
+			return err
+		}); err != nil {
+			return err
+		}
+		return nil
 	})
 }