diff --git a/src/OmniSharp.LanguageServerProtocol/Handlers/CompletionHandler.cs b/src/OmniSharp.LanguageServerProtocol/Handlers/CompletionHandler.cs index 81a589aeeb..a16b34250f 100644 --- a/src/OmniSharp.LanguageServerProtocol/Handlers/CompletionHandler.cs +++ b/src/OmniSharp.LanguageServerProtocol/Handlers/CompletionHandler.cs @@ -80,7 +80,8 @@ public async Task Handle(CompletionParams request, CancellationT Line = Convert.ToInt32(request.Position.Line), WantKind = true, WantDocumentationForEveryCompletionResult = true, - WantReturnType = true + WantReturnType = true, + WantSnippet =_capability.CompletionItem?.SnippetSupport ?? false }; var omnisharpResponse = await _autoCompleteHandler.Handle(omnisharpRequest); @@ -88,6 +89,10 @@ public async Task Handle(CompletionParams request, CancellationT var completions = new Dictionary>(); foreach (var response in omnisharpResponse) { + var isSnippet = !string.IsNullOrEmpty(response.Snippet); + var text = isSnippet ? response.Snippet : response.CompletionText; + var textFormat = isSnippet ? InsertTextFormat.Snippet : InsertTextFormat.PlainText; + var completionItem = new CompletionItem { Label = response.CompletionText, Detail = !string.IsNullOrEmpty(response.ReturnType) ? @@ -95,7 +100,8 @@ public async Task Handle(CompletionParams request, CancellationT $"{response.ReturnType} {response.DisplayText}", Documentation = response.Description, Kind = GetCompletionItemKind(response.Kind), - InsertText = response.CompletionText, + InsertText = text, + InsertTextFormat = textFormat, }; if(!completions.ContainsKey(completionItem.Label))