From 449e63c65c8d820c7bd0bbd9bd0b3f4eed79206c Mon Sep 17 00:00:00 2001 From: Brad Cornes Date: Thu, 26 Jan 2023 11:00:40 +0000 Subject: [PATCH 1/2] Update `context.getClassList` usage --- .../tailwindcss-language-server/src/server.ts | 20 +++++++++++-------- .../src/completionProvider.ts | 7 ++----- .../src/util/state.ts | 1 + 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/packages/tailwindcss-language-server/src/server.ts b/packages/tailwindcss-language-server/src/server.ts index 99bb9894..9781c4b8 100644 --- a/packages/tailwindcss-language-server/src/server.ts +++ b/packages/tailwindcss-language-server/src/server.ts @@ -989,15 +989,19 @@ async function createProjectService( state.jitContext = state.modules.jit.createContext.module(state) state.jitContext.tailwindConfig.separator = state.config.separator if (state.jitContext.getClassList) { - state.classList = state.jitContext - .getClassList() + let classList = state.jitContext + .getClassList({ includeMetadata: true }) .filter((className) => className !== '*') - .map((className) => { - if (Array.isArray(className)) { - return [className[0], { color: getColor(state, className[0]), ...className[1] }] - } - return [className, { color: getColor(state, className) }] - }) + state.classListContainsMetadata = classList.some((cls) => Array.isArray(cls)) + state.classList = classList.map((className) => { + if (Array.isArray(className)) { + return [ + className[0], + { color: getColor(state, className[0]), ...(className[1] ?? []) }, + ] + } + return [className, { color: getColor(state, className) }] + }) } } else { delete state.jitContext diff --git a/packages/tailwindcss-language-service/src/completionProvider.ts b/packages/tailwindcss-language-service/src/completionProvider.ts index 63a5edf3..ce0bf739 100644 --- a/packages/tailwindcss-language-service/src/completionProvider.ts +++ b/packages/tailwindcss-language-service/src/completionProvider.ts @@ -75,15 +75,12 @@ export function completionsFromClassList( // modifiers let modifiers: string[] let beforeSlash = partialClassName.split('/').slice(0, -1).join('/') - let classListContainsModifiers = state.classList.some( - (cls) => Array.isArray(cls) && cls[1].modifiers - ) - if (classListContainsModifiers) { + if (state.classListContainsMetadata) { let baseClassName = beforeSlash.slice(offset) modifiers = state.classList.find( (cls) => Array.isArray(cls) && cls[0] === baseClassName - )?.[1].modifiers + )?.[1]?.modifiers } else { let testClass = beforeSlash + '/[0]' let { rules } = jit.generateRules(state, [testClass]) diff --git a/packages/tailwindcss-language-service/src/util/state.ts b/packages/tailwindcss-language-service/src/util/state.ts index 3787bdcf..70237604 100644 --- a/packages/tailwindcss-language-service/src/util/state.ts +++ b/packages/tailwindcss-language-service/src/util/state.ts @@ -117,6 +117,7 @@ export interface State { jit?: boolean jitContext?: any classList?: Array<[string, { color: culori.Color | KeywordColor | null; modifiers?: string[] }]> + classListContainsMetadata?: boolean pluginVersions?: string // postcssPlugins?: { before: any[]; after: any[] } } From 158f29d7e8a7a831b791c4a1f84cd6439eb34795 Mon Sep 17 00:00:00 2001 From: Brad Cornes Date: Fri, 27 Jan 2023 10:32:57 +0000 Subject: [PATCH 2/2] fix default metadata --- packages/tailwindcss-language-server/src/server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/tailwindcss-language-server/src/server.ts b/packages/tailwindcss-language-server/src/server.ts index 9781c4b8..42047112 100644 --- a/packages/tailwindcss-language-server/src/server.ts +++ b/packages/tailwindcss-language-server/src/server.ts @@ -997,7 +997,7 @@ async function createProjectService( if (Array.isArray(className)) { return [ className[0], - { color: getColor(state, className[0]), ...(className[1] ?? []) }, + { color: getColor(state, className[0]), ...(className[1] ?? {}) }, ] } return [className, { color: getColor(state, className) }]