@@ -20,6 +20,7 @@ import { SerializableDelegatedCompletionParams } from './serializableDelegatedCo
20
20
import { SerializableDelegatedCompletionItemResolveParams } from './serializableDelegatedCompletionItemResolveParams' ;
21
21
import { LanguageKind } from '../rpc/languageKind' ;
22
22
import { UriConverter } from '../../../lsptoolshost/uriConverter' ;
23
+ import { MarkupContent } from 'vscode-html-languageservice' ;
23
24
24
25
export class CompletionHandler {
25
26
private static readonly completionEndpoint = 'razor/completion' ;
@@ -116,6 +117,7 @@ export class CompletionHandler {
116
117
? CompletionTriggerKind . Invoked
117
118
: delegatedCompletionParams . context . triggerKind ;
118
119
120
+ // Roslyn/C# completion
119
121
if ( delegatedCompletionParams . projectedKind === LanguageKind . CSharp ) {
120
122
const params : CompletionParams = {
121
123
context : {
@@ -132,11 +134,14 @@ export class CompletionHandler {
132
134
provideCompletionsCommand ,
133
135
params
134
136
) ;
135
- this . AdjustRoslynCompletionList ( roslynCompletions , delegatedCompletionParams . context . triggerCharacter ) ;
137
+ CompletionHandler . AdjustRoslynCompletionList (
138
+ roslynCompletions ,
139
+ delegatedCompletionParams . context . triggerCharacter
140
+ ) ;
136
141
return roslynCompletions ;
137
142
}
138
143
139
- // HTML case
144
+ // HTML completion
140
145
const completions = await vscode . commands . executeCommand < vscode . CompletionList | vscode . CompletionItem [ ] > (
141
146
'vscode.executeCompletionItemProvider' ,
142
147
UriConverter . deserialize ( virtualDocumentUri ) ,
@@ -158,6 +163,7 @@ export class CompletionHandler {
158
163
label : completionItem . label ,
159
164
kind : completionItem . kind ,
160
165
commitCharacters : completionItem . commitCharacters ,
166
+ documentation : CompletionHandler . ToMarkupContent ( completionItem . documentation ) ,
161
167
} ;
162
168
convertedCompletionItems [ i ] = convertedCompletionItem ;
163
169
}
@@ -200,7 +206,7 @@ export class CompletionHandler {
200
206
return CompletionHandler . emptyCompletionItem ;
201
207
}
202
208
203
- private AdjustRoslynCompletionList ( completionList : CompletionList , triggerCharacter : string | undefined ) {
209
+ private static AdjustRoslynCompletionList ( completionList : CompletionList , triggerCharacter : string | undefined ) {
204
210
const data = completionList . itemDefaults ?. data ;
205
211
for ( const completionItem of completionList . items ) {
206
212
// textEdit is deprecated in favor of .range. Clear out its value to avoid any unexpected behavior.
@@ -226,4 +232,18 @@ export class CompletionHandler {
226
232
}
227
233
}
228
234
}
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
+ }
229
249
}
0 commit comments