Skip to content

Commit 743f10a

Browse files
committed
don't provide quick fix for @apply class name which has multiple rules
1 parent 6add64c commit 743f10a

File tree

1 file changed

+16
-13
lines changed
  • src/lsp/providers/codeActionProvider

1 file changed

+16
-13
lines changed

src/lsp/providers/codeActionProvider/index.ts

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -111,22 +111,18 @@ export async function provideCodeActions(
111111

112112
function classNameToAst(
113113
state: State,
114-
className: string,
115-
selector: string = `.${className}`,
114+
classNameParts: string[],
115+
selector: string,
116116
important: boolean = false
117117
) {
118-
const parts = getClassNameParts(state, className)
119-
if (!parts) {
120-
return null
121-
}
122118
const baseClassName = dlv(
123119
state.classNames.classNames,
124-
parts[parts.length - 1]
120+
classNameParts[classNameParts.length - 1]
125121
)
126122
if (!baseClassName) {
127123
return null
128124
}
129-
const info = dlv(state.classNames.classNames, parts)
125+
const info = dlv(state.classNames.classNames, classNameParts)
130126
let context = info.__context || []
131127
let pseudo = info.__pseudo || []
132128
const globalContexts = state.classNames.context
@@ -139,8 +135,8 @@ function classNameToAst(
139135
screens = Object.keys(screens)
140136
const path = []
141137

142-
for (let i = 0; i < parts.length - 1; i++) {
143-
let part = parts[i]
138+
for (let i = 0; i < classNameParts.length - 1; i++) {
139+
let part = classNameParts[i]
144140
let common = globalContexts[part]
145141
if (!common) return null
146142
if (screens.includes(part)) {
@@ -158,7 +154,7 @@ function classNameToAst(
158154
let rule = {
159155
// TODO: use proper selector parser
160156
[selector + pseudo.join('')]: {
161-
[`@apply ${parts[parts.length - 1]}${
157+
[`@apply ${classNameParts[classNameParts.length - 1]}${
162158
important ? ' !important' : ''
163159
}`]: '',
164160
},
@@ -221,6 +217,14 @@ async function provideInvalidApplyCodeActions(
221217
/\s+/
222218
).length
223219

220+
let className = diagnostic.className.className
221+
let classNameParts = getClassNameParts(state, className)
222+
let classNameInfo = dlv(state.classNames.classNames, classNameParts)
223+
224+
if (Array.isArray(classNameInfo)) {
225+
return []
226+
}
227+
224228
if (!isCssDoc(state, document)) {
225229
let languageBoundaries = getLanguageBoundaries(state, document)
226230
if (!languageBoundaries) return []
@@ -259,10 +263,9 @@ async function provideInvalidApplyCodeActions(
259263
return true
260264
}
261265

262-
let className = diagnostic.className.className
263266
let ast = classNameToAst(
264267
state,
265-
className,
268+
classNameParts,
266269
rule.selector,
267270
diagnostic.className.classList.important
268271
)

0 commit comments

Comments
 (0)