[gopls-release-branch.0.9] internal/lsp/progress: actually close over
Context in WorkDoneWriter
In addition to the original commit description reproduced below, this CL
updates gopls/go.mod to include a replace directive for x/tools.
CL 409936 eliminated cases where we close over a Context during progress
reporting, except in one instance where it wasn't possible: the
WorkDoneWriter that must implement the io.Writer interface.
Unfortunately it contained a glaring bug that the ctx field was never
set, and the regression test for progress reporting during `go generate`
was disabled due to flakiness (golang/go#49901).
Incidentally, the fundamental problem that CL 409936 addressed may also
fix the flakiness of TestGenerateProgress.
Fix the bug, and re-enable the test.
For golang/go#53781
For golang/go#53823
Change-Id: Ideb99a5525667e45d2e41fcc5078699ba1e0f1a3
Reviewed-on: https://go-review.googlesource.com/c/tools/+/417115
gopls-CI: kokoro <noreply+kokoro@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Robert Findley <rfindley@google.com>
Auto-Submit: Robert Findley <rfindley@google.com>
Reviewed-by: Alan Donovan <adonovan@google.com>
(cherry picked from commit 459e2b88fc869374454543f70b377f13599756f7)
Reviewed-on: https://go-review.googlesource.com/c/tools/+/417118
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
diff --git a/gopls/go.mod b/gopls/go.mod
index 9815a80..6129e61 100644
--- a/gopls/go.mod
+++ b/gopls/go.mod
@@ -24,3 +24,5 @@
golang.org/x/text v0.3.7 // indirect
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
)
+
+replace golang.org/x/tools => ../
diff --git a/gopls/internal/regtest/misc/generate_test.go b/gopls/internal/regtest/misc/generate_test.go
index 1dc22d7..4478951 100644
--- a/gopls/internal/regtest/misc/generate_test.go
+++ b/gopls/internal/regtest/misc/generate_test.go
@@ -16,8 +16,6 @@
)
func TestGenerateProgress(t *testing.T) {
- t.Skipf("skipping flaky test: https://golang.org/issue/49901")
-
const generatedWorkspace = `
-- go.mod --
module fake.test
diff --git a/internal/lsp/command.go b/internal/lsp/command.go
index 862af60..7afafc9 100644
--- a/internal/lsp/command.go
+++ b/internal/lsp/command.go
@@ -404,7 +404,7 @@
// create output
buf := &bytes.Buffer{}
ew := progress.NewEventWriter(ctx, "test")
- out := io.MultiWriter(ew, progress.NewWorkDoneWriter(work), buf)
+ out := io.MultiWriter(ew, progress.NewWorkDoneWriter(ctx, work), buf)
// Run `go test -run Func` on each test.
var failedTests int
@@ -487,7 +487,7 @@
Args: []string{"-x", pattern},
WorkingDir: args.Dir.SpanURI().Filename(),
}
- stderr := io.MultiWriter(er, progress.NewWorkDoneWriter(deps.work))
+ stderr := io.MultiWriter(er, progress.NewWorkDoneWriter(ctx, deps.work))
if err := deps.snapshot.RunGoCommandPiped(ctx, source.Normal, inv, er, stderr); err != nil {
return err
}
diff --git a/internal/lsp/progress/progress.go b/internal/lsp/progress/progress.go
index d6794cf..8b0d1c6 100644
--- a/internal/lsp/progress/progress.go
+++ b/internal/lsp/progress/progress.go
@@ -260,8 +260,8 @@
wd *WorkDone
}
-func NewWorkDoneWriter(wd *WorkDone) *WorkDoneWriter {
- return &WorkDoneWriter{wd: wd}
+func NewWorkDoneWriter(ctx context.Context, wd *WorkDone) *WorkDoneWriter {
+ return &WorkDoneWriter{ctx: ctx, wd: wd}
}
func (wdw *WorkDoneWriter) Write(p []byte) (n int, err error) {