internal/lsp: propagate errors from in diagnostics
An ignored error in toProtocolDiagnostics could result in empty diagnostics being (incorrectly) sent to the user. Change-Id: I34c86a1f5bbf28888bedad094f596cc27a52b86d Reviewed-on: https://go-review.googlesource.com/c/tools/+/167714 Run-TryBot: Rebecca Stambler <rstambler@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Cottrell <iancottrell@google.com>
This commit is contained in:
parent
1286b2016b
commit
8781451fe3
|
@ -27,8 +27,12 @@ func (s *server) cacheAndDiagnose(ctx context.Context, uri span.URI, content str
|
||||||
return // handle error?
|
return // handle error?
|
||||||
}
|
}
|
||||||
for uri, diagnostics := range reports {
|
for uri, diagnostics := range reports {
|
||||||
|
protocolDiagnostics, err := toProtocolDiagnostics(ctx, s.view, diagnostics)
|
||||||
|
if err != nil {
|
||||||
|
continue // handle errors?
|
||||||
|
}
|
||||||
s.client.PublishDiagnostics(ctx, &protocol.PublishDiagnosticsParams{
|
s.client.PublishDiagnostics(ctx, &protocol.PublishDiagnosticsParams{
|
||||||
Diagnostics: toProtocolDiagnostics(ctx, s.view, diagnostics),
|
Diagnostics: protocolDiagnostics,
|
||||||
URI: protocol.NewURI(uri),
|
URI: protocol.NewURI(uri),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -40,14 +44,12 @@ func (s *server) setContent(ctx context.Context, uri span.URI, content []byte) e
|
||||||
return s.view.SetContent(ctx, uri, content)
|
return s.view.SetContent(ctx, uri, content)
|
||||||
}
|
}
|
||||||
|
|
||||||
func toProtocolDiagnostics(ctx context.Context, v source.View, diagnostics []source.Diagnostic) []protocol.Diagnostic {
|
func toProtocolDiagnostics(ctx context.Context, v source.View, diagnostics []source.Diagnostic) ([]protocol.Diagnostic, error) {
|
||||||
reports := []protocol.Diagnostic{}
|
reports := []protocol.Diagnostic{}
|
||||||
for _, diag := range diagnostics {
|
for _, diag := range diagnostics {
|
||||||
_, m, err := newColumnMap(ctx, v, diag.Span.URI)
|
_, m, err := newColumnMap(ctx, v, diag.Span.URI)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
//TODO: if we can't find the file we cannot map
|
return nil, err
|
||||||
//the diagnostic, but also this should never happen
|
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
src := diag.Source
|
src := diag.Source
|
||||||
if src == "" {
|
if src == "" {
|
||||||
|
@ -67,7 +69,7 @@ func toProtocolDiagnostics(ctx context.Context, v source.View, diagnostics []sou
|
||||||
Source: src,
|
Source: src,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return reports
|
return reports, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func sorted(d []protocol.Diagnostic) {
|
func sorted(d []protocol.Diagnostic) {
|
||||||
|
|
|
@ -162,7 +162,10 @@ func (d diagnostics) test(t *testing.T, v source.View) int {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
got := toProtocolDiagnostics(ctx, v, sourceDiagnostics[uri])
|
got, err := toProtocolDiagnostics(ctx, v, sourceDiagnostics[uri])
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
sorted(got)
|
sorted(got)
|
||||||
if diff := diffDiagnostics(uri, want, got); diff != "" {
|
if diff := diffDiagnostics(uri, want, got); diff != "" {
|
||||||
t.Error(diff)
|
t.Error(diff)
|
||||||
|
|
Loading…
Reference in New Issue