diff --git a/packages/tailwindcss-language-server/src/providers/completionProvider.ts b/packages/tailwindcss-language-server/src/providers/completionProvider.ts index 472b99551cccd2a1cb78dc1e7e0fe53ec00a9dc8..0cb4c85122baf11e8eb8de130be7f01061f679ae 100644 --- a/packages/tailwindcss-language-server/src/providers/completionProvider.ts +++ b/packages/tailwindcss-language-server/src/providers/completionProvider.ts @@ -319,11 +319,36 @@ const parts = match.groups.partial.split(/\s*,\s*/) if (/\s+/.test(parts[parts.length - 1])) return null + // TODO: move this to tailwindcss-class-names? + let variants = dlv( + state.config, + ['variants'], + dlv(state.config, ['modules'], {}) + ) + if (!isObject(variants) && !Array.isArray(variants)) { + variants = [] + } + let enabledVariants: string[] + if (Array.isArray(variants)) { + enabledVariants = variants + } else { + const uniqueVariants: Set = new Set() + for (const mod in variants) { + if (!Array.isArray(variants[mod])) continue + variants[mod].forEach((v: string) => uniqueVariants.add(v)) + } + enabledVariants = [...uniqueVariants] + } + + enabledVariants = state.variants.filter( + (x) => enabledVariants.indexOf(x) !== -1 || x === 'default' + ) + const existingVariants = parts.slice(0, parts.length - 1) return { isIncomplete: false, - items: state.variants + items: enabledVariants .filter((v) => existingVariants.indexOf(v) === -1) .map((variant) => ({ // TODO: detail