internal/lsp: ignore errors for completion and signature help

This change makes sure that we never return error messages for
completions and signature help requests - just empty results.

Change-Id: I00d75cd116daab63beb07f2344e47aac01bb64ee
Reviewed-on: https://go-review.googlesource.com/c/tools/+/170958
Reviewed-by: Ian Cottrell <iancottrell@google.com>
Run-TryBot: Ian Cottrell <iancottrell@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/internal/lsp/completion.go b/internal/lsp/completion.go
index 1ea9118..fa3a6a6 100644
--- a/internal/lsp/completion.go
+++ b/internal/lsp/completion.go
@@ -33,7 +33,8 @@
 	}
 	items, prefix, err := source.Completion(ctx, f, rng.Start)
 	if err != nil {
-		return nil, err
+		s.log.Infof(ctx, "no completions found for %s:%v:%v", uri, int(params.Position.Line), int(params.Position.Character))
+		items = []source.CompletionItem{}
 	}
 	return &protocol.CompletionList{
 		IsIncomplete: false,
diff --git a/internal/lsp/server.go b/internal/lsp/server.go
index b26a971..d41aa60 100644
--- a/internal/lsp/server.go
+++ b/internal/lsp/server.go
@@ -395,7 +395,7 @@
 	}
 	info, err := source.SignatureHelp(ctx, f, rng.Start)
 	if err != nil {
-		return nil, err
+		s.log.Infof(ctx, "no signature help for %s:%v:%v", uri, int(params.Position.Line), int(params.Position.Character))
 	}
 	return toProtocolSignatureHelp(info), nil
 }
@@ -483,17 +483,14 @@
 	if err != nil {
 		return nil, err
 	}
-
 	spn, err := m.PointSpan(params.Position)
 	if err != nil {
 		return nil, err
 	}
-
 	rng, err := spn.Range(m.Converter)
 	if err != nil {
 		return nil, err
 	}
-
 	spans := source.Highlight(ctx, f, rng.Start)
 	return toProtocolHighlight(m, spans), nil
 }
diff --git a/internal/lsp/signature_help.go b/internal/lsp/signature_help.go
index 0e54a50..7479db4 100644
--- a/internal/lsp/signature_help.go
+++ b/internal/lsp/signature_help.go
@@ -10,6 +10,9 @@
 )
 
 func toProtocolSignatureHelp(info *source.SignatureInformation) *protocol.SignatureHelp {
+	if info == nil {
+		return &protocol.SignatureHelp{}
+	}
 	return &protocol.SignatureHelp{
 		ActiveParameter: float64(info.ActiveParameter),
 		ActiveSignature: 0, // there is only ever one possible signature