diff --git a/src/lsp/providers/codeActionProvider/index.ts b/src/lsp/providers/codeActionProvider/index.ts index 22298dad00a8abe4bea08c7a41651849e6c5e6dd..62bdb128c3e49cf2cd5895a14dff8cfa7064aef1 100644 --- a/src/lsp/providers/codeActionProvider/index.ts +++ b/src/lsp/providers/codeActionProvider/index.ts @@ -111,18 +111,22 @@ } function classNameToAst( state: State, - classNameParts: string[], - selector: string, + className: string, + selector: string = `.${className}`, important: boolean = false ) { + const parts = getClassNameParts(state, className) + if (!parts) { + return null + } const baseClassName = dlv( state.classNames.classNames, - classNameParts[classNameParts.length - 1] + parts[parts.length - 1] ) if (!baseClassName) { return null } - const info = dlv(state.classNames.classNames, classNameParts) + const info = dlv(state.classNames.classNames, parts) let context = info.__context || [] let pseudo = info.__pseudo || [] const globalContexts = state.classNames.context @@ -135,8 +139,8 @@ if (!isObject(screens)) screens = {} screens = Object.keys(screens) const path = [] - for (let i = 0; i < classNameParts.length - 1; i++) { - let part = classNameParts[i] + for (let i = 0; i < parts.length - 1; i++) { + let part = parts[i] let common = globalContexts[part] if (!common) return null if (screens.includes(part)) { @@ -154,7 +158,7 @@ } let rule = { // TODO: use proper selector parser [selector + pseudo.join('')]: { - [`@apply ${classNameParts[classNameParts.length - 1]}${ + [`@apply ${parts[parts.length - 1]}${ important ? ' !important' : '' }`]: '', }, @@ -217,14 +221,6 @@ let totalClassNamesInClassList = diagnostic.className.classList.classList.split( /\s+/ ).length - let className = diagnostic.className.className - let classNameParts = getClassNameParts(state, className) - let classNameInfo = dlv(state.classNames.classNames, classNameParts) - - if (Array.isArray(classNameInfo)) { - return [] - } - if (!isCssDoc(state, document)) { let languageBoundaries = getLanguageBoundaries(state, document) if (!languageBoundaries) return [] @@ -263,9 +259,10 @@ // keep looking return true } + let className = diagnostic.className.className let ast = classNameToAst( state, - classNameParts, + className, rule.selector, diagnostic.className.classList.important )