@@ -20,6 +20,7 @@ import { SerializableDelegatedCompletionParams } from './serializableDelegatedCo
2020import { SerializableDelegatedCompletionItemResolveParams } from './serializableDelegatedCompletionItemResolveParams' ;
2121import { LanguageKind } from '../rpc/languageKind' ;
2222import { UriConverter } from '../../../lsptoolshost/uriConverter' ;
23+ import { MarkupContent } from 'vscode-html-languageservice' ;
2324
2425export class CompletionHandler {
2526 private static readonly completionEndpoint = 'razor/completion' ;
@@ -116,6 +117,7 @@ export class CompletionHandler {
116117 ? CompletionTriggerKind . Invoked
117118 : delegatedCompletionParams . context . triggerKind ;
118119
120+ // Roslyn/C# completion
119121 if ( delegatedCompletionParams . projectedKind === LanguageKind . CSharp ) {
120122 const params : CompletionParams = {
121123 context : {
@@ -132,11 +134,14 @@ export class CompletionHandler {
132134 provideCompletionsCommand ,
133135 params
134136 ) ;
135- this . AdjustRoslynCompletionList ( roslynCompletions , delegatedCompletionParams . context . triggerCharacter ) ;
137+ CompletionHandler . AdjustRoslynCompletionList (
138+ roslynCompletions ,
139+ delegatedCompletionParams . context . triggerCharacter
140+ ) ;
136141 return roslynCompletions ;
137142 }
138143
139- // HTML case
144+ // HTML completion
140145 const completions = await vscode . commands . executeCommand < vscode . CompletionList | vscode . CompletionItem [ ] > (
141146 'vscode.executeCompletionItemProvider' ,
142147 UriConverter . deserialize ( virtualDocumentUri ) ,
@@ -158,6 +163,7 @@ export class CompletionHandler {
158163 label : completionItem . label ,
159164 kind : completionItem . kind ,
160165 commitCharacters : completionItem . commitCharacters ,
166+ documentation : CompletionHandler . ToMarkupContent ( completionItem . documentation ) ,
161167 } ;
162168 convertedCompletionItems [ i ] = convertedCompletionItem ;
163169 }
@@ -200,7 +206,7 @@ export class CompletionHandler {
200206 return CompletionHandler . emptyCompletionItem ;
201207 }
202208
203- private AdjustRoslynCompletionList ( completionList : CompletionList , triggerCharacter : string | undefined ) {
209+ private static AdjustRoslynCompletionList ( completionList : CompletionList , triggerCharacter : string | undefined ) {
204210 const data = completionList . itemDefaults ?. data ;
205211 for ( const completionItem of completionList . items ) {
206212 // textEdit is deprecated in favor of .range. Clear out its value to avoid any unexpected behavior.
@@ -226,4 +232,18 @@ export class CompletionHandler {
226232 }
227233 }
228234 }
235+
236+ // converts completion item documentation from vscode format to LSP format
237+ private static ToMarkupContent ( documentation ?: string | vscode . MarkdownString ) : string | MarkupContent | undefined {
238+ const markdownString = documentation as vscode . MarkdownString ;
239+ if ( ! markdownString ?. value ) {
240+ return < string | undefined > documentation ;
241+ }
242+ const markupContent : MarkupContent = {
243+ value : markdownString . value ,
244+ kind : 'markdown' ,
245+ } ;
246+
247+ return markupContent ;
248+ }
229249}
0 commit comments