@@ -378,8 +378,21 @@ async function createProjectService(
378378 const disposables : Array < Disposable | Promise < Disposable > > = [ ]
379379 let documentSelector = projectConfig . documentSelector
380380
381+ let itemDefaults =
382+ params . capabilities . textDocument ?. completion ?. completionList ?. itemDefaults ?? [ ]
383+
384+ // VS Code _does_ support `itemDefaults.data` since at least 1.67.0 (this extension's min version)
385+ // but it doesn't advertise it in its capabilities. So we manually add it here.
386+ // See also: https://github.com/microsoft/vscode-languageserver-node/issues/1181
387+ if ( params . clientInfo ?. name === 'Visual Studio Code' && ! itemDefaults . includes ( 'data' ) ) {
388+ itemDefaults . push ( 'data' )
389+ }
390+
381391 let state : State = {
382392 enabled : false ,
393+ completionItemData : {
394+ _projectKey : projectKey ,
395+ } ,
383396 editor : {
384397 connection,
385398 folder,
@@ -390,6 +403,7 @@ async function createProjectService(
390403 capabilities : {
391404 configuration : true ,
392405 diagnosticRelatedInformation : true ,
406+ itemDefaults,
393407 } ,
394408 documents : documentService . documents ,
395409 getConfiguration,
@@ -1114,21 +1128,13 @@ async function createProjectService(
11141128 let settings = await state . editor . getConfiguration ( document . uri )
11151129 if ( ! settings . tailwindCSS . suggestions ) return null
11161130 if ( await isExcluded ( state , document ) ) return null
1117- let result = await doComplete ( state , document , params . position , params . context )
1118- if ( ! result ) return result
1119- return {
1120- isIncomplete : result . isIncomplete ,
1121- items : result . items . map ( ( item ) => ( {
1122- ...item ,
1123- data : { projectKey, originalData : item . data } ,
1124- } ) ) ,
1125- }
1131+ return doComplete ( state , document , params . position , params . context )
11261132 } , null )
11271133 } ,
11281134 onCompletionResolve ( item : CompletionItem ) : Promise < CompletionItem > {
11291135 return withFallback ( ( ) => {
11301136 if ( ! state . enabled ) return null
1131- return resolveCompletionItem ( state , { ... item , data : item . data ?. originalData } )
1137+ return resolveCompletionItem ( state , item )
11321138 } , null )
11331139 } ,
11341140 async onCodeAction ( params : CodeActionParams ) : Promise < CodeAction [ ] > {
@@ -2162,7 +2168,7 @@ class TW {
21622168 }
21632169
21642170 async onCompletionResolve ( item : CompletionItem ) : Promise < CompletionItem > {
2165- return this . projects . get ( item . data . projectKey ) ?. onCompletionResolve ( item ) ?? null
2171+ return this . projects . get ( item . data ?. _projectKey ) ?. onCompletionResolve ( item ) ?? null
21662172 }
21672173
21682174 onCodeAction ( params : CodeActionParams ) : Promise < CodeAction [ ] > {
0 commit comments