internal/lsp: add additional debug logging for diagnostics

This change adds detailed debug logging for lsp.Diagnostics. This is
necessary for further investigation of cases where diagnostics aren't
propagated after a "didChange" request.

Updates golang/go#30786

Change-Id: I30eabf5a1cb17d4538a8860310b450494626b76f
Reviewed-on: https://go-review.googlesource.com/c/tools/+/172971
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:
Rebecca Stambler 2019-04-22 15:28:38 -04:00
parent 61c0d37527
commit 1e2181f3f4
2 changed files with 17 additions and 0 deletions

View File

@ -14,16 +14,24 @@ import (
) )
func (s *Server) cacheAndDiagnose(ctx context.Context, uri span.URI, content string) error { func (s *Server) cacheAndDiagnose(ctx context.Context, uri span.URI, content string) error {
s.log.Debugf(ctx, "cacheAndDiagnose: %s", uri)
view := s.findView(ctx, uri) view := s.findView(ctx, uri)
if err := view.SetContent(ctx, uri, []byte(content)); err != nil { if err := view.SetContent(ctx, uri, []byte(content)); err != nil {
return err return err
} }
s.log.Debugf(ctx, "cacheAndDiagnose: set content for %s", uri)
go func() { go func() {
ctx := view.BackgroundContext() ctx := view.BackgroundContext()
if ctx.Err() != nil { if ctx.Err() != nil {
s.log.Errorf(ctx, "canceling diagnostics for %s: %v", uri, ctx.Err()) s.log.Errorf(ctx, "canceling diagnostics for %s: %v", uri, ctx.Err())
return return
} }
s.log.Debugf(ctx, "cacheAndDiagnose: going to get diagnostics for %s", uri)
reports, err := source.Diagnostics(ctx, view, uri) reports, err := source.Diagnostics(ctx, view, uri)
if err != nil { if err != nil {
s.log.Errorf(ctx, "failed to compute diagnostics for %s: %v", uri, err) s.log.Errorf(ctx, "failed to compute diagnostics for %s: %v", uri, err)
@ -33,6 +41,8 @@ func (s *Server) cacheAndDiagnose(ctx context.Context, uri span.URI, content str
s.undeliveredMu.Lock() s.undeliveredMu.Lock()
defer s.undeliveredMu.Unlock() defer s.undeliveredMu.Unlock()
s.log.Debugf(ctx, "cacheAndDiagnose: publishing diagnostics")
for uri, diagnostics := range reports { for uri, diagnostics := range reports {
if err := s.publishDiagnostics(ctx, view, uri, diagnostics); err != nil { if err := s.publishDiagnostics(ctx, view, uri, diagnostics); err != nil {
if s.undelivered == nil { if s.undelivered == nil {
@ -44,6 +54,9 @@ func (s *Server) cacheAndDiagnose(ctx context.Context, uri span.URI, content str
// In case we had old, undelivered diagnostics. // In case we had old, undelivered diagnostics.
delete(s.undelivered, uri) delete(s.undelivered, uri)
} }
s.log.Debugf(ctx, "cacheAndDiagnose: publishing undelivered diagnostics")
// Anytime we compute diagnostics, make sure to also send along any // Anytime we compute diagnostics, make sure to also send along any
// undelivered ones (only for remaining URIs). // undelivered ones (only for remaining URIs).
for uri, diagnostics := range s.undelivered { for uri, diagnostics := range s.undelivered {
@ -53,6 +66,9 @@ func (s *Server) cacheAndDiagnose(ctx context.Context, uri span.URI, content str
delete(s.undelivered, uri) delete(s.undelivered, uri)
} }
}() }()
s.log.Debugf(ctx, "cacheAndDiagnose: done computing diagnostics for %s", uri)
return nil return nil
} }

View File

@ -34,6 +34,7 @@ func (s *Server) didChange(ctx context.Context, params *protocol.DidChangeTextDo
} }
text = change.Text text = change.Text
} }
s.log.Debugf(ctx, "didChange: %s", params.TextDocument.URI)
return s.cacheAndDiagnose(ctx, span.NewURI(params.TextDocument.URI), text) return s.cacheAndDiagnose(ctx, span.NewURI(params.TextDocument.URI), text)
} }