Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ import type { State, Settings } from '../util/state'
import { type SuggestCanonicalClassesDiagnostic, DiagnosticKind } from './types'
import { findClassListsInDocument, getClassNamesInClassList } from '../util/find'

export async function getSuggestCanonicalClassesDiagnostics(
export function getSuggestCanonicalClassesDiagnostics(
state: State,
document: TextDocument,
settings: Settings,
): Promise<SuggestCanonicalClassesDiagnostic[]> {
): SuggestCanonicalClassesDiagnostic[] {
if (!state.v4) return []
if (!state.designSystem.canonicalizeCandidates) return []

Expand All @@ -16,7 +16,7 @@ export async function getSuggestCanonicalClassesDiagnostics(

let diagnostics: SuggestCanonicalClassesDiagnostic[] = []

let classLists = await findClassListsInDocument(state, document)
let classLists = findClassListsInDocument(state, document, settings)

for (let classList of classLists) {
let classNames = getClassNamesInClassList(classList, [])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,10 @@ export async function doValidate(
return settings.tailwindCSS.validate
? [
...(only.includes(DiagnosticKind.CssConflict)
? await getCssConflictDiagnostics(state, document, settings)
? getCssConflictDiagnostics(state, document, settings)
: []),
...(only.includes(DiagnosticKind.InvalidApply)
? await getInvalidApplyDiagnostics(state, document, settings)
? getInvalidApplyDiagnostics(state, document, settings)
: []),
...(only.includes(DiagnosticKind.InvalidScreen)
? getInvalidScreenDiagnostics(state, document, settings)
Expand All @@ -54,13 +54,13 @@ export async function doValidate(
? getInvalidSourceDiagnostics(state, document, settings)
: []),
...(only.includes(DiagnosticKind.RecommendedVariantOrder)
? await getRecommendedVariantOrderDiagnostics(state, document, settings)
? getRecommendedVariantOrderDiagnostics(state, document, settings)
: []),
...(only.includes(DiagnosticKind.UsedBlocklistedClass)
? await getUsedBlocklistedClassDiagnostics(state, document, settings)
? getUsedBlocklistedClassDiagnostics(state, document, settings)
: []),
...(only.includes(DiagnosticKind.SuggestCanonicalClasses)
? await getSuggestCanonicalClassesDiagnostics(state, document, settings)
? getSuggestCanonicalClassesDiagnostics(state, document, settings)
: []),
]
: []
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,16 +41,16 @@ function getRuleProperties(rule: Rule): string[] {
return properties
}

export async function getCssConflictDiagnostics(
export function getCssConflictDiagnostics(
state: State,
document: TextDocument,
settings: Settings,
): Promise<CssConflictDiagnostic[]> {
): CssConflictDiagnostic[] {
let severity = settings.tailwindCSS.lint.cssConflict
if (severity === 'ignore') return []

let diagnostics: CssConflictDiagnostic[] = []
const classLists = await findClassListsInDocument(state, document)
const classLists = findClassListsInDocument(state, document, settings)

classLists.forEach((classList) => {
const classNames = getClassNamesInClassList(classList, state.blocklist)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,23 @@
import type { TextDocument } from 'vscode-languageserver-textdocument'
import { findClassNamesInRange } from '../util/find'
import { findClassListsInDocument, getClassNamesInClassList } from '../util/find'
import { type InvalidApplyDiagnostic, DiagnosticKind } from './types'
import type { Settings, State } from '../util/state'
import { validateApply } from '../util/validateApply'
import { isCssDoc } from '../util/css'

export async function getInvalidApplyDiagnostics(
export function getInvalidApplyDiagnostics(
state: State,
document: TextDocument,
settings: Settings,
): Promise<InvalidApplyDiagnostic[]> {
): InvalidApplyDiagnostic[] {
let severity = settings.tailwindCSS.lint.invalidApply
if (severity === 'ignore') return []
if (!isCssDoc(state, document)) return []

const classNames = await findClassNamesInRange(state, document, undefined, 'css', false)
const classLists = findClassListsInDocument(state, document, settings)
const classNames = classLists.flatMap((classList) =>
getClassNamesInClassList(classList, state.blocklist),
)

let diagnostics: InvalidApplyDiagnostic[] = classNames.map((className) => {
let result = validateApply(state, className.className)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ import { getVariantsFromClassName } from '../util/getVariantsFromClassName'
import { equalExact } from '../util/array'
import * as semver from '../util/semver'

export async function getRecommendedVariantOrderDiagnostics(
export function getRecommendedVariantOrderDiagnostics(
state: State,
document: TextDocument,
settings: Settings,
): Promise<RecommendedVariantOrderDiagnostic[]> {
): RecommendedVariantOrderDiagnostic[] {
if (state.v4) return []
if (!state.jit) return []

Expand All @@ -21,7 +21,7 @@ export async function getRecommendedVariantOrderDiagnostics(
if (severity === 'ignore') return []

let diagnostics: RecommendedVariantOrderDiagnostic[] = []
const classLists = await findClassListsInDocument(state, document)
const classLists = findClassListsInDocument(state, document, settings)

classLists.forEach((classList) => {
const classNames = getClassNamesInClassList(classList, state.blocklist)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ import type { State, Settings } from '../util/state'
import { type UsedBlocklistedClassDiagnostic, DiagnosticKind } from './types'
import { findClassListsInDocument, getClassNamesInClassList } from '../util/find'

export async function getUsedBlocklistedClassDiagnostics(
export function getUsedBlocklistedClassDiagnostics(
state: State,
document: TextDocument,
settings: Settings,
): Promise<UsedBlocklistedClassDiagnostic[]> {
): UsedBlocklistedClassDiagnostic[] {
if (!state.v4) return []
if (!state.blocklist?.length) return []

Expand All @@ -17,7 +17,7 @@ export async function getUsedBlocklistedClassDiagnostics(
let blocklist = new Set(state.blocklist ?? [])
let diagnostics: UsedBlocklistedClassDiagnostic[] = []

let classLists = await findClassListsInDocument(state, document)
let classLists = findClassListsInDocument(state, document, settings)

for (let classList of classLists) {
let classNames = getClassNamesInClassList(classList, [])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export async function getDocumentColors(
let settings = await state.editor.getConfiguration(document.uri)
if (settings.tailwindCSS.colorDecorators === false) return colors

let classLists = await findClassListsInDocument(state, document)
let classLists = findClassListsInDocument(state, document, settings)
classLists.forEach((classList) => {
let classNames = getClassNamesInClassList(classList, state.blocklist)
classNames.forEach((className) => {
Expand Down
14 changes: 5 additions & 9 deletions packages/tailwindcss-language-service/src/hoverProvider.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import type { State } from './util/state'
import type { Settings, State } from './util/state'
import type { Hover, MarkupContent, Position, Range } from 'vscode-languageserver'
import { stringifyCss, stringifyConfigValue } from './util/stringify'
import dlv from 'dlv'
import { isCssContext } from './util/css'
import {
findAll,
findClassNameAtPosition,
findHelperFunctionsInRange,
findHelperFunctionsInDocument,
indexToPosition,
} from './util/find'
import { validateApply } from './util/validateApply'
Expand Down Expand Up @@ -46,10 +46,7 @@ async function provideCssHelperHover(

const settings = await state.editor.getConfiguration(document.uri)

let helperFns = findHelperFunctionsInRange(document, {
start: { line: position.line, character: 0 },
end: { line: position.line + 1, character: 0 },
})
let helperFns = findHelperFunctionsInDocument(state, document)

for (let helperFn of helperFns) {
if (!isWithinRange(position, helperFn.ranges.path)) continue
Expand Down Expand Up @@ -97,7 +94,8 @@ async function provideClassNameHover(
document: TextDocument,
position: Position,
): Promise<Hover> {
let className = await findClassNameAtPosition(state, document, position)
let settings = await state.editor.getConfiguration(document.uri)
let className = findClassNameAtPosition(state, document, settings, position)
if (className === null) return null

if (state.v4) {
Expand Down Expand Up @@ -139,8 +137,6 @@ async function provideClassNameHover(
}
}

const settings = await state.editor.getConfiguration(document.uri)

const css = stringifyCss(
className.className,
dlv(state.classNames.classNames, [...parts, '__info']),
Expand Down
8 changes: 4 additions & 4 deletions packages/tailwindcss-language-service/src/util/doc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,19 @@ import { spliceChangesIntoString, StringChange } from './splice-changes-into-str

export function getTextWithoutComments(
doc: TextDocument,
type: 'html' | 'js' | 'jsx' | 'css',
type: 'html' | 'js' | 'css',
range?: Range,
): string
export function getTextWithoutComments(text: string, type: 'html' | 'js' | 'jsx' | 'css'): string
export function getTextWithoutComments(text: string, type: 'html' | 'js' | 'css'): string

export function getTextWithoutComments(
docOrText: TextDocument | string,
type: 'html' | 'js' | 'jsx' | 'css',
type: 'html' | 'js' | 'css',
range?: Range,
): string {
let text = typeof docOrText === 'string' ? docOrText : docOrText.getText(range)

if (type === 'js' || type === 'jsx') {
if (type === 'js') {
return getJsWithoutComments(text)
}

Expand Down
Loading