@@ -11,7 +11,7 @@ import {
11
11
CompletionTriggerKind ,
12
12
RequestType ,
13
13
} from 'vscode-languageclient' ;
14
- import { provideCompletionsCommand } from '../../../lsptoolshost/razorCommands' ;
14
+ import { provideCompletionsCommand , resolveCompletionsCommand } from '../../../lsptoolshost/razorCommands' ;
15
15
import { RazorDocumentManager } from '../document/razorDocumentManager' ;
16
16
import { RazorDocumentSynchronizer } from '../document/razorDocumentSynchronizer' ;
17
17
import { RazorLanguageServerClient } from '../razorLanguageServerClient' ;
@@ -116,8 +116,6 @@ export class CompletionHandler {
116
116
? CompletionTriggerKind . Invoked
117
117
: delegatedCompletionParams . context . triggerKind ;
118
118
119
- let completions : vscode . CompletionList | vscode . CompletionItem [ ] ;
120
-
121
119
if ( delegatedCompletionParams . projectedKind === LanguageKind . CSharp ) {
122
120
const params : CompletionParams = {
123
121
context : {
@@ -130,26 +128,28 @@ export class CompletionHandler {
130
128
position : delegatedCompletionParams . projectedPosition ,
131
129
} ;
132
130
133
- completions = await vscode . commands . executeCommand < vscode . CompletionList | vscode . CompletionItem [ ] > (
131
+ const roslynCompletions = await vscode . commands . executeCommand < CompletionList > (
134
132
provideCompletionsCommand ,
135
133
params
136
134
) ;
137
- } else {
138
- completions = await vscode . commands . executeCommand < vscode . CompletionList | vscode . CompletionItem [ ] > (
139
- 'vscode.executeCompletionItemProvider' ,
140
- UriConverter . deserialize ( virtualDocumentUri ) ,
141
- delegatedCompletionParams . projectedPosition ,
142
- modifiedTriggerCharacter
143
- ) ;
135
+ return roslynCompletions ;
144
136
}
145
137
138
+ // HTML case
139
+ const completions = await vscode . commands . executeCommand < vscode . CompletionList | vscode . CompletionItem [ ] > (
140
+ 'vscode.executeCompletionItemProvider' ,
141
+ UriConverter . deserialize ( virtualDocumentUri ) ,
142
+ delegatedCompletionParams . projectedPosition ,
143
+ modifiedTriggerCharacter
144
+ ) ;
145
+
146
146
const completionItems =
147
147
completions instanceof Array
148
148
? completions // was vscode.CompletionItem[]
149
149
: completions
150
150
? completions . items // was vscode.CompletionList
151
151
: [ ] ;
152
- // TODO: do this conversion for HTML only, C# seems fine without it
152
+
153
153
const convertedCompletionItems : CompletionItem [ ] = new Array ( completionItems . length ) ;
154
154
for ( let i = 0 ; i < completionItems . length ; i ++ ) {
155
155
const completionItem = completionItems [ i ] ;
@@ -176,10 +176,26 @@ export class CompletionHandler {
176
176
}
177
177
178
178
private async provideResolvedCompletionItem (
179
- _1 : SerializableDelegatedCompletionItemResolveParams ,
180
- _2 : vscode . CancellationToken
179
+ delegatedCompletionItemResolveParams : SerializableDelegatedCompletionItemResolveParams ,
180
+ _cancellationToken : vscode . CancellationToken
181
181
) {
182
- // TODO: add implementation :)
182
+ // TODO: Snippet support
183
+
184
+ if ( delegatedCompletionItemResolveParams . originatingKind != LanguageKind . CSharp ) {
185
+ return delegatedCompletionItemResolveParams . completionItem ;
186
+ } else {
187
+ const newItem = await vscode . commands . executeCommand < CompletionItem > (
188
+ resolveCompletionsCommand ,
189
+ delegatedCompletionItemResolveParams . completionItem
190
+ ) ;
191
+
192
+ if ( ! newItem ) {
193
+ return delegatedCompletionItemResolveParams . completionItem ;
194
+ }
195
+
196
+ return newItem ;
197
+ }
198
+
183
199
return CompletionHandler . emptyCompletionItem ;
184
200
}
185
201
}
0 commit comments