Skip to content

Commit 637f838

Browse files
authored
Use itemDefaults to reduce size of completion lists (#706)
* Use completion list `itemDefaults` * more defaults
1 parent 7235aea commit 637f838

File tree

5 files changed

+513
-415
lines changed

5 files changed

+513
-415
lines changed

packages/tailwindcss-language-server/src/server.ts

+17-11
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)