1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
diff --git a/packages/tailwindcss-language-service/src/completionProvider.ts b/packages/tailwindcss-language-service/src/completionProvider.ts
index 2ee4871784f9b4eecb646ed1ea86a5cc4d0ec8ee..d8bee18835f75d8e646c3d7742b7c0e79c6f047f 100644
--- a/packages/tailwindcss-language-service/src/completionProvider.ts
+++ b/packages/tailwindcss-language-service/src/completionProvider.ts
@@ -64,25 +64,43 @@ },
}
if (state.jit) {
+ let { variants: existingVariants, offset } = getVariantsFromClassName(state, partialClassName)
+
if (
context &&
(context.triggerKind === 1 ||
(context.triggerKind === 2 && context.triggerCharacter === '/')) &&
partialClassName.includes('/')
) {
- // opacity modifiers
+ // modifiers
+ let modifiers: string[]
let beforeSlash = partialClassName.split('/').slice(0, -1).join('/')
- let testClass = beforeSlash + '/[0]'
- let { rules } = jit.generateRules(state, [testClass])
- if (rules.length > 0) {
- let opacities = dlv(state.config, 'theme.opacity', {})
- if (!isObject(opacities)) {
- opacities = {}
+ let classListContainsModifiers = state.classList.some(
+ (cls) => Array.isArray(cls) && cls[1].modifiers
+ )
+
+ if (classListContainsModifiers) {
+ let baseClassName = beforeSlash.slice(offset)
+ modifiers = state.classList.find(
+ (cls) => Array.isArray(cls) && cls[0] === baseClassName
+ )?.[1].modifiers
+ } else {
+ let testClass = beforeSlash + '/[0]'
+ let { rules } = jit.generateRules(state, [testClass])
+ if (rules.length > 0) {
+ let opacities = dlv(state.config, 'theme.opacity', {})
+ if (!isObject(opacities)) {
+ opacities = {}
+ }
+ modifiers = Object.keys(opacities)
}
+ }
+
+ if (modifiers) {
return {
isIncomplete: false,
- items: Object.keys(opacities).map((opacity, index) => {
- let className = `${beforeSlash}/${opacity}`
+ items: modifiers.map((modifier, index) => {
+ let className = `${beforeSlash}/${modifier}`
let kind: CompletionItemKind = 21
let documentation: string = null
@@ -109,8 +127,6 @@ }),
}
}
}
-
- let { variants: existingVariants, offset } = getVariantsFromClassName(state, partialClassName)
replacementRange.start.character += offset
|