gopls/internal/regtest: eliminate NoDiagnostics

It is confusing to have both NoDiagnostics and EmptyOrNoDiagnostics.

From a user's perspective, it does not matter whether gopls sends no
diagnostics or sends empty diagnostics, so favor EmptyOrNoDiagnostics.
In a subsequent change, I will rename EmptyOrNoDiagnostics to just
NoDiagnostics.

Also, switch more Await expressions to eager failures along the way.

Change-Id: Ib20b9ad7e7e7c819f793acb931681ec0dd4f76f7
Reviewed-on: https://go-review.googlesource.com/c/tools/+/461876
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Alan Donovan <adonovan@google.com>
diff --git a/gopls/internal/lsp/regtest/expectation.go b/gopls/internal/lsp/regtest/expectation.go
index 3b623d0..7fcaf51 100644
--- a/gopls/internal/lsp/regtest/expectation.go
+++ b/gopls/internal/lsp/regtest/expectation.go
@@ -749,23 +749,6 @@
 	}
 }
 
-// NoDiagnostics asserts that no diagnostics are sent for the
-// workspace-relative path name. It should be used primarily in conjunction
-// with a OnceMet, as it has to check that all outstanding diagnostics have
-// already been delivered.
-func NoDiagnostics(name string) Expectation {
-	check := func(s State) Verdict {
-		if _, ok := s.diagnostics[name]; !ok {
-			return Met
-		}
-		return Unmet
-	}
-	return SimpleExpectation{
-		check:       check,
-		description: fmt.Sprintf("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/diagnostics/builtin_test.go b/gopls/internal/regtest/diagnostics/builtin_test.go
index 8de47bc..ae775d9 100644
--- a/gopls/internal/regtest/diagnostics/builtin_test.go
+++ b/gopls/internal/regtest/diagnostics/builtin_test.go
@@ -32,7 +32,7 @@
 		}
 		env.Await(OnceMet(
 			env.DoneWithOpen(),
-			NoDiagnostics("builtin.go"),
+			EmptyOrNoDiagnostics("builtin.go"),
 		))
 	})
 }
diff --git a/gopls/internal/regtest/diagnostics/diagnostics_test.go b/gopls/internal/regtest/diagnostics/diagnostics_test.go
index 84bd5d4..9ef429c 100644
--- a/gopls/internal/regtest/diagnostics/diagnostics_test.go
+++ b/gopls/internal/regtest/diagnostics/diagnostics_test.go
@@ -1092,7 +1092,7 @@
 		env.Await(
 			OnceMet(
 				env.DoneWithChange(),
-				NoDiagnostics("foo/foo.go"),
+				EmptyOrNoDiagnostics("foo/foo.go"),
 			),
 		)
 	})
@@ -1208,7 +1208,7 @@
 		WorkspaceFolders("a"),
 	).Run(t, mod, func(t *testing.T, env *Env) {
 		env.OpenFile("a/main.go")
-		env.Await(
+		env.AfterChange(
 			env.DiagnosticAtRegexp("main.go", "x"),
 		)
 	})
@@ -1217,8 +1217,8 @@
 		Settings{"expandWorkspaceToModule": false},
 	).Run(t, mod, func(t *testing.T, env *Env) {
 		env.OpenFile("a/main.go")
-		env.Await(
-			NoDiagnostics("main.go"),
+		env.AfterChange(
+			EmptyOrNoDiagnostics("main.go"),
 		)
 	})
 }
diff --git a/gopls/internal/regtest/template/template_test.go b/gopls/internal/regtest/template/template_test.go
index afe5797..4e87d04 100644
--- a/gopls/internal/regtest/template/template_test.go
+++ b/gopls/internal/regtest/template/template_test.go
@@ -121,8 +121,11 @@
 		},
 	).Run(t, files, func(t *testing.T, env *Env) {
 		env.Await(
-			OnceMet(env.DiagnosticAtRegexp("a/a.tmpl", "()A")),
-			NoDiagnostics("b/b.tmpl"),
+			OnceMet(
+				InitialWorkspaceLoad,
+				env.DiagnosticAtRegexp("a/a.tmpl", "()A"),
+				EmptyOrNoDiagnostics("b/b.tmpl"),
+			),
 		)
 	})
 }
diff --git a/gopls/internal/regtest/watch/watch_test.go b/gopls/internal/regtest/watch/watch_test.go
index 99c76ff..a62b473 100644
--- a/gopls/internal/regtest/watch/watch_test.go
+++ b/gopls/internal/regtest/watch/watch_test.go
@@ -225,8 +225,8 @@
 	Run(t, original, func(t *testing.T, env *Env) {
 		env.WriteWorkspaceFile("c/c.go", `package c; func C() {};`)
 		env.WriteWorkspaceFile("a/a.go", `package a; import "mod.com/c"; func _() { c.C() }`)
-		env.Await(
-			NoDiagnostics("a/a.go"),
+		env.AfterChange(
+			EmptyOrNoDiagnostics("a/a.go"),
 		)
 	})
 }
@@ -490,7 +490,7 @@
 		env.RemoveWorkspaceFile("a/a1.go")
 		env.WriteWorkspaceFile("a/a2.go", "package a; func _() {};")
 		env.AfterChange(
-			NoDiagnostics("main.go"),
+			EmptyOrNoDiagnostics("main.go"),
 		)
 	})
 }
diff --git a/gopls/internal/regtest/workspace/directoryfilters_test.go b/gopls/internal/regtest/workspace/directoryfilters_test.go
index 3f8bf6c..0a1f596 100644
--- a/gopls/internal/regtest/workspace/directoryfilters_test.go
+++ b/gopls/internal/regtest/workspace/directoryfilters_test.go
@@ -53,7 +53,12 @@
 	WithOptions(
 		Settings{"directoryFilters": []string{"-exclude"}},
 	).Run(t, files, func(t *testing.T, env *Env) {
-		env.Await(NoDiagnostics("exclude/x.go"))
+		env.Await(
+			OnceMet(
+				InitialWorkspaceLoad,
+				EmptyOrNoDiagnostics("exclude/x.go"),
+			),
+		)
 	})
 }
 
@@ -81,8 +86,11 @@
 		Settings{"directoryFilters": []string{"-exclude"}},
 	).Run(t, files, func(t *testing.T, env *Env) {
 		env.Await(
-			NoDiagnostics("exclude/exclude.go"), // filtered out
-			NoDiagnostics("include/include.go"), // successfully builds
+			OnceMet(
+				InitialWorkspaceLoad,
+				EmptyOrNoDiagnostics("exclude/exclude.go"), // filtered out
+				EmptyOrNoDiagnostics("include/include.go"), // successfully builds
+			),
 		)
 	})
 }
diff --git a/gopls/internal/regtest/workspace/workspace_test.go b/gopls/internal/regtest/workspace/workspace_test.go
index 35ea6b9..0028f84 100644
--- a/gopls/internal/regtest/workspace/workspace_test.go
+++ b/gopls/internal/regtest/workspace/workspace_test.go
@@ -1172,11 +1172,8 @@
 `
 	Run(t, ws, func(t *testing.T, env *Env) {
 		env.OpenFile("b/main.go")
-		env.Await(
-			OnceMet(
-				env.DoneWithOpen(),
-				NoDiagnostics("a/main.go"),
-			),
+		env.AfterChange(
+			EmptyOrNoDiagnostics("a/main.go"),
 		)
 		env.OpenFile("a/main.go")
 		env.Await(