diff --git a/internal/lsp/completion.go b/internal/lsp/completion.go index f0d8bcb6..c2c8cda8 100644 --- a/internal/lsp/completion.go +++ b/internal/lsp/completion.go @@ -46,6 +46,7 @@ func toProtocolCompletionItems(candidates []source.CompletionItem, prefix string End: pos, }, }, + InsertTextFormat: insertTextFormat, // This is a hack so that the client sorts completion results in the order // according to their score. This can be removed upon the resolution of // https://github.com/Microsoft/language-server-protocol/issues/348. diff --git a/internal/lsp/protocol/tsprotocol.go b/internal/lsp/protocol/tsprotocol.go index c0cba77f..11962acf 100644 --- a/internal/lsp/protocol/tsprotocol.go +++ b/internal/lsp/protocol/tsprotocol.go @@ -1017,8 +1017,11 @@ type InnerClientCapabilities struct { Experimental interface{} `json:"experimental,omitempty"` } -// ClientCapabilities is: -type ClientCapabilities struct { +// TODO(rstambler): Remove this when golang.org/issue/31090 is resolved. +type ClientCapabilities map[string]interface{} + +// clientCapabilities is: +type clientCapabilities struct { InnerClientCapabilities ImplementationClientCapabilities TypeDefinitionClientCapabilities diff --git a/internal/lsp/server.go b/internal/lsp/server.go index c3e50905..0ea00852 100644 --- a/internal/lsp/server.go +++ b/internal/lsp/server.go @@ -93,9 +93,14 @@ func (s *Server) Initialize(ctx context.Context, params *protocol.InitializePara s.initialized = true // mark server as initialized now // Check if the client supports snippets in completion items. - capText := params.Capabilities.InnerClientCapabilities.TextDocument - if capText != nil && capText.Completion != nil && capText.Completion.CompletionItem != nil { - s.snippetsSupported = capText.Completion.CompletionItem.SnippetSupport + if x, ok := params.Capabilities["textDocument"].(map[string]interface{}); ok { + if x, ok := x["completion"].(map[string]interface{}); ok { + if x, ok := x["completionItem"].(map[string]interface{}); ok { + if x, ok := x["snippetSupport"].(bool); ok { + s.snippetsSupported = x + } + } + } } s.signatureHelpEnabled = true