gopls/internal/server: fix parsing vulncheck action

Previously, the action var in checkDepedencyChanges was being shadowed
within an inner context. As a result, the outer action var's value
remained null despite the inner action var being set correctly.
Triggering govulncheck from the vulncheck_prompt works now.

Fixes golang/go#79826

Change-Id: I431bcf381f55616a2a8ff325b7f23d2f07a7e9fd
Reviewed-on: https://go-review.googlesource.com/c/tools/+/794880
Auto-Submit: Ethan Lee <ethanalee@google.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Hongxiang Jiang <hxjiang@golang.org>
diff --git a/gopls/internal/server/vulncheck_prompt.go b/gopls/internal/server/vulncheck_prompt.go
index cb69f1a..3c21a04 100644
--- a/gopls/internal/server/vulncheck_prompt.go
+++ b/gopls/internal/server/vulncheck_prompt.go
@@ -49,7 +49,6 @@
 const (
 	vulnupgradeActionUpgradeAll vulnupgradeAction = "Upgrade All"
 	vulnupgradeActionIgnore     vulnupgradeAction = "Ignore"
-	vulnupgradeActionEmpty      vulnupgradeAction = ""
 )
 
 // computeGoModHash computes the SHA256 hash of the go.mod file's dependencies.
@@ -169,7 +168,8 @@
 				event.Error(ctx, "showing dependency changed notification failed", err)
 				return
 			}
-			action, ok := parseVulncheckAction(choice)
+			var ok bool
+			action, ok = parseVulncheckAction(choice)
 			if !ok {
 				event.Error(ctx, "parsing vulncheck action failed", fmt.Errorf("unexpected action: %s", choice))
 				return
@@ -408,13 +408,16 @@
 	return parseAction(s, []vulnupgradeAction{vulnupgradeActionUpgradeAll, vulnupgradeActionIgnore})
 }
 
+// parseAction parses s against the list of allowed actions case-insensitively.
+// It returns the matching action and true if a match is found.
+// Otherwise, it returns the zero value of T and false.
 func parseAction[T ~string](s string, actions []T) (T, bool) {
 	for _, a := range actions {
 		if strings.EqualFold(string(a), s) {
 			return a, true
 		}
 	}
-	return "", false
+	return *new(T), false
 }
 
 func getVulncheckPreference() (vulncheckAction, error) {