| // Copyright 2022 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| "golang.org/x/tools/gopls/internal/lsp/protocol" |
| "golang.org/x/tools/gopls/internal/vulncheck" |
| "golang.org/x/tools/gopls/internal/vulncheck/scan" |
| "golang.org/x/tools/internal/memoize" |
| // ModVuln returns import vulnerability analysis for the given go.mod URI. |
| // Concurrent requests are combined into a single command. |
| func (s *Snapshot) ModVuln(ctx context.Context, modURI protocol.DocumentURI) (*vulncheck.Result, error) { |
| entry, hit := s.modVulnHandles.Get(modURI) |
| handle := memoize.NewPromise("modVuln", func(ctx context.Context, arg interface{}) interface{} { |
| result, err := scan.VulnerablePackages(ctx, arg.(*Snapshot)) |
| return modVuln{result, err} |
| s.modVulnHandles.Set(modURI, entry, nil) |
| v, err := s.awaitPromise(ctx, entry) |
| return res.result, res.err |