@@ -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