diff --git a/gopls/internal/lsp/regtest/expectation.go b/gopls/internal/lsp/regtest/expectation.go index 8073561a37d..66a59ee1325 100644 --- a/gopls/internal/lsp/regtest/expectation.go +++ b/gopls/internal/lsp/regtest/expectation.go @@ -728,12 +728,10 @@ func Diagnostics(filters ...DiagnosticFilter) Expectation { } } -// NoMatchingDiagnostics asserts that there are no diagnostics matching the -// given filters. Notably, if no filters are supplied this assertion checks -// that there are no diagnostics at all, for any file. -// -// TODO(rfindley): replace NoDiagnostics with this, and rename. -func NoMatchingDiagnostics(filters ...DiagnosticFilter) Expectation { +// NoDiagnostics asserts that there are no diagnostics matching the given +// filters. Notably, if no filters are supplied this assertion checks that +// there are no diagnostics at all, for any file. +func NoDiagnostics(filters ...DiagnosticFilter) Expectation { check := func(s State) Verdict { diags := flattenDiagnostics(s) for _, filter := range filters { @@ -778,7 +776,7 @@ func flattenDiagnostics(state State) []flatDiagnostic { // -- Diagnostic filters -- // A DiagnosticFilter filters the set of diagnostics, for assertion with -// Diagnostics or NoMatchingDiagnostics. +// Diagnostics or NoDiagnostics. type DiagnosticFilter struct { desc string check func(name string, _ protocol.Diagnostic) bool @@ -832,21 +830,6 @@ func WithMessageContaining(substring string) DiagnosticFilter { // TODO(rfindley): eliminate all expectations below this point. -// NoDiagnostics asserts that either no diagnostics are sent for the -// workspace-relative path name, or empty diagnostics are sent. -func NoDiagnostics(name string) Expectation { - check := func(s State) Verdict { - if diags := s.diagnostics[name]; diags == nil || len(diags.Diagnostics) == 0 { - return Met - } - return Unmet - } - return SimpleExpectation{ - check: check, - description: fmt.Sprintf("empty or no diagnostics for %q", name), - } -} - // DiagnosticAtRegexp expects that there is a diagnostic entry at the start // position matching the regexp search string re in the buffer specified by // name. Note that this currently ignores the end position. diff --git a/gopls/internal/regtest/codelens/codelens_test.go b/gopls/internal/regtest/codelens/codelens_test.go index 56e6cca1623..09206509ae4 100644 --- a/gopls/internal/regtest/codelens/codelens_test.go +++ b/gopls/internal/regtest/codelens/codelens_test.go @@ -215,13 +215,13 @@ require golang.org/x/hello v1.2.3 // but there may be some subtlety in timing here, where this // should always succeed, but may not actually test the correct // behavior. - NoMatchingDiagnostics(env.AtRegexp("b/go.mod", `require`)), + NoDiagnostics(env.AtRegexp("b/go.mod", `require`)), ) // Check for upgrades in b/go.mod and then clear them. env.ExecuteCodeLensCommand("b/go.mod", command.CheckUpgrades, nil) env.Await(env.DiagnosticAtRegexpWithMessage("b/go.mod", `require`, "can be upgraded")) env.ExecuteCodeLensCommand("b/go.mod", command.ResetGoModDiagnostics, nil) - env.Await(NoDiagnostics("b/go.mod")) + env.Await(NoDiagnostics(ForFile("b/go.mod"))) // Apply the diagnostics to a/go.mod. env.ApplyQuickFixes("a/go.mod", d.Diagnostics) @@ -331,6 +331,6 @@ func Foo() { // Regenerate cgo, fixing the diagnostic. env.ExecuteCodeLensCommand("cgo.go", command.RegenerateCgo, nil) - env.Await(NoDiagnostics("cgo.go")) + env.Await(NoDiagnostics(ForFile("cgo.go"))) }) } diff --git a/gopls/internal/regtest/codelens/gcdetails_test.go b/gopls/internal/regtest/codelens/gcdetails_test.go index 1b2c3468bff..4b740223d52 100644 --- a/gopls/internal/regtest/codelens/gcdetails_test.go +++ b/gopls/internal/regtest/codelens/gcdetails_test.go @@ -66,7 +66,7 @@ func main() { // Editing a buffer should cause gc_details diagnostics to disappear, since // they only apply to saved buffers. env.EditBuffer("main.go", fake.NewEdit(0, 0, 0, 0, "\n\n")) - env.AfterChange(NoDiagnostics("main.go")) + env.AfterChange(NoDiagnostics(ForFile("main.go"))) // Saving a buffer should re-format back to the original state, and // re-enable the gc_details diagnostics. @@ -75,7 +75,7 @@ func main() { // Toggle the GC details code lens again so now it should be off. env.ExecuteCodeLensCommand("main.go", command.GCDetails, nil) - env.Await(NoDiagnostics("main.go")) + env.Await(NoDiagnostics(ForFile("main.go"))) }) } diff --git a/gopls/internal/regtest/diagnostics/analysis_test.go b/gopls/internal/regtest/diagnostics/analysis_test.go index bad4f655e11..a038d15aeea 100644 --- a/gopls/internal/regtest/diagnostics/analysis_test.go +++ b/gopls/internal/regtest/diagnostics/analysis_test.go @@ -44,6 +44,6 @@ func main() { ) env.ApplyQuickFixes("main.go", d.Diagnostics) - env.AfterChange(NoDiagnostics("main.go")) + env.AfterChange(NoDiagnostics(ForFile("main.go"))) }) } diff --git a/gopls/internal/regtest/diagnostics/builtin_test.go b/gopls/internal/regtest/diagnostics/builtin_test.go index 5baf1dcd0f2..193bbe0a9e3 100644 --- a/gopls/internal/regtest/diagnostics/builtin_test.go +++ b/gopls/internal/regtest/diagnostics/builtin_test.go @@ -30,6 +30,6 @@ const ( if !strings.HasSuffix(name, "builtin.go") { t.Fatalf("jumped to %q, want builtin.go", name) } - env.AfterChange(NoDiagnostics("builtin.go")) + env.AfterChange(NoDiagnostics(ForFile("builtin.go"))) }) } diff --git a/gopls/internal/regtest/diagnostics/diagnostics_test.go b/gopls/internal/regtest/diagnostics/diagnostics_test.go index df456e75839..a7b5bb0be42 100644 --- a/gopls/internal/regtest/diagnostics/diagnostics_test.go +++ b/gopls/internal/regtest/diagnostics/diagnostics_test.go @@ -77,7 +77,7 @@ func m() { env.DiagnosticAtRegexp("main.go", "log"), ) env.SaveBuffer("main.go") - env.AfterChange(NoDiagnostics("main.go")) + env.AfterChange(NoDiagnostics(ForFile("main.go"))) }) } @@ -119,8 +119,8 @@ func TestDiagnosticClearingOnEdit(t *testing.T) { // Fix the error by editing the const name in b.go to `b`. env.RegexpReplace("b.go", "(a) = 2", "b") env.AfterChange( - NoDiagnostics("a.go"), - NoDiagnostics("b.go"), + NoDiagnostics(ForFile("a.go")), + NoDiagnostics(ForFile("b.go")), ) }) } @@ -132,8 +132,8 @@ func TestDiagnosticClearingOnDelete_Issue37049(t *testing.T) { env.RemoveWorkspaceFile("b.go") env.Await( - NoDiagnostics("a.go"), - NoDiagnostics("b.go"), + NoDiagnostics(ForFile("a.go")), + NoDiagnostics(ForFile("b.go")), ) }) } @@ -152,7 +152,7 @@ const a = 3`) env.AfterChange( env.DiagnosticAtRegexp("a.go", "a = 1"), env.DiagnosticAtRegexp("b.go", "a = 2"), - NoDiagnostics("c.go"), + NoDiagnostics(ForFile("c.go")), ) }) } @@ -177,7 +177,7 @@ const a = http.MethodGet // Expect the diagnostics to clear. env.SaveBuffer("c/c.go") env.AfterChange( - NoDiagnostics("c/c.go"), + NoDiagnostics(ForFile("c/c.go")), ) }) } @@ -213,7 +213,7 @@ func TestDeleteTestVariant(t *testing.T) { Run(t, test38878, func(t *testing.T, env *Env) { env.Await(env.DiagnosticAtRegexp("a_test.go", `f\((3)\)`)) env.RemoveWorkspaceFile("a_test.go") - env.AfterChange(NoDiagnostics("a_test.go")) + env.AfterChange(NoDiagnostics(ForFile("a_test.go"))) // Make sure the test variant has been removed from the workspace by // triggering a metadata load. @@ -267,7 +267,7 @@ func Hello() { env.SaveBuffer("go.mod") var d protocol.PublishDiagnosticsParams env.AfterChange( - NoDiagnostics("main.go"), + NoDiagnostics(ForFile("main.go")), env.DiagnosticAtRegexp("bob/bob.go", "x"), ReadDiagnostics("bob/bob.go", &d), ) @@ -283,7 +283,7 @@ func Hello() { ) env.RunGoCommand("mod", "init", "mod.com") env.AfterChange( - NoDiagnostics("main.go"), + NoDiagnostics(ForFile("main.go")), env.DiagnosticAtRegexp("bob/bob.go", "x"), ) }) @@ -300,7 +300,7 @@ func Hello() { t.Fatal(err) } env.AfterChange( - NoDiagnostics("main.go"), + NoDiagnostics(ForFile("main.go")), env.DiagnosticAtRegexp("bob/bob.go", "x"), ) }) @@ -350,7 +350,7 @@ func TestHello(t *testing.T) { env.RegexpReplace("lib.go", "_ = x", "var y int") env.AfterChange( env.DiagnosticAtRegexp("lib.go", "y int"), - NoDiagnostics("lib_test.go"), + NoDiagnostics(ForFile("lib_test.go")), ) }) } @@ -370,7 +370,7 @@ func main() {} env.OpenFile("a.go") env.RegexpReplace("a.go", "foo", "foox") env.AfterChange( - NoDiagnostics("a.go"), + NoDiagnostics(ForFile("a.go")), ) }) } @@ -464,7 +464,7 @@ func _() { env.OpenFile("main.go") env.AfterChange(env.DiagnosticAtRegexp("main.go", "fmt")) env.SaveBuffer("main.go") - env.AfterChange(NoDiagnostics("main.go")) + env.AfterChange(NoDiagnostics(ForFile("main.go"))) }) } @@ -489,7 +489,7 @@ var X = 0 ).Run(t, files, func(t *testing.T, env *Env) { env.OpenFile("main.go") env.OrganizeImports("main.go") - env.AfterChange(NoDiagnostics("main.go")) + env.AfterChange(NoDiagnostics(ForFile("main.go"))) }) } @@ -650,7 +650,7 @@ func main() { env.ApplyQuickFixes("main.go", d.Diagnostics) env.SaveBuffer("go.mod") env.AfterChange( - NoDiagnostics("main.go"), + NoDiagnostics(ForFile("main.go")), ) // Comment out the line that depends on conf and expect a // diagnostic and a fix to remove the import. @@ -661,14 +661,14 @@ func main() { env.SaveBuffer("main.go") // Expect a diagnostic and fix to remove the dependency in the go.mod. env.AfterChange( - NoDiagnostics("main.go"), + NoDiagnostics(ForFile("main.go")), env.DiagnosticAtRegexpWithMessage("go.mod", "require github.com/ardanlabs/conf", "not used in this module"), ReadDiagnostics("go.mod", &d), ) env.ApplyQuickFixes("go.mod", d.Diagnostics) env.SaveBuffer("go.mod") env.AfterChange( - NoDiagnostics("go.mod"), + NoDiagnostics(ForFile("go.mod")), ) // Uncomment the lines and expect a new diagnostic for the import. env.RegexpReplace("main.go", "//_ = conf.ErrHelpWanted", "_ = conf.ErrHelpWanted") @@ -707,7 +707,7 @@ func main() { ) env.ApplyQuickFixes("main.go", d.Diagnostics) env.AfterChange( - NoDiagnostics("main.go"), + NoDiagnostics(ForFile("main.go")), ) }) } @@ -733,11 +733,11 @@ func _() { env.CreateBuffer("a/a2.go", ``) env.SaveBufferWithoutActions("a/a2.go") env.AfterChange( - NoDiagnostics("a/a1.go"), + NoDiagnostics(ForFile("a/a1.go")), ) env.EditBuffer("a/a2.go", fake.NewEdit(0, 0, 0, 0, `package a`)) env.AfterChange( - NoDiagnostics("a/a1.go"), + NoDiagnostics(ForFile("a/a1.go")), ) }) } @@ -805,7 +805,7 @@ func TestHello(t *testing.T) { ) env.SaveBuffer("hello/hello_x_test.go") env.AfterChange( - NoDiagnostics("hello/hello_x_test.go"), + NoDiagnostics(ForFile("hello/hello_x_test.go")), ) }) } @@ -854,8 +854,8 @@ package foo_ env.OpenFile("foo/bar_test.go") env.RegexpReplace("foo/bar_test.go", "package foo_", "package foo_test") env.AfterChange( - NoDiagnostics("foo/bar_test.go"), - NoDiagnostics("foo/foo.go"), + NoDiagnostics(ForFile("foo/bar_test.go")), + NoDiagnostics(ForFile("foo/foo.go")), ) }) } @@ -874,7 +874,7 @@ var _ = foo.Bar Run(t, ws, func(t *testing.T, env *Env) { env.OpenFile("_foo/x.go") env.AfterChange( - NoDiagnostics("_foo/x.go"), + NoDiagnostics(ForFile("_foo/x.go")), ) }) } @@ -997,9 +997,9 @@ func TestDoIt(t *testing.T) { ) env.RegexpReplace("p/p.go", "s string", "i int") env.AfterChange( - NoDiagnostics("main.go"), - NoDiagnostics("p/p_test.go"), - NoDiagnostics("p/x_test.go"), + NoDiagnostics(ForFile("main.go")), + NoDiagnostics(ForFile("p/p_test.go")), + NoDiagnostics(ForFile("p/x_test.go")), ) }) }) @@ -1054,7 +1054,7 @@ func main() { }`) env.OpenFile("foo/foo_test.go") env.RegexpReplace("foo/foo_test.go", `package main`, `package foo`) - env.AfterChange(NoDiagnostics("foo/foo.go")) + env.AfterChange(NoDiagnostics(ForFile("foo/foo.go"))) }) } @@ -1173,7 +1173,7 @@ func main() { ).Run(t, mod, func(t *testing.T, env *Env) { env.OpenFile("a/main.go") env.AfterChange( - NoDiagnostics("main.go"), + NoDiagnostics(ForFile("main.go")), ) }) } @@ -1212,7 +1212,7 @@ func main() { t.Errorf("wanted Unnecessary tag on diagnostic, got %v", tags) } env.ApplyQuickFixes("main.go", d.Diagnostics) - env.AfterChange(NoDiagnostics("main.go")) + env.AfterChange(NoDiagnostics(ForFile("main.go"))) }) } @@ -1369,7 +1369,7 @@ func main() { Run(t, mod, func(t *testing.T, env *Env) { env.OnceMet( InitialWorkspaceLoad, - NoMatchingDiagnostics(WithMessageContaining("illegal character U+0023 '#'")), + NoDiagnostics(WithMessageContaining("illegal character U+0023 '#'")), ) }) } @@ -1431,7 +1431,7 @@ package foo_ env.Await(env.DoneWithChange()) env.RegexpReplace("foo/foo_test.go", "_t", "_test") env.AfterChange( - NoDiagnostics("foo/foo_test.go"), + NoDiagnostics(ForFile("foo/foo_test.go")), NoOutstandingWork(), ) }) @@ -1498,7 +1498,7 @@ func main() { env.RemoveWorkspaceFile("bob") env.AfterChange( env.DiagnosticAtRegexp("cmd/main.go", `"mod.com/bob"`), - NoDiagnostics("bob/bob.go"), + NoDiagnostics(ForFile("bob/bob.go")), NoFileWatchMatching("bob"), ) }) @@ -1585,8 +1585,8 @@ const B = a.B env.RegexpReplace("b/b.go", `const B = a\.B`, "") env.SaveBuffer("b/b.go") env.Await( - NoDiagnostics("a/a.go"), - NoDiagnostics("b/b.go"), + NoDiagnostics(ForFile("a/a.go")), + NoDiagnostics(ForFile("b/b.go")), ) }) } @@ -1718,7 +1718,7 @@ var Bar = Foo env.OpenFile("foo.go") env.AfterChange(env.DiagnosticAtRegexp("bar.go", `Foo`)) env.RegexpReplace("foo.go", `\+build`, "") - env.AfterChange(NoDiagnostics("bar.go")) + env.AfterChange(NoDiagnostics(ForFile("bar.go"))) }) } @@ -1819,7 +1819,7 @@ const C = 0b10 ) env.WriteWorkspaceFile("go.mod", "module mod.com \n\ngo 1.13\n") env.AfterChange( - NoDiagnostics("main.go"), + NoDiagnostics(ForFile("main.go")), ) }) } @@ -1874,7 +1874,7 @@ func F[T any](_ T) { env.ApplyQuickFixes("main.go", d.Diagnostics) env.AfterChange( - NoDiagnostics("main.go"), + NoDiagnostics(ForFile("main.go")), ) }) } @@ -1912,7 +1912,7 @@ func F[T any](_ T) { // Once the edit is applied, the problematic diagnostics should be // resolved. env.AfterChange( - NoDiagnostics("main.go"), + NoDiagnostics(ForFile("main.go")), ) }) } diff --git a/gopls/internal/regtest/misc/configuration_test.go b/gopls/internal/regtest/misc/configuration_test.go index 4164d6c0e1f..6aea24a06d4 100644 --- a/gopls/internal/regtest/misc/configuration_test.go +++ b/gopls/internal/regtest/misc/configuration_test.go @@ -36,7 +36,7 @@ var FooErr = errors.New("foo") Run(t, files, func(t *testing.T, env *Env) { env.OpenFile("a/a.go") env.AfterChange( - NoDiagnostics("a/a.go"), + NoDiagnostics(ForFile("a/a.go")), ) cfg := env.Editor.Config() cfg.Settings = map[string]interface{}{ diff --git a/gopls/internal/regtest/misc/embed_test.go b/gopls/internal/regtest/misc/embed_test.go index 0d6d2ddd1d1..15943b8c05f 100644 --- a/gopls/internal/regtest/misc/embed_test.go +++ b/gopls/internal/regtest/misc/embed_test.go @@ -30,6 +30,6 @@ var foo string env.OpenFile("x.go") env.AfterChange(env.DiagnosticAtRegexpWithMessage("x.go", `NONEXISTENT`, "no matching files found")) env.RegexpReplace("x.go", `NONEXISTENT`, "x.go") - env.AfterChange(NoDiagnostics("x.go")) + env.AfterChange(NoDiagnostics(ForFile("x.go"))) }) } diff --git a/gopls/internal/regtest/misc/failures_test.go b/gopls/internal/regtest/misc/failures_test.go index b3ff37a2d67..f088a0e86bc 100644 --- a/gopls/internal/regtest/misc/failures_test.go +++ b/gopls/internal/regtest/misc/failures_test.go @@ -77,8 +77,8 @@ const a = 2 // Fix the error by editing the const name in b.go to `b`. env.RegexpReplace("b.go", "(a) = 2", "b") env.Await( - NoDiagnostics("a.go"), - NoDiagnostics("b.go"), + NoDiagnostics(ForFile("a.go")), + NoDiagnostics(ForFile("b.go")), ) }) } diff --git a/gopls/internal/regtest/misc/fix_test.go b/gopls/internal/regtest/misc/fix_test.go index 72c6231e9ed..f00a734a23f 100644 --- a/gopls/internal/regtest/misc/fix_test.go +++ b/gopls/internal/regtest/misc/fix_test.go @@ -102,6 +102,6 @@ func Foo() error { t.Fatalf("expected fixall code action, got none") } env.ApplyQuickFixes("main.go", d.Diagnostics) - env.AfterChange(NoDiagnostics("main.go")) + env.AfterChange(NoDiagnostics(ForFile("main.go"))) }) } diff --git a/gopls/internal/regtest/misc/generate_test.go b/gopls/internal/regtest/misc/generate_test.go index f6bbcd5afe4..9fd448cd849 100644 --- a/gopls/internal/regtest/misc/generate_test.go +++ b/gopls/internal/regtest/misc/generate_test.go @@ -65,7 +65,7 @@ func main() { env.RunGenerate("./lib1") env.RunGenerate("./lib2") env.AfterChange( - NoDiagnostics("main.go"), + NoDiagnostics(ForFile("main.go")), ) }) } diff --git a/gopls/internal/regtest/misc/imports_test.go b/gopls/internal/regtest/misc/imports_test.go index 6558491df13..b9804d0c436 100644 --- a/gopls/internal/regtest/misc/imports_test.go +++ b/gopls/internal/regtest/misc/imports_test.go @@ -158,7 +158,7 @@ var _, _ = x.X, y.Y env.OpenFile("main.go") env.AfterChange(env.DiagnosticAtRegexp("main.go", `y.Y`)) env.SaveBuffer("main.go") - env.AfterChange(NoDiagnostics("main.go")) + env.AfterChange(NoDiagnostics(ForFile("main.go"))) path, _ := env.GoToDefinition("main.go", env.RegexpSearch("main.go", `y.(Y)`)) if !strings.HasPrefix(path, filepath.ToSlash(modcache)) { t.Errorf("found module dependency outside of GOMODCACHE: got %v, wanted subdir of %v", path, filepath.ToSlash(modcache)) @@ -205,7 +205,7 @@ func TestA(t *testing.T) { ) env.ApplyQuickFixes("a/a.go", d.Diagnostics) env.AfterChange( - NoDiagnostics("a/a.go"), + NoDiagnostics(ForFile("a/a.go")), ) }) } @@ -252,6 +252,6 @@ func Test() { // Saving caller.go should trigger goimports, which should find a.Test in // the mod.com module, thanks to the go.work file. env.SaveBuffer("caller/caller.go") - env.AfterChange(NoDiagnostics("caller/caller.go")) + env.AfterChange(NoDiagnostics(ForFile("caller/caller.go"))) }) } diff --git a/gopls/internal/regtest/misc/rename_test.go b/gopls/internal/regtest/misc/rename_test.go index b6a385d36f5..81b3de8125a 100644 --- a/gopls/internal/regtest/misc/rename_test.go +++ b/gopls/internal/regtest/misc/rename_test.go @@ -412,7 +412,7 @@ package b // Moving x.go should make the diagnostic go away. env.RenameFile("a/x.go", "b/x.go") env.AfterChange( - NoDiagnostics("a/a.go"), // no more duplicate declarations + NoDiagnostics(ForFile("a/a.go")), // no more duplicate declarations env.DiagnosticAtRegexp("b/b.go", "package"), // as package names mismatch ) diff --git a/gopls/internal/regtest/misc/shared_test.go b/gopls/internal/regtest/misc/shared_test.go index 23f7a42872e..84eb99f73de 100644 --- a/gopls/internal/regtest/misc/shared_test.go +++ b/gopls/internal/regtest/misc/shared_test.go @@ -65,7 +65,7 @@ func main() { env1.RegexpReplace("main.go", "Printl", "Println") env1.AfterChange( - NoDiagnostics("main.go"), + NoDiagnostics(ForFile("main.go")), ) }) } diff --git a/gopls/internal/regtest/misc/vuln_test.go b/gopls/internal/regtest/misc/vuln_test.go index 5cf42521c8e..b34ddfc0a12 100644 --- a/gopls/internal/regtest/misc/vuln_test.go +++ b/gopls/internal/regtest/misc/vuln_test.go @@ -228,7 +228,7 @@ func main() { env.OnceMet( CompletedProgress(result.Token, nil), ShownMessage("Found GOSTDLIB"), - NoDiagnostics("go.mod"), + NoDiagnostics(ForFile("go.mod")), ) testFetchVulncheckResult(t, env, map[string]fetchVulncheckResult{ "go.mod": {IDs: []string{"GOSTDLIB"}, Mode: govulncheck.ModeGovulncheck}}) @@ -274,7 +274,7 @@ func main() { ).Run(t, files, func(t *testing.T, env *Env) { env.OpenFile("go.mod") env.AfterChange( - NoDiagnostics("go.mod"), + NoDiagnostics(ForFile("go.mod")), // we don't publish diagnostics for standard library vulnerability yet. ) testFetchVulncheckResult(t, env, map[string]fetchVulncheckResult{ @@ -854,7 +854,7 @@ func TestGovulncheckInfo(t *testing.T) { } env.ApplyCodeAction(reset) - env.Await(NoDiagnostics("go.mod")) + env.Await(NoDiagnostics(ForFile("go.mod"))) }) } diff --git a/gopls/internal/regtest/modfile/modfile_test.go b/gopls/internal/regtest/modfile/modfile_test.go index ab74595dc9d..c5aed8a6ef6 100644 --- a/gopls/internal/regtest/modfile/modfile_test.go +++ b/gopls/internal/regtest/modfile/modfile_test.go @@ -485,7 +485,7 @@ func main() { ) env.RunGoCommandInDir("a", "mod", "tidy") env.AfterChange( - NoDiagnostics("a/go.mod"), + NoDiagnostics(ForFile("a/go.mod")), ) }) } @@ -558,7 +558,7 @@ require ( ) ` env.SaveBuffer("a/go.mod") - env.AfterChange(NoDiagnostics("a/main.go")) + env.AfterChange(NoDiagnostics(ForFile("a/main.go"))) if got := env.BufferText("a/go.mod"); got != want { t.Fatalf("suggested fixes failed:\n%s", compare.Text(want, got)) } @@ -614,7 +614,7 @@ func main() { env.ApplyCodeAction(qfs[0]) // Arbitrarily pick a single fix to apply. Applying all of them seems to cause trouble in this particular test. env.SaveBuffer("a/go.mod") // Save to trigger diagnostics. env.AfterChange( - NoDiagnostics("a/go.mod"), + NoDiagnostics(ForFile("a/go.mod")), env.DiagnosticAtRegexp("a/main.go", "x = "), ) }) @@ -744,7 +744,7 @@ func main() { env.RunGoCommand("get", "example.com/blah@v1.2.3") env.RunGoCommand("mod", "tidy") env.AfterChange( - NoDiagnostics("main.go"), + NoDiagnostics(ForFile("main.go")), ) }) } @@ -882,7 +882,7 @@ func main() { env.ApplyQuickFixes("go.mod", d.Diagnostics) env.SaveBuffer("go.mod") // Save to trigger diagnostics. env.AfterChange( - NoDiagnostics("go.mod"), + NoDiagnostics(ForFile("go.mod")), ) }) } @@ -1149,8 +1149,8 @@ func main() { ) env.ApplyQuickFixes("main.go", d.Diagnostics) env.Await( - NoDiagnostics("main.go"), - NoDiagnostics("go.mod"), + NoDiagnostics(ForFile("main.go")), + NoDiagnostics(ForFile("go.mod")), ) }) } @@ -1170,7 +1170,7 @@ package main env.DiagnosticAtRegexpWithMessage("go.mod", `go foo`, "invalid go version"), ) env.WriteWorkspaceFile("go.mod", "module mod.com \n\ngo 1.12\n") - env.AfterChange(NoDiagnostics("go.mod")) + env.AfterChange(NoDiagnostics(ForFile("go.mod"))) }) } diff --git a/gopls/internal/regtest/template/template_test.go b/gopls/internal/regtest/template/template_test.go index 140ba3caf3b..f3453d72cf8 100644 --- a/gopls/internal/regtest/template/template_test.go +++ b/gopls/internal/regtest/template/template_test.go @@ -96,7 +96,7 @@ Hello {{}} <-- missing body } env.WriteWorkspaceFile("hello.tmpl", "{{range .Planets}}\nHello {{.}}\n{{end}}") - env.AfterChange(NoDiagnostics("hello.tmpl")) + env.AfterChange(NoDiagnostics(ForFile("hello.tmpl"))) }) } @@ -121,7 +121,7 @@ B {{}} <-- missing body env.OnceMet( InitialWorkspaceLoad, env.DiagnosticAtRegexp("a/a.tmpl", "()A"), - NoDiagnostics("b/b.tmpl"), + NoDiagnostics(ForFile("b/b.tmpl")), ) }) } @@ -137,12 +137,12 @@ go 1.12 Run(t, files, func(t *testing.T, env *Env) { env.CreateBuffer("hello.tmpl", "") env.AfterChange( - NoDiagnostics("hello.tmpl"), // Don't get spurious errors for empty templates. + NoDiagnostics(ForFile("hello.tmpl")), // Don't get spurious errors for empty templates. ) env.SetBufferContent("hello.tmpl", "{{range .Planets}}\nHello {{}}\n{{end}}") env.Await(env.DiagnosticAtRegexp("hello.tmpl", "()Hello {{}}")) env.RegexpReplace("hello.tmpl", "{{}}", "{{.}}") - env.Await(NoDiagnostics("hello.tmpl")) + env.Await(NoDiagnostics(ForFile("hello.tmpl"))) }) } @@ -167,7 +167,7 @@ Hello {{}} <-- missing body // should make its diagnostics disappear. env.CloseBuffer("hello.tmpl") env.AfterChange( - NoDiagnostics("hello.tmpl"), + NoDiagnostics(ForFile("hello.tmpl")), ) }) } diff --git a/gopls/internal/regtest/watch/watch_test.go b/gopls/internal/regtest/watch/watch_test.go index d2a203e8cfa..6a91a26213e 100644 --- a/gopls/internal/regtest/watch/watch_test.go +++ b/gopls/internal/regtest/watch/watch_test.go @@ -43,7 +43,7 @@ func _() { ) env.WriteWorkspaceFile("a/a.go", `package a; func _() {};`) env.AfterChange( - NoDiagnostics("a/a.go"), + NoDiagnostics(ForFile("a/a.go")), ) }) }) @@ -137,8 +137,8 @@ func _() { }`, }) env.AfterChange( - NoDiagnostics("a/a.go"), - NoDiagnostics("b/b.go"), + NoDiagnostics(ForFile("a/a.go")), + NoDiagnostics(ForFile("b/b.go")), ) }) } @@ -204,7 +204,7 @@ func _() { ) env.WriteWorkspaceFile("c/c.go", `package c; func C() {};`) env.AfterChange( - NoDiagnostics("a/a.go"), + NoDiagnostics(ForFile("a/a.go")), ) }) } @@ -226,7 +226,7 @@ func _() {} env.WriteWorkspaceFile("c/c.go", `package c; func C() {};`) env.WriteWorkspaceFile("a/a.go", `package a; import "mod.com/c"; func _() { c.C() }`) env.AfterChange( - NoDiagnostics("a/a.go"), + NoDiagnostics(ForFile("a/a.go")), ) }) } @@ -252,7 +252,7 @@ func _() { ) env.WriteWorkspaceFile("a/a2.go", `package a; func hello() {};`) env.AfterChange( - NoDiagnostics("a/a.go"), + NoDiagnostics(ForFile("a/a.go")), ) }) } @@ -328,7 +328,7 @@ func _() { ) env.WriteWorkspaceFile("a/a.go", implementation) env.AfterChange( - NoDiagnostics("a/a.go"), + NoDiagnostics(ForFile("a/a.go")), ) }) }) @@ -337,11 +337,11 @@ func _() { Run(t, pkg, func(t *testing.T, env *Env) { env.WriteWorkspaceFile("a/a.go", implementation) env.AfterChange( - NoDiagnostics("a/a.go"), + NoDiagnostics(ForFile("a/a.go")), ) env.WriteWorkspaceFile("b/b.go", newMethod) env.AfterChange( - NoDiagnostics("a/a.go"), + NoDiagnostics(ForFile("a/a.go")), ) }) }) @@ -353,8 +353,8 @@ func _() { "b/b.go": newMethod, }) env.AfterChange( - NoDiagnostics("a/a.go"), - NoDiagnostics("b/b.go"), + NoDiagnostics(ForFile("a/a.go")), + NoDiagnostics(ForFile("b/b.go")), ) }) }) @@ -400,7 +400,7 @@ package a // a_unneeded.go, from the initial workspace load, which we // check for earlier. If there are more, there's a bug. LogMatching(protocol.Info, "a_unneeded.go", 1, false), - NoDiagnostics("a/a.go"), + NoDiagnostics(ForFile("a/a.go")), ) }) }) @@ -428,7 +428,7 @@ package a // a_unneeded.go, from the initial workspace load, which we // check for earlier. If there are more, there's a bug. LogMatching(protocol.Info, "a_unneeded.go", 1, false), - NoDiagnostics("a/a.go"), + NoDiagnostics(ForFile("a/a.go")), ) }) }) @@ -470,7 +470,7 @@ func _() {} env.RemoveWorkspaceFile("a/a1.go") env.WriteWorkspaceFile("a/a2.go", "package a; func _() {};") env.AfterChange( - NoDiagnostics("main.go"), + NoDiagnostics(ForFile("main.go")), ) }) } @@ -547,7 +547,7 @@ func main() { }) env.AfterChange( env.DoneWithChangeWatchedFiles(), - NoDiagnostics("main.go"), + NoDiagnostics(ForFile("main.go")), ) }) } @@ -575,7 +575,7 @@ func main() { ).Run(t, files, func(t *testing.T, env *Env) { env.OpenFile("main.go") env.AfterChange( - NoDiagnostics("main.go"), + NoDiagnostics(ForFile("main.go")), ) if err := env.Sandbox.RunGoCommand(env.Ctx, "", "mod", []string{"init", "mod.com"}, true); err != nil { t.Fatal(err) @@ -589,7 +589,7 @@ func main() { env.RegexpReplace("main.go", `"foo/blah"`, `"mod.com/foo/blah"`) env.AfterChange( - NoDiagnostics("main.go"), + NoDiagnostics(ForFile("main.go")), ) }) } @@ -625,7 +625,7 @@ func main() { ) env.RegexpReplace("foo/main.go", `"mod.com/blah"`, `"foo/blah"`) env.AfterChange( - NoDiagnostics("foo/main.go"), + NoDiagnostics(ForFile("foo/main.go")), ) }) } @@ -669,8 +669,8 @@ func TestAll(t *testing.T) { `, }) env.AfterChange( - NoDiagnostics("a/a.go"), - NoDiagnostics("a/a_test.go"), + NoDiagnostics(ForFile("a/a.go")), + NoDiagnostics(ForFile("a/a_test.go")), ) // Now, add a new file to the test variant and use its symbol in the // original test file. Expect no diagnostics. @@ -695,8 +695,8 @@ func TestSomething(t *testing.T) {} `, }) env.AfterChange( - NoDiagnostics("a/a_test.go"), - NoDiagnostics("a/a2_test.go"), + NoDiagnostics(ForFile("a/a_test.go")), + NoDiagnostics(ForFile("a/a2_test.go")), ) }) } diff --git a/gopls/internal/regtest/workspace/broken_test.go b/gopls/internal/regtest/workspace/broken_test.go index 9a65030c715..0c718b339ea 100644 --- a/gopls/internal/regtest/workspace/broken_test.go +++ b/gopls/internal/regtest/workspace/broken_test.go @@ -166,7 +166,7 @@ const F = named.D - 3 env.OpenFile("go.mod") env.RegexpReplace("go.mod", "mod.testx", "mod.test") env.SaveBuffer("go.mod") // saving triggers a reload - env.AfterChange(NoMatchingDiagnostics()) + env.AfterChange(NoDiagnostics()) }) } @@ -219,8 +219,8 @@ package b // workspace folder, therefore we can't invoke AfterChange here. env.ChangeWorkspaceFolders("a", "b") env.Await( - NoDiagnostics("a/a.go"), - NoDiagnostics("b/go.mod"), + NoDiagnostics(ForFile("a/a.go")), + NoDiagnostics(ForFile("b/go.mod")), NoOutstandingWork(), ) @@ -256,7 +256,7 @@ package b ).Run(t, modules, func(t *testing.T, env *Env) { env.OpenFile("a/a.go") env.AfterChange( - NoDiagnostics("a/a.go"), + NoDiagnostics(ForFile("a/a.go")), NoOutstandingWork(), ) }) diff --git a/gopls/internal/regtest/workspace/directoryfilters_test.go b/gopls/internal/regtest/workspace/directoryfilters_test.go index bf22b8012bd..f7c7153ec0e 100644 --- a/gopls/internal/regtest/workspace/directoryfilters_test.go +++ b/gopls/internal/regtest/workspace/directoryfilters_test.go @@ -55,7 +55,7 @@ const _ = Nonexistant ).Run(t, files, func(t *testing.T, env *Env) { env.OnceMet( InitialWorkspaceLoad, - NoDiagnostics("exclude/x.go"), + NoDiagnostics(ForFile("exclude/x.go")), ) }) } @@ -85,8 +85,8 @@ const X = 1 ).Run(t, files, func(t *testing.T, env *Env) { env.OnceMet( InitialWorkspaceLoad, - NoDiagnostics("exclude/exclude.go"), // filtered out - NoDiagnostics("include/include.go"), // successfully builds + NoDiagnostics(ForFile("exclude/exclude.go")), // filtered out + NoDiagnostics(ForFile("include/include.go")), // successfully builds ) }) } diff --git a/gopls/internal/regtest/workspace/metadata_test.go b/gopls/internal/regtest/workspace/metadata_test.go index de7dec9f6f2..4990a6659aa 100644 --- a/gopls/internal/regtest/workspace/metadata_test.go +++ b/gopls/internal/regtest/workspace/metadata_test.go @@ -34,7 +34,7 @@ const C = 42 env.OpenFile("p.go") env.RegexpReplace("p.go", "\"fmt\"", "\"fmt\"\n)") env.AfterChange( - NoDiagnostics("p.go"), + NoDiagnostics(ForFile("p.go")), ) }) } @@ -88,8 +88,8 @@ func main() {} // information when fresh metadata arrives. // env.RegexpReplace("foo.go", "package main", "package main // test") env.AfterChange( - NoDiagnostics("foo.go"), - NoDiagnostics("bar.go"), + NoDiagnostics(ForFile("foo.go")), + NoDiagnostics(ForFile("bar.go")), ) // If instead of 'ignore' (which gopls treats as a standalone package) we diff --git a/gopls/internal/regtest/workspace/standalone_test.go b/gopls/internal/regtest/workspace/standalone_test.go index 53b269e59e3..7056f5464bb 100644 --- a/gopls/internal/regtest/workspace/standalone_test.go +++ b/gopls/internal/regtest/workspace/standalone_test.go @@ -74,14 +74,14 @@ func main() { } env.OpenFile("lib/lib.go") - env.AfterChange(NoMatchingDiagnostics()) + env.AfterChange(NoDiagnostics()) // Replacing C with D should not cause any workspace diagnostics, since we // haven't yet opened the standalone file. env.RegexpReplace("lib/lib.go", "C", "D") - env.AfterChange(NoMatchingDiagnostics()) + env.AfterChange(NoDiagnostics()) env.RegexpReplace("lib/lib.go", "D", "C") - env.AfterChange(NoMatchingDiagnostics()) + env.AfterChange(NoDiagnostics()) refs := env.References("lib/lib.go", env.RegexpSearch("lib/lib.go", "C")) checkLocations("References", refs, "lib/lib.go") @@ -91,7 +91,7 @@ func main() { // Opening the standalone file should not result in any diagnostics. env.OpenFile("lib/ignore.go") - env.AfterChange(NoMatchingDiagnostics()) + env.AfterChange(NoDiagnostics()) // Having opened the standalone file, we should find its symbols in the // workspace. @@ -135,7 +135,7 @@ func main() { // Undoing the replacement should fix diagnostics env.RegexpReplace("lib/lib.go", "D", "C") - env.AfterChange(NoMatchingDiagnostics()) + env.AfterChange(NoDiagnostics()) // Now that our workspace has no errors, we should be able to find // references and rename. @@ -187,7 +187,7 @@ func main() {} env.AfterChange( env.DiagnosticAtRegexp("ignore.go", "package (main)"), - NoDiagnostics("standalone.go"), + NoDiagnostics(ForFile("standalone.go")), ) cfg := env.Editor.Config() @@ -201,7 +201,7 @@ func main() {} env.RegexpReplace("ignore.go", "arbitrary", "meaningless") env.AfterChange( - NoDiagnostics("ignore.go"), + NoDiagnostics(ForFile("ignore.go")), env.DiagnosticAtRegexp("standalone.go", "package (main)"), ) }) diff --git a/gopls/internal/regtest/workspace/workspace_test.go b/gopls/internal/regtest/workspace/workspace_test.go index 720ec97ee0e..acdeef6b179 100644 --- a/gopls/internal/regtest/workspace/workspace_test.go +++ b/gopls/internal/regtest/workspace/workspace_test.go @@ -156,7 +156,7 @@ func TestClearAnalysisDiagnostics(t *testing.T) { ) env.CloseBuffer("pkg/main.go") env.AfterChange( - NoDiagnostics("pkg/main2.go"), + NoDiagnostics(ForFile("pkg/main2.go")), ) }) } @@ -269,7 +269,7 @@ func Hello() int { env.AfterChange( env.DiagnosticAtRegexp("moda/a/a.go", "x"), env.DiagnosticAtRegexp("modb/b/b.go", "x"), - NoMatchingDiagnostics(env.AtRegexp("moda/a/a.go", `"b.com/b"`)), + NoDiagnostics(env.AtRegexp("moda/a/a.go", `"b.com/b"`)), ) }) } @@ -643,7 +643,7 @@ use ( // This fails if guarded with a OnceMet(DoneWithSave(), ...), because it is // debounced (and therefore not synchronous with the change). - env.Await(NoDiagnostics("modb/go.mod")) + env.Await(NoDiagnostics(ForFile("modb/go.mod"))) // Test Formatting. env.SetBufferContent("go.work", `go 1.18 @@ -693,7 +693,7 @@ module example.com/bar // the diagnostic still shows up. env.SetBufferContent("go.work", "go 1.18 \n\n use ./bar\n") env.AfterChange( - NoMatchingDiagnostics(env.AtRegexp("go.work", "use")), + NoDiagnostics(env.AtRegexp("go.work", "use")), ) env.SetBufferContent("go.work", "go 1.18 \n\n use ./foo\n") env.AfterChange( @@ -978,7 +978,7 @@ func main() { env.ApplyQuickFixes("b/go.mod", []protocol.Diagnostic{d}) } env.AfterChange( - NoDiagnostics("b/go.mod"), + NoDiagnostics(ForFile("b/go.mod")), ) }) } @@ -1051,7 +1051,7 @@ func main() {} // Since b/main.go is not in the workspace, it should have a warning on its // package declaration. env.AfterChange( - NoDiagnostics("main.go"), + NoDiagnostics(ForFile("main.go")), DiagnosticAt("b/main.go", 0, 0), ) env.WriteWorkspaceFile("go.work", `go 1.16 @@ -1061,7 +1061,7 @@ use ( b ) `) - env.AfterChange(NoMatchingDiagnostics()) + env.AfterChange(NoDiagnostics()) // Removing the go.work file should put us back where we started. env.RemoveWorkspaceFile("go.work") @@ -1077,7 +1077,7 @@ use ( env.OpenFile("b/main.go") env.AfterChange( - NoDiagnostics("main.go"), + NoDiagnostics(ForFile("main.go")), DiagnosticAt("b/main.go", 0, 0), ) }) @@ -1119,8 +1119,8 @@ func (Server) Foo() {} ) env.RegexpReplace("other_test.go", "main", "main_test") env.AfterChange( - NoDiagnostics("other_test.go"), - NoDiagnostics("main_test.go"), + NoDiagnostics(ForFile("other_test.go")), + NoDiagnostics(ForFile("main_test.go")), ) // This will cause a test failure if other_test.go is not in any package. @@ -1163,7 +1163,7 @@ import ( Run(t, ws, func(t *testing.T, env *Env) { env.OpenFile("b/main.go") env.AfterChange( - NoDiagnostics("a/main.go"), + NoDiagnostics(ForFile("a/main.go")), ) env.OpenFile("a/main.go") env.AfterChange( @@ -1178,7 +1178,7 @@ import ( // Gopls should be smart enough to avoid diagnosing a. env.RegexpReplace("b/main.go", "package b", "package b // a package") env.AfterChange( - NoDiagnostics("a/main.go"), + NoDiagnostics(ForFile("a/main.go")), ) }) }