Skip to content

Commit bddb65b

Browse files
committed
feat: implemented provideCodeLenses, resolveCodeLens
1 parent b80bb0d commit bddb65b

File tree

1 file changed

+30
-3
lines changed

1 file changed

+30
-3
lines changed

src/monaco/ls.ts

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ export async function setupLs(modelsMap: Ref<Map<string, monaco.editor.ITextMode
194194
disposables.value.push(ls);
195195

196196
const completionItems = new WeakMap<monaco.languages.CompletionItem, vscode.CompletionItem>();
197+
const codeLens = new WeakMap<monaco.languages.CodeLens, vscode.CodeLens>();
197198
const documents = new WeakMap<monaco.editor.ITextModel, vscode.TextDocument>();
198199

199200
disposables.value.push(
@@ -323,6 +324,34 @@ export async function setupLs(modelsMap: Ref<Map<string, monaco.editor.ITextMode
323324
}
324325
},
325326
}),
327+
monaco.languages.registerCodeLensProvider(lang, {
328+
provideCodeLenses: async (model) => {
329+
const codeResult = await ls.doCodeLens(
330+
model.uri.toString(),
331+
);
332+
if (codeResult) {
333+
const monacoResult = codeResult.map(code2monaco.asCodeLens);
334+
for (let i = 0; i < monacoResult.length; i++) {
335+
codeLens.set(monacoResult[i], codeResult[i]);
336+
}
337+
return {
338+
lenses: monacoResult,
339+
dispose: () => { },
340+
};
341+
}
342+
},
343+
resolveCodeLens: async (model, moncaoResult) => {
344+
let codeResult = codeLens.get(moncaoResult);
345+
if (codeResult) {
346+
codeResult = await ls.doCodeLensResolve(codeResult);
347+
if (codeResult) {
348+
moncaoResult = code2monaco.asCodeLens(codeResult);
349+
codeLens.set(moncaoResult, codeResult);
350+
}
351+
}
352+
return moncaoResult;
353+
},
354+
}),
326355
monaco.languages.registerCompletionItemProvider(lang, {
327356
// https://github.com/johnsoncodehk/volar/blob/2f786182250d27e99cc3714fbfc7d209616e2289/packages/vue-language-server/src/registers/registerlanguageFeatures.ts#L57
328357
triggerCharacters: '!@#$%^&*()_+-=`~{}|[]\:";\'<>?,./ '.split(''),
@@ -334,9 +363,7 @@ export async function setupLs(modelsMap: Ref<Map<string, monaco.editor.ITextMode
334363
);
335364
const monacoResult = code2monaco.asCompletionList(codeResult);
336365
for (let i = 0; i < codeResult.items.length; i++) {
337-
const codeItem = codeResult.items[i];
338-
const monacoItem = monacoResult.suggestions[i];
339-
completionItems.set(monacoItem, codeItem);
366+
completionItems.set(monacoResult.suggestions[i], codeResult.items[i]);
340367
}
341368
return monacoResult;
342369
},

0 commit comments

Comments
 (0)