From 6299a6dbc205e4ff071a402f84945f29856d68da Mon Sep 17 00:00:00 2001 From: Robert Findley Date: Fri, 7 Jan 2022 18:12:07 -0500 Subject: [PATCH] internal/lsp/cache: keep going on per-file workspace symbol errors I'm not sure how to hit this in practice, since it appears that symbols should only return errors with some type of corruption, but we should keep going when searching for symbols in snapshot files. Change-Id: I9fcf6cc92fdc943520e8890ece51d28ec46e8812 Reviewed-on: https://go-review.googlesource.com/c/tools/+/376363 Trust: Robert Findley Run-TryBot: Robert Findley Reviewed-by: Peter Weinberger gopls-CI: kokoro TryBot-Result: Gopher Robot --- internal/lsp/cache/snapshot.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/internal/lsp/cache/snapshot.go b/internal/lsp/cache/snapshot.go index 745c92a2a6..edcb5213e5 100644 --- a/internal/lsp/cache/snapshot.go +++ b/internal/lsp/cache/snapshot.go @@ -966,15 +966,25 @@ func (s *snapshot) activePackageHandles(ctx context.Context) ([]*packageHandle, func (s *snapshot) Symbols(ctx context.Context) (map[span.URI][]source.Symbol, error) { result := make(map[span.URI][]source.Symbol) + + // Keep going on errors, but log the first failure. Partial symbol results + // are better than no symbol results. + var firstErr error for uri, f := range s.files { sh := s.buildSymbolHandle(ctx, f) v, err := sh.handle.Get(ctx, s.generation, s) if err != nil { - return nil, err + if firstErr == nil { + firstErr = err + } + continue } data := v.(*symbolData) result[uri] = data.symbols } + if firstErr != nil { + event.Error(ctx, "getting snapshot symbols", firstErr) + } return result, nil }