From 4a5e7f0db6483413df162e738ff777a6568c1d55 Mon Sep 17 00:00:00 2001 From: Suzy Mueller Date: Wed, 2 Mar 2022 11:22:35 -0700 Subject: [PATCH] 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 Run-TryBot: Suzy Mueller gopls-CI: kokoro Reviewed-by: Robert Findley TryBot-Result: Gopher Robot --- internal/lsp/command.go | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/internal/lsp/command.go b/internal/lsp/command.go index e9d61d5ce4..6f491f75b4 100644 --- a/internal/lsp/command.go +++ b/internal/lsp/command.go @@ -266,12 +266,18 @@ func (c *commandHandler) EditGoDirective(ctx context.Context, args command.EditG 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 }) }