Skip to content

Commit 3ef6ffd

Browse files
committed
feat: implemented resolveCompletionItem
1 parent 81ef510 commit 3ef6ffd

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

src/monaco/ls.ts

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,12 +191,14 @@ export async function setupLs(modelsMap: Ref<Map<string, monaco.editor.ITextMode
191191
const ls = createLanguageService({ typescript: ts }, host, undefined, undefined, undefined, []);
192192
disposables.value.push(ls);
193193

194+
const completionItems = new WeakMap<monaco.languages.CompletionItem, vscode.CompletionItem>();
195+
194196
disposables.value.push(
195197
monaco.languages.registerCompletionItemProvider(lang, {
196198
// https://github.com/johnsoncodehk/volar/blob/2f786182250d27e99cc3714fbfc7d209616e2289/packages/vue-language-server/src/registers/registerlanguageFeatures.ts#L57
197199
triggerCharacters: '!@#$%^&*()_+-=`~{}|[]\:";\'<>?,./ '.split(''),
198200
provideCompletionItems: async (model, position, context) => {
199-
const result = await ls.doComplete(
201+
const codeResult = await ls.doComplete(
200202
model.uri.fsPath,
201203
{
202204
line: position.lineNumber - 1,
@@ -207,7 +209,22 @@ export async function setupLs(modelsMap: Ref<Map<string, monaco.editor.ITextMode
207209
triggerCharacter: context.triggerCharacter,
208210
},
209211
);
210-
return code2monaco.asCompletionList(result);
212+
const monacoResult = code2monaco.asCompletionList(codeResult);
213+
for (let i = 0; i < codeResult.items.length; i++) {
214+
const codeItem = codeResult.items[i];
215+
const monacoItem = monacoResult.suggestions[i];
216+
completionItems.set(monacoItem, codeItem);
217+
}
218+
return monacoResult;
219+
},
220+
resolveCompletionItem: async (monacoItem, token) => {
221+
let codeItem = completionItems.get(monacoItem);
222+
if (codeItem) {
223+
codeItem = await ls.doCompletionResolve(codeItem);
224+
monacoItem = code2monaco.asCompletionItem(codeItem);
225+
completionItems.set(monacoItem, codeItem);
226+
}
227+
return monacoItem;
211228
},
212229
}),
213230
);

0 commit comments

Comments
 (0)