@@ -191,12 +191,14 @@ export async function setupLs(modelsMap: Ref<Map<string, monaco.editor.ITextMode
191
191
const ls = createLanguageService ( { typescript : ts } , host , undefined , undefined , undefined , [ ] ) ;
192
192
disposables . value . push ( ls ) ;
193
193
194
+ const completionItems = new WeakMap < monaco . languages . CompletionItem , vscode . CompletionItem > ( ) ;
195
+
194
196
disposables . value . push (
195
197
monaco . languages . registerCompletionItemProvider ( lang , {
196
198
// https://github.com/johnsoncodehk/volar/blob/2f786182250d27e99cc3714fbfc7d209616e2289/packages/vue-language-server/src/registers/registerlanguageFeatures.ts#L57
197
199
triggerCharacters : '!@#$%^&*()_+-=`~{}|[]\:";\'<>?,./ ' . split ( '' ) ,
198
200
provideCompletionItems : async ( model , position , context ) => {
199
- const result = await ls . doComplete (
201
+ const codeResult = await ls . doComplete (
200
202
model . uri . fsPath ,
201
203
{
202
204
line : position . lineNumber - 1 ,
@@ -207,7 +209,22 @@ export async function setupLs(modelsMap: Ref<Map<string, monaco.editor.ITextMode
207
209
triggerCharacter : context . triggerCharacter ,
208
210
} ,
209
211
) ;
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 ;
211
228
} ,
212
229
} ) ,
213
230
) ;
0 commit comments