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