Skip to content

Commit b18c72a

Browse files
committed
- Adding initial implementation of resolve
- Using correct LSP types for Roslyn completion items per CR feedback
1 parent 803df42 commit b18c72a

File tree

1 file changed

+31
-15
lines changed

1 file changed

+31
-15
lines changed

src/razor/src/completion/completionHandler.ts

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
CompletionTriggerKind,
1212
RequestType,
1313
} from 'vscode-languageclient';
14-
import { provideCompletionsCommand } from '../../../lsptoolshost/razorCommands';
14+
import { provideCompletionsCommand, resolveCompletionsCommand } from '../../../lsptoolshost/razorCommands';
1515
import { RazorDocumentManager } from '../document/razorDocumentManager';
1616
import { RazorDocumentSynchronizer } from '../document/razorDocumentSynchronizer';
1717
import { RazorLanguageServerClient } from '../razorLanguageServerClient';
@@ -116,8 +116,6 @@ export class CompletionHandler {
116116
? CompletionTriggerKind.Invoked
117117
: delegatedCompletionParams.context.triggerKind;
118118

119-
let completions: vscode.CompletionList | vscode.CompletionItem[];
120-
121119
if (delegatedCompletionParams.projectedKind === LanguageKind.CSharp) {
122120
const params: CompletionParams = {
123121
context: {
@@ -130,26 +128,28 @@ export class CompletionHandler {
130128
position: delegatedCompletionParams.projectedPosition,
131129
};
132130

133-
completions = await vscode.commands.executeCommand<vscode.CompletionList | vscode.CompletionItem[]>(
131+
const roslynCompletions = await vscode.commands.executeCommand<CompletionList>(
134132
provideCompletionsCommand,
135133
params
136134
);
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;
144136
}
145137

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+
146146
const completionItems =
147147
completions instanceof Array
148148
? completions // was vscode.CompletionItem[]
149149
: completions
150150
? completions.items // was vscode.CompletionList
151151
: [];
152-
// TODO: do this conversion for HTML only, C# seems fine without it
152+
153153
const convertedCompletionItems: CompletionItem[] = new Array(completionItems.length);
154154
for (let i = 0; i < completionItems.length; i++) {
155155
const completionItem = completionItems[i];
@@ -176,10 +176,26 @@ export class CompletionHandler {
176176
}
177177

178178
private async provideResolvedCompletionItem(
179-
_1: SerializableDelegatedCompletionItemResolveParams,
180-
_2: vscode.CancellationToken
179+
delegatedCompletionItemResolveParams: SerializableDelegatedCompletionItemResolveParams,
180+
_cancellationToken: vscode.CancellationToken
181181
) {
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+
183199
return CompletionHandler.emptyCompletionItem;
184200
}
185201
}

0 commit comments

Comments
 (0)