diff --git a/packages/tailwindcss-language-service/src/diagnostics/getInvalidTailwindDirectiveDiagnostics.ts b/packages/tailwindcss-language-service/src/diagnostics/getInvalidTailwindDirectiveDiagnostics.ts index 307c1f4766b9bddb95ef989e12fc43c6691c6a01..74e26f94fc326773188c26e959750033cd895519 100644 --- a/packages/tailwindcss-language-service/src/diagnostics/getInvalidTailwindDirectiveDiagnostics.ts +++ b/packages/tailwindcss-language-service/src/diagnostics/getInvalidTailwindDirectiveDiagnostics.ts @@ -8,7 +8,6 @@ import * as semver from '../util/semver' import { closest } from '../util/closest' import { absoluteRange } from '../util/absoluteRange' import { getTextWithoutComments } from '../util/doc' -import { isSemicolonlessCssLanguage } from '../util/languages' export function getInvalidTailwindDirectiveDiagnostics( state: State, @@ -29,8 +28,13 @@ if (!boundaries) return [] ranges.push(...boundaries.filter((b) => b.type === 'css').map(({ range }) => range)) } + let notSemicolonLanguages = ['sass', 'sugarss', 'stylus'] let regex: RegExp - if (isSemicolonlessCssLanguage(document.languageId, state.editor?.userLanguages)) { + if ( + notSemicolonLanguages.includes(document.languageId) || + (state.editor && + notSemicolonLanguages.includes(state.editor.userLanguages[document.languageId])) + ) { regex = /(?:\s|^)@tailwind\s+(?[^\r\n]+)/g } else { regex = /(?:\s|^)@tailwind\s+(?[^;]+)/g diff --git a/packages/tailwindcss-language-service/src/util/find.ts b/packages/tailwindcss-language-service/src/util/find.ts index 7d67cb850b24bf10ab0057c543fc3b129b305f38..50a7d8f7a93d6a150559c77bf00025ad6948b1ce 100644 --- a/packages/tailwindcss-language-service/src/util/find.ts +++ b/packages/tailwindcss-language-service/src/util/find.ts @@ -11,7 +11,6 @@ import { getLanguageBoundaries } from './getLanguageBoundaries' import { resolveRange } from './resolveRange' import Regex from 'becke-ch--regex--s0-0-v1--base--pl--lib' import { getTextWithoutComments } from './doc' -import { isSemicolonlessCssLanguage } from './languages' export function findAll(re: RegExp, str: string): RegExpMatchArray[] { let match: RegExpMatchArray @@ -92,16 +91,12 @@ classLists.map((classList) => getClassNamesInClassList(classList, state.blocklist)) ) } -export function findClassListsInCssRange( - state: State, - doc: TextDocument, - range?: Range -): DocumentClassList[] { +export function findClassListsInCssRange(doc: TextDocument, range?: Range): DocumentClassList[] { const text = getTextWithoutComments(doc, 'css', range) - let regex = isSemicolonlessCssLanguage(doc.languageId, state.editor?.userLanguages) - ? /(@apply\s+)(?[^}\r\n]+?)(?\s*!important)?(?:\r|\n|}|$)/g - : /(@apply\s+)(?[^;}]+?)(?\s*!important)?\s*[;}]/g - const matches = findAll(regex, text) + const matches = findAll( + /(@apply\s+)(?[^;}]+?)(?\s*!important)?\s*[;}]/g, + text + ) const globalStart: Position = range ? range.start : { line: 0, character: 0 } return matches.map((match) => { @@ -297,7 +292,7 @@ includeCustom: boolean = true ): Promise { let classLists: DocumentClassList[] if (mode === 'css') { - classLists = findClassListsInCssRange(state, doc, range) + classLists = findClassListsInCssRange(doc, range) } else { classLists = await findClassListsInHtmlRange(state, doc, mode, range) } @@ -312,7 +307,7 @@ state: State, doc: TextDocument ): Promise { if (isCssDoc(state, doc)) { - return findClassListsInCssRange(state, doc) + return findClassListsInCssRange(doc) } let boundaries = getLanguageBoundaries(state, doc) @@ -329,7 +324,7 @@ ) )), ...boundaries .filter((b) => b.type === 'css') - .map(({ range }) => findClassListsInCssRange(state, doc, range)), + .map(({ range }) => findClassListsInCssRange(doc, range)), await findCustomClassLists(state, doc), ]) ) diff --git a/packages/tailwindcss-language-service/src/util/languages.ts b/packages/tailwindcss-language-service/src/util/languages.ts index 565f7e1a63eefc242b18f3db35b41e7f67a24a89..7548cf0b9de127902cac7b7f7f1091731722cc8c 100644 --- a/packages/tailwindcss-language-service/src/util/languages.ts +++ b/packages/tailwindcss-language-service/src/util/languages.ts @@ -1,5 +1,3 @@ -import type { EditorState } from './state' - export const htmlLanguages = [ 'aspnetcorerazor', 'astro', @@ -59,15 +57,3 @@ export const specialLanguages = ['vue', 'svelte'] export const languages = [...cssLanguages, ...htmlLanguages, ...jsLanguages, ...specialLanguages] - -const semicolonlessLanguages = ['sass', 'sugarss', 'stylus'] - -export function isSemicolonlessCssLanguage( - languageId: string, - userLanguages: EditorState['userLanguages'] = {} -) { - return ( - semicolonlessLanguages.includes(languageId) || - semicolonlessLanguages.includes(userLanguages[languageId]) - ) -}