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) {