From 52adfe5cb642c4a8e4fdc4fd5e33c0f4f1e41cfd Mon Sep 17 00:00:00 2001 From: Rebecca Stambler Date: Mon, 11 Nov 2019 18:27:04 -0500 Subject: [PATCH] internal/lsp/cache: avoid returning errors when building source.Errors We don't want to return an error for the whole package when we are just building out error positions. Change-Id: I56b5b88ff2b4b44da8a372ade81cd9b1534235c4 Reviewed-on: https://go-review.googlesource.com/c/tools/+/206597 Reviewed-by: Heschi Kreinick Run-TryBot: Heschi Kreinick --- internal/lsp/cache/check.go | 3 ++- internal/lsp/cache/errors.go | 9 ++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/internal/lsp/cache/check.go b/internal/lsp/cache/check.go index fb7772e2ac..41ed042a4d 100644 --- a/internal/lsp/cache/check.go +++ b/internal/lsp/cache/check.go @@ -310,7 +310,8 @@ func typeCheck(ctx context.Context, fset *token.FileSet, m *metadata, mode sourc for _, e := range rawErrors { srcErr, err := sourceError(ctx, fset, pkg, e) if err != nil { - return nil, err + log.Error(ctx, "unable to compute error positions", err, telemetry.Package.Of(pkg.ID())) + continue } pkg.errors = append(pkg.errors, srcErr) } diff --git a/internal/lsp/cache/errors.go b/internal/lsp/cache/errors.go index 57740ff2ed..984a8f428c 100644 --- a/internal/lsp/cache/errors.go +++ b/internal/lsp/cache/errors.go @@ -12,7 +12,9 @@ import ( "golang.org/x/tools/go/packages" "golang.org/x/tools/internal/lsp/protocol" "golang.org/x/tools/internal/lsp/source" + "golang.org/x/tools/internal/lsp/telemetry" "golang.org/x/tools/internal/span" + "golang.org/x/tools/internal/telemetry/log" errors "golang.org/x/xerrors" ) @@ -40,7 +42,8 @@ func sourceError(ctx context.Context, fset *token.FileSet, pkg *pkg, e interface kind = source.ParseError spn, err = scannerErrorRange(ctx, fset, pkg, e.Pos) if err != nil { - return nil, err + log.Error(ctx, "no span for scanner.Error pos", err, telemetry.Package.Of(pkg.ID())) + spn = span.Parse(e.Pos.String()) } case scanner.ErrorList: @@ -52,9 +55,9 @@ func sourceError(ctx context.Context, fset *token.FileSet, pkg *pkg, e interface kind = source.ParseError spn, err = scannerErrorRange(ctx, fset, pkg, e[0].Pos) if err != nil { - return nil, err + log.Error(ctx, "no span for scanner.Error pos", err, telemetry.Package.Of(pkg.ID())) + spn = span.Parse(e[0].Pos.String()) } - case types.Error: msg = e.Msg kind = source.TypeError