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 }