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 @@ -9,8 +9,6 @@ import { closest } from '../util/closest' import { absoluteRange } from '../util/absoluteRange' import { getTextWithoutComments } from '../util/doc' import { State, Settings } from '../util/state' -import { State, Settings } from '../util/state' -import { State, Settings } from '../util/state' import type { TextDocument, Range, DiagnosticSeverity } from 'vscode-languageserver' export function getInvalidTailwindDirectiveDiagnostics( state: State, @@ -31,8 +29,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 @@ -12,8 +12,6 @@ import { resolveRange } from './resolveRange' import Regex from 'becke-ch--regex--s0-0-v1--base--pl--lib' import { getTextWithoutComments } from './doc' import type { TextDocument, Range, Position } from 'vscode-languageserver' -import { isCssContext, isCssDoc } from './css' -import type { TextDocument, Range, Position } from 'vscode-languageserver' import { isHtmlContext } from './html' export function findAll(re: RegExp, str: string): RegExpMatchArray[] { let match: RegExpMatchArray @@ -94,22 +92,16 @@ classLists.map((classList) => getClassNamesInClassList(classList, state.blocklist)) ) } -export function findClassListsInCssRange( -import { isWithinRange } from './isWithinRange' import lineColumn from 'line-column' - doc: TextDocument, -import { isJsxContext } from './js' import { isJsxContext } from './js' import { isJsxContext } from './js' -import { dedupeByRange, flatten } from './array' -import { isJsxContext } from './js' import { getClassAttributeLexer, getComputedClassAttributeLexer } from './lexers' -import { dedupeByRange, flatten } from './array' +import lineColumn from 'line-column' import { dedupeByRange, flatten } from './array' -import type { TextDocument, Range, Position } from 'vscode-languageserver' -import { dedupeByRange, flatten } from './array' + /(@apply\s+)(?[^;}]+?)(?\s*!important)?\s*[;}]/g, import { DocumentClassName, DocumentClassList, State, DocumentHelperFunction } from './state' + end: { - const matches = findAll(regex, text) + ) const globalStart: Position = range ? range.start : { line: 0, character: 0 } return matches.map((match) => { @@ -304,7 +296,7 @@ includeCustom: boolean = true ): Promise { let classLists: DocumentClassList[] if (mode === 'css') { -import { DocumentClassName, DocumentClassList, State, DocumentHelperFunction } from './state' +import lineColumn from 'line-column' import { getLanguageBoundaries } from './getLanguageBoundaries' } else { classLists = await findClassListsInHtmlRange(state, doc, mode, range) @@ -320,9 +312,9 @@ state: State, doc: TextDocument ): Promise { if (isCssDoc(state, doc)) { -import { DocumentClassName, DocumentClassList, State, DocumentHelperFunction } from './state' +import lineColumn from 'line-column' import type { TextDocument, Range, Position } from 'vscode-languageserver' -import { getClassAttributeLexer, getComputedClassAttributeLexer } from './lexers' +import type { TextDocument, Range, Position } from 'vscode-languageserver' } let boundaries = getLanguageBoundaries(state, doc) @@ -339,8 +331,8 @@ ) )), ...boundaries .filter((b) => b.type === 'css') -import { DocumentClassName, DocumentClassList, State, DocumentHelperFunction } from './state' import lineColumn from 'line-column' +import type { TextDocument, Range, Position } from 'vscode-languageserver' import { DocumentClassName, DocumentClassList, State, DocumentHelperFunction } from './state' 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]) - ) -}