From bd48b9a5d7872f3d6b457d49038c4657c7443740 Mon Sep 17 00:00:00 2001 From: Robert Findley Date: Thu, 12 Jan 2023 22:21:43 -0500 Subject: [PATCH] gopls/internal/regtest: eliminate DiagnosticsAtRegexpWithMessage Replace with assertions on filtered diagnostics. Updates golang/go#39384 Change-Id: If88e29a8241008dd778fbfabe37d840b48f17691 Reviewed-on: https://go-review.googlesource.com/c/tools/+/461938 gopls-CI: kokoro Reviewed-by: Alan Donovan TryBot-Result: Gopher Robot Run-TryBot: Robert Findley --- gopls/internal/lsp/regtest/expectation.go | 14 ++---- .../regtest/codelens/codelens_test.go | 8 ++-- .../regtest/diagnostics/diagnostics_test.go | 47 ++++++++++--------- gopls/internal/regtest/misc/embed_test.go | 7 ++- gopls/internal/regtest/misc/failures_test.go | 4 +- gopls/internal/regtest/misc/fix_test.go | 2 +- gopls/internal/regtest/misc/vendor_test.go | 4 +- .../internal/regtest/modfile/modfile_test.go | 19 ++++---- .../regtest/workspace/fromenv_test.go | 2 +- .../regtest/workspace/metadata_test.go | 2 +- .../regtest/workspace/workspace_test.go | 12 ++--- 11 files changed, 62 insertions(+), 59 deletions(-) diff --git a/gopls/internal/lsp/regtest/expectation.go b/gopls/internal/lsp/regtest/expectation.go index cd4ac61ce64..1c359252f0e 100644 --- a/gopls/internal/lsp/regtest/expectation.go +++ b/gopls/internal/lsp/regtest/expectation.go @@ -829,9 +829,9 @@ func AtPosition(name string, line, character uint32) DiagnosticFilter { } } -// WithMessageContaining filters to diagnostics whose message contains the -// given substring. -func WithMessageContaining(substring string) DiagnosticFilter { +// WithMessage filters to diagnostics whose message contains the given +// substring. +func WithMessage(substring string) DiagnosticFilter { return DiagnosticFilter{ desc: fmt.Sprintf("with message containing %q", substring), check: func(_ string, d protocol.Diagnostic) bool { @@ -850,11 +850,3 @@ func (e *Env) DiagnosticAtRegexp(name, re string) DiagnosticExpectation { pos := e.RegexpSearch(name, re) return DiagnosticExpectation{path: name, pos: &pos, re: re, present: true} } - -// DiagnosticAtRegexpWithMessage is like DiagnosticAtRegexp, but it also -// checks for the content of the diagnostic message, -func (e *Env) DiagnosticAtRegexpWithMessage(name, re, msg string) DiagnosticExpectation { - e.T.Helper() - pos := e.RegexpSearch(name, re) - return DiagnosticExpectation{path: name, pos: &pos, re: re, present: true, message: msg} -} diff --git a/gopls/internal/regtest/codelens/codelens_test.go b/gopls/internal/regtest/codelens/codelens_test.go index 09206509ae4..acd5652811e 100644 --- a/gopls/internal/regtest/codelens/codelens_test.go +++ b/gopls/internal/regtest/codelens/codelens_test.go @@ -209,7 +209,7 @@ require golang.org/x/hello v1.2.3 env.ExecuteCodeLensCommand("a/go.mod", command.CheckUpgrades, nil) d := &protocol.PublishDiagnosticsParams{} env.OnceMet( - env.DiagnosticAtRegexpWithMessage("a/go.mod", `require`, "can be upgraded"), + Diagnostics(env.AtRegexp("a/go.mod", `require`), WithMessage("can be upgraded")), ReadDiagnostics("a/go.mod", d), // We do not want there to be a diagnostic for b/go.mod, // but there may be some subtlety in timing here, where this @@ -219,7 +219,7 @@ require golang.org/x/hello v1.2.3 ) // 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.Await(Diagnostics(env.AtRegexp("b/go.mod", `require`), WithMessage("can be upgraded"))) env.ExecuteCodeLensCommand("b/go.mod", command.ResetGoModDiagnostics, nil) env.Await(NoDiagnostics(ForFile("b/go.mod"))) @@ -319,14 +319,14 @@ func Foo() { // Open the file. We have a nonexistant symbol that will break cgo processing. env.OpenFile("cgo.go") env.AfterChange( - env.DiagnosticAtRegexpWithMessage("cgo.go", ``, "go list failed to return CompiledGoFiles"), + Diagnostics(env.AtRegexp("cgo.go", ``), WithMessage("go list failed to return CompiledGoFiles")), ) // Fix the C function name. We haven't regenerated cgo, so nothing should be fixed. env.RegexpReplace("cgo.go", `int fortythree`, "int fortytwo") env.SaveBuffer("cgo.go") env.AfterChange( - env.DiagnosticAtRegexpWithMessage("cgo.go", ``, "go list failed to return CompiledGoFiles"), + Diagnostics(env.AtRegexp("cgo.go", ``), WithMessage("go list failed to return CompiledGoFiles")), ) // Regenerate cgo, fixing the diagnostic. diff --git a/gopls/internal/regtest/diagnostics/diagnostics_test.go b/gopls/internal/regtest/diagnostics/diagnostics_test.go index 6608d24be03..1c1168199c7 100644 --- a/gopls/internal/regtest/diagnostics/diagnostics_test.go +++ b/gopls/internal/regtest/diagnostics/diagnostics_test.go @@ -594,8 +594,8 @@ func main() { ).Run(t, collision, func(t *testing.T, env *Env) { env.OpenFile("x/x.go") env.AfterChange( - env.DiagnosticAtRegexpWithMessage("x/x.go", `^`, "found packages main (main.go) and x (x.go)"), - env.DiagnosticAtRegexpWithMessage("x/main.go", `^`, "found packages main (main.go) and x (x.go)"), + Diagnostics(env.AtRegexp("x/x.go", `^`), WithMessage("found packages main (main.go) and x (x.go)")), + Diagnostics(env.AtRegexp("x/main.go", `^`), WithMessage("found packages main (main.go) and x (x.go)")), ) // We don't recover cleanly from the errors without good overlay support. @@ -662,7 +662,7 @@ func main() { // Expect a diagnostic and fix to remove the dependency in the go.mod. env.AfterChange( NoDiagnostics(ForFile("main.go")), - env.DiagnosticAtRegexpWithMessage("go.mod", "require github.com/ardanlabs/conf", "not used in this module"), + Diagnostics(env.AtRegexp("go.mod", "require github.com/ardanlabs/conf"), WithMessage("not used in this module")), ReadDiagnostics("go.mod", &d), ) env.ApplyQuickFixes("go.mod", d.Diagnostics) @@ -702,7 +702,7 @@ func main() { env.SaveBuffer("main.go") var d protocol.PublishDiagnosticsParams env.AfterChange( - env.DiagnosticAtRegexpWithMessage("main.go", `"github.com/ardanlabs/conf"`, "no required module"), + Diagnostics(env.AtRegexp("main.go", `"github.com/ardanlabs/conf"`), WithMessage("no required module")), ReadDiagnostics("main.go", &d), ) env.ApplyQuickFixes("main.go", d.Diagnostics) @@ -1136,7 +1136,7 @@ func main() {} Run(t, pkgDefault, func(t *testing.T, env *Env) { env.OpenFile("main.go") env.Await( - env.DiagnosticAtRegexpWithMessage("main.go", "default", "expected 'IDENT'"), + Diagnostics(env.AtRegexp("main.go", "default"), WithMessage("expected 'IDENT'")), ) }) } @@ -1205,7 +1205,7 @@ func main() { env.OpenFile("main.go") var d protocol.PublishDiagnosticsParams env.AfterChange( - env.DiagnosticAtRegexpWithMessage("main.go", `t{"msg"}`, "redundant type"), + Diagnostics(env.AtRegexp("main.go", `t{"msg"}`), WithMessage("redundant type")), ReadDiagnostics("main.go", &d), ) if tags := d.Diagnostics[0].Tags; len(tags) == 0 || tags[0] != protocol.Unnecessary { @@ -1369,7 +1369,7 @@ func main() { Run(t, mod, func(t *testing.T, env *Env) { env.OnceMet( InitialWorkspaceLoad, - NoDiagnostics(WithMessageContaining("illegal character U+0023 '#'")), + NoDiagnostics(WithMessage("illegal character U+0023 '#'")), ) }) } @@ -1539,9 +1539,9 @@ import _ "mod.com/triple/a" ` Run(t, mod, func(t *testing.T, env *Env) { env.Await( - env.DiagnosticAtRegexpWithMessage("self/self.go", `_ "mod.com/self"`, "import cycle not allowed"), - env.DiagnosticAtRegexpWithMessage("double/a/a.go", `_ "mod.com/double/b"`, "import cycle not allowed"), - env.DiagnosticAtRegexpWithMessage("triple/a/a.go", `_ "mod.com/triple/b"`, "import cycle not allowed"), + Diagnostics(env.AtRegexp("self/self.go", `_ "mod.com/self"`), WithMessage("import cycle not allowed")), + Diagnostics(env.AtRegexp("double/a/a.go", `_ "mod.com/double/b"`), WithMessage("import cycle not allowed")), + Diagnostics(env.AtRegexp("triple/a/a.go", `_ "mod.com/triple/b"`), WithMessage("import cycle not allowed")), ) }) } @@ -1578,8 +1578,8 @@ const B = a.B // // TODO(golang/go#52904): we should get *both* of these errors. AnyOf( - env.DiagnosticAtRegexpWithMessage("a/a.go", `"mod.test/b"`, "import cycle"), - env.DiagnosticAtRegexpWithMessage("b/b.go", `"mod.test/a"`, "import cycle"), + Diagnostics(env.AtRegexp("a/a.go", `"mod.test/b"`), WithMessage("import cycle")), + Diagnostics(env.AtRegexp("b/b.go", `"mod.test/a"`), WithMessage("import cycle")), ), ) env.RegexpReplace("b/b.go", `const B = a\.B`, "") @@ -1607,7 +1607,7 @@ import ( t.Run("module", func(t *testing.T) { Run(t, mod, func(t *testing.T, env *Env) { env.Await( - env.DiagnosticAtRegexpWithMessage("main.go", `"nosuchpkg"`, `could not import nosuchpkg (no required module provides package "nosuchpkg"`), + Diagnostics(env.AtRegexp("main.go", `"nosuchpkg"`), WithMessage(`could not import nosuchpkg (no required module provides package "nosuchpkg"`)), ) }) }) @@ -1618,7 +1618,7 @@ import ( Modes(Default), ).Run(t, mod, func(t *testing.T, env *Env) { env.Await( - env.DiagnosticAtRegexpWithMessage("main.go", `"nosuchpkg"`, `cannot find package "nosuchpkg" in any of`), + Diagnostics(env.AtRegexp("main.go", `"nosuchpkg"`), WithMessage(`cannot find package "nosuchpkg" in any of`)), ) }) }) @@ -1676,7 +1676,7 @@ func helloHelper() {} env.OpenFile("nested/hello/hello.go") env.AfterChange( env.DiagnosticAtRegexp("nested/hello/hello.go", "helloHelper"), - env.DiagnosticAtRegexpWithMessage("nested/hello/hello.go", "package hello", "nested module"), + Diagnostics(env.AtRegexp("nested/hello/hello.go", "package hello"), WithMessage("nested module")), OutstandingWork(lsp.WorkspaceLoadFailure, "nested module"), ) }) @@ -1753,7 +1753,7 @@ package main env.SetBufferContent("other.go", "package main\n\nasdf") // The new diagnostic in other.go should not suppress diagnostics in main.go. env.AfterChange( - env.DiagnosticAtRegexpWithMessage("other.go", "asdf", "expected declaration"), + Diagnostics(env.AtRegexp("other.go", "asdf"), WithMessage("expected declaration")), env.DiagnosticAtRegexp("main.go", "asdf"), ) }) @@ -1815,7 +1815,7 @@ const C = 0b10 Run(t, files, func(t *testing.T, env *Env) { env.OnceMet( InitialWorkspaceLoad, - env.DiagnosticAtRegexpWithMessage("main.go", `0b10`, "go1.13 or later"), + Diagnostics(env.AtRegexp("main.go", `0b10`), WithMessage("go1.13 or later")), ) env.WriteWorkspaceFile("go.mod", "module mod.com \n\ngo 1.13\n") env.AfterChange( @@ -1868,7 +1868,7 @@ func F[T any](_ T) { var d protocol.PublishDiagnosticsParams env.OnceMet( InitialWorkspaceLoad, - env.DiagnosticAtRegexpWithMessage("main.go", `T any`, "type parameter"), + Diagnostics(env.AtRegexp("main.go", `T any`), WithMessage("type parameter")), ReadDiagnostics("main.go", &d), ) @@ -1902,7 +1902,7 @@ func F[T any](_ T) { // We should have a diagnostic because generics are not supported at 1.16. env.OnceMet( InitialWorkspaceLoad, - env.DiagnosticAtRegexpWithMessage("main.go", `T any`, "type parameter"), + Diagnostics(env.AtRegexp("main.go", `T any`), WithMessage("type parameter")), ReadDiagnostics("main.go", &d), ) @@ -1955,8 +1955,11 @@ func MyPrintf(format string, args ...interface{}) { Run(t, src, func(t *testing.T, env *Env) { env.OpenFile("a/a.go") env.AfterChange( - env.DiagnosticAtRegexpWithMessage("a/a.go", "new.*Printf", - "format %d has arg \"s\" of wrong type string")) + Diagnostics( + env.AtRegexp("a/a.go", "new.*Printf"), + WithMessage("format %d has arg \"s\" of wrong type string"), + ), + ) }) } @@ -2005,7 +2008,7 @@ var _ = 1 / "" // type error var diags protocol.PublishDiagnosticsParams env.OpenFile("a/a.go") env.AfterChange( - env.DiagnosticAtRegexpWithMessage("a/a.go", "mu2 := (mu)", "assignment copies lock value"), + Diagnostics(env.AtRegexp("a/a.go", "mu2 := (mu)"), WithMessage("assignment copies lock value")), ReadDiagnostics("a/a.go", &diags)) // Assert that there were no other diagnostics. diff --git a/gopls/internal/regtest/misc/embed_test.go b/gopls/internal/regtest/misc/embed_test.go index 15943b8c05f..021fbfcc06d 100644 --- a/gopls/internal/regtest/misc/embed_test.go +++ b/gopls/internal/regtest/misc/embed_test.go @@ -28,7 +28,12 @@ var foo string ` Run(t, files, func(t *testing.T, env *Env) { env.OpenFile("x.go") - env.AfterChange(env.DiagnosticAtRegexpWithMessage("x.go", `NONEXISTENT`, "no matching files found")) + env.AfterChange( + Diagnostics( + env.AtRegexp("x.go", `NONEXISTENT`), + WithMessage("no matching files found"), + ), + ) env.RegexpReplace("x.go", `NONEXISTENT`, "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 f088a0e86bc..aad8360b931 100644 --- a/gopls/internal/regtest/misc/failures_test.go +++ b/gopls/internal/regtest/misc/failures_test.go @@ -70,8 +70,8 @@ const a = 2 Run(t, badPackageDup, func(t *testing.T, env *Env) { env.OpenFile("b.go") env.Await( - env.DiagnosticAtRegexpWithMessage("b.go", `a = 2`, "a redeclared"), - env.DiagnosticAtRegexpWithMessage("a.go", `a = 1`, "other declaration"), + Diagnostics(env.AtRegexp("b.go", `a = 2`), WithMessage("a redeclared")), + Diagnostics(env.AtRegexp("a.go", `a = 1`), WithMessage("other declaration")), ) // Fix the error by editing the const name in b.go to `b`. diff --git a/gopls/internal/regtest/misc/fix_test.go b/gopls/internal/regtest/misc/fix_test.go index f00a734a23f..42096a8b360 100644 --- a/gopls/internal/regtest/misc/fix_test.go +++ b/gopls/internal/regtest/misc/fix_test.go @@ -79,7 +79,7 @@ func Foo() error { var d protocol.PublishDiagnosticsParams env.AfterChange( // The error message here changed in 1.18; "return values" covers both forms. - env.DiagnosticAtRegexpWithMessage("main.go", `return`, "return values"), + Diagnostics(env.AtRegexp("main.go", `return`), WithMessage("return values")), ReadDiagnostics("main.go", &d), ) codeActions := env.CodeAction("main.go", d.Diagnostics) diff --git a/gopls/internal/regtest/misc/vendor_test.go b/gopls/internal/regtest/misc/vendor_test.go index 06e34b55f5f..4fcf1067a1e 100644 --- a/gopls/internal/regtest/misc/vendor_test.go +++ b/gopls/internal/regtest/misc/vendor_test.go @@ -53,13 +53,13 @@ func _() { d := &protocol.PublishDiagnosticsParams{} env.OnceMet( InitialWorkspaceLoad, - env.DiagnosticAtRegexpWithMessage("go.mod", "module mod.com", "Inconsistent vendoring"), + Diagnostics(env.AtRegexp("go.mod", "module mod.com"), WithMessage("Inconsistent vendoring")), ReadDiagnostics("go.mod", d), ) env.ApplyQuickFixes("go.mod", d.Diagnostics) env.AfterChange( - env.DiagnosticAtRegexpWithMessage("a/a1.go", `q int`, "not used"), + Diagnostics(env.AtRegexp("a/a1.go", `q int`), WithMessage("not used")), ) }) } diff --git a/gopls/internal/regtest/modfile/modfile_test.go b/gopls/internal/regtest/modfile/modfile_test.go index b94894c79bf..e88368a3b14 100644 --- a/gopls/internal/regtest/modfile/modfile_test.go +++ b/gopls/internal/regtest/modfile/modfile_test.go @@ -543,8 +543,8 @@ var _ = blah.Name env.AfterChange( // We would like for the error to appear in the v2 module, but // as of writing non-workspace packages are not diagnosed. - env.DiagnosticAtRegexpWithMessage("a/main.go", `"example.com/blah/v2"`, "cannot find module providing"), - env.DiagnosticAtRegexpWithMessage("a/go.mod", `require example.com/blah/v2`, "cannot find module providing"), + Diagnostics(env.AtRegexp("a/main.go", `"example.com/blah/v2"`), WithMessage("cannot find module providing")), + Diagnostics(env.AtRegexp("a/go.mod", `require example.com/blah/v2`), WithMessage("cannot find module providing")), ReadDiagnostics("a/go.mod", &modDiags), ) env.ApplyQuickFixes("a/go.mod", modDiags.Diagnostics) @@ -604,7 +604,7 @@ func main() { d := protocol.PublishDiagnosticsParams{} env.AfterChange( // Make sure the diagnostic mentions the new version -- the old diagnostic is in the same place. - env.DiagnosticAtRegexpWithMessage("a/go.mod", "example.com v1.2.3", "example.com@v1.2.3"), + Diagnostics(env.AtRegexp("a/go.mod", "example.com v1.2.3"), WithMessage("example.com@v1.2.3")), ReadDiagnostics("a/go.mod", &d), ) qfs := env.GetQuickFixes("a/go.mod", d.Diagnostics) @@ -793,7 +793,7 @@ func main() { ProxyFiles(workspaceProxy), ).Run(t, mod, func(t *testing.T, env *Env) { env.Await( - env.DiagnosticAtRegexpWithMessage("a/go.mod", "example.com v1.2.3", "is not used"), + Diagnostics(env.AtRegexp("a/go.mod", "example.com v1.2.3"), WithMessage("is not used")), ) }) } @@ -875,7 +875,7 @@ func main() { env.AfterChange( Diagnostics( env.AtRegexp("go.mod", `example.com v1.2.3`), - WithMessageContaining("go.sum is out of sync"), + WithMessage("go.sum is out of sync"), ), ReadDiagnostics("go.mod", d), ) @@ -1078,7 +1078,7 @@ func main() { env.AfterChange( Diagnostics( env.AtRegexp("go.mod", `example.com`), - WithMessageContaining("go.sum is out of sync"), + WithMessage("go.sum is out of sync"), ), ReadDiagnostics("go.mod", params), ) @@ -1144,7 +1144,10 @@ func main() { env.OpenFile("main.go") d := &protocol.PublishDiagnosticsParams{} env.Await( - env.DiagnosticAtRegexpWithMessage("main.go", `"example.com/blah"`, `could not import example.com/blah (no required module provides package "example.com/blah")`), + Diagnostics( + env.AtRegexp("main.go", `"example.com/blah"`), + WithMessage(`could not import example.com/blah (no required module provides package "example.com/blah")`), + ), ReadDiagnostics("main.go", d), ) env.ApplyQuickFixes("main.go", d.Diagnostics) @@ -1167,7 +1170,7 @@ package main Run(t, files, func(t *testing.T, env *Env) { env.OnceMet( InitialWorkspaceLoad, - env.DiagnosticAtRegexpWithMessage("go.mod", `go foo`, "invalid go version"), + Diagnostics(env.AtRegexp("go.mod", `go foo`), WithMessage("invalid go version")), ) env.WriteWorkspaceFile("go.mod", "module mod.com \n\ngo 1.12\n") env.AfterChange(NoDiagnostics(ForFile("go.mod"))) diff --git a/gopls/internal/regtest/workspace/fromenv_test.go b/gopls/internal/regtest/workspace/fromenv_test.go index 831fa771a46..c05012d74c7 100644 --- a/gopls/internal/regtest/workspace/fromenv_test.go +++ b/gopls/internal/regtest/workspace/fromenv_test.go @@ -62,7 +62,7 @@ use ( // included in the workspace. env.OpenFile("work/a/a.go") env.AfterChange( - env.DiagnosticAtRegexpWithMessage("work/b/b.go", "x := 1", "not used"), + Diagnostics(env.AtRegexp("work/b/b.go", "x := 1"), WithMessage("not used")), ) }) } diff --git a/gopls/internal/regtest/workspace/metadata_test.go b/gopls/internal/regtest/workspace/metadata_test.go index 4990a6659aa..31663fbeb07 100644 --- a/gopls/internal/regtest/workspace/metadata_test.go +++ b/gopls/internal/regtest/workspace/metadata_test.go @@ -97,7 +97,7 @@ func main() {} // packages for bar.go env.RegexpReplace("bar.go", "ignore", "excluded") env.AfterChange( - env.DiagnosticAtRegexpWithMessage("bar.go", "package (main)", "No packages"), + Diagnostics(env.AtRegexp("bar.go", "package (main)"), WithMessage("No packages")), ) }) } diff --git a/gopls/internal/regtest/workspace/workspace_test.go b/gopls/internal/regtest/workspace/workspace_test.go index 0d000b877fd..3932648bdc1 100644 --- a/gopls/internal/regtest/workspace/workspace_test.go +++ b/gopls/internal/regtest/workspace/workspace_test.go @@ -683,7 +683,7 @@ module example.com/bar Run(t, files, func(t *testing.T, env *Env) { env.OpenFile("go.work") env.AfterChange( - env.DiagnosticAtRegexpWithMessage("go.work", "use", "directory ./foo does not contain a module"), + Diagnostics(env.AtRegexp("go.work", "use"), WithMessage("directory ./foo does not contain a module")), ) // The following tests is a regression test against an issue where we weren't // copying the workFile struct field on workspace when a new one was created in @@ -697,7 +697,7 @@ module example.com/bar ) env.SetBufferContent("go.work", "go 1.18 \n\n use ./foo\n") env.AfterChange( - env.DiagnosticAtRegexpWithMessage("go.work", "use", "directory ./foo does not contain a module"), + Diagnostics(env.AtRegexp("go.work", "use"), WithMessage("directory ./foo does not contain a module")), ) }) } @@ -714,8 +714,8 @@ replace Run(t, files, func(t *testing.T, env *Env) { env.OpenFile("go.work") env.AfterChange( - env.DiagnosticAtRegexpWithMessage("go.work", "usa", "unknown directive: usa"), - env.DiagnosticAtRegexpWithMessage("go.work", "replace", "usage: replace"), + Diagnostics(env.AtRegexp("go.work", "usa"), WithMessage("unknown directive: usa")), + Diagnostics(env.AtRegexp("go.work", "replace"), WithMessage("usage: replace")), ) }) } @@ -963,7 +963,7 @@ func main() { env.AfterChange( Diagnostics( env.AtRegexp("go.mod", `example.com v1.2.3`), - WithMessageContaining("go.sum is out of sync"), + WithMessage("go.sum is out of sync"), ), ReadDiagnostics("b/go.mod", params), ) @@ -1167,7 +1167,7 @@ import ( ) env.OpenFile("a/main.go") env.AfterChange( - env.DiagnosticAtRegexpWithMessage("a/main.go", "V", "not used"), + Diagnostics(env.AtRegexp("a/main.go", "V"), WithMessage("not used")), ) env.CloseBuffer("a/main.go")