Skip to content

Commit db61c88

Browse files
authored
Exclude classes in blocklist from IntelliSense (#746)
1 parent 7978a2e commit db61c88

File tree

7 files changed

+29
-15
lines changed

7 files changed

+29
-15
lines changed

packages/tailwindcss-language-server/src/server.ts

+2
Original file line numberDiff line numberDiff line change
@@ -1016,6 +1016,8 @@ async function createProjectService(
10161016
try {
10171017
state.config = resolveConfig.module(originalConfig)
10181018
state.separator = state.config.separator
1019+
state.blocklist = Array.isArray(state.config.blocklist) ? state.config.blocklist : []
1020+
delete state.config.blocklist
10191021

10201022
if (state.jit) {
10211023
state.jitContext = state.modules.jit.createContext.module(state)

packages/tailwindcss-language-service/src/completionProvider.ts

+12-4
Original file line numberDiff line numberDiff line change
@@ -242,21 +242,29 @@ export function completionsFromClassList(
242242
{
243243
isIncomplete: false,
244244
items: items.concat(
245-
state.classList.map(([className, { color }], index) => {
245+
state.classList.reduce<CompletionItem[]>((items, [className, { color }], index) => {
246+
if (
247+
state.blocklist?.includes([...existingVariants, className].join(state.separator))
248+
) {
249+
return items
250+
}
251+
246252
let kind: CompletionItemKind = color ? 16 : 21
247253
let documentation: string | undefined
248254

249255
if (color && typeof color !== 'string') {
250256
documentation = culori.formatRgb(color)
251257
}
252258

253-
return {
259+
items.push({
254260
label: className,
255261
kind,
256262
...(documentation ? { documentation } : {}),
257263
sortText: naturalExpand(index, state.classList.length),
258-
} as CompletionItem
259-
})
264+
})
265+
266+
return items
267+
}, [] as CompletionItem[])
260268
),
261269
},
262270
{

packages/tailwindcss-language-service/src/diagnostics/getCssConflictDiagnostics.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export async function getCssConflictDiagnostics(
2020
const classLists = await findClassListsInDocument(state, document)
2121

2222
classLists.forEach((classList) => {
23-
const classNames = getClassNamesInClassList(classList)
23+
const classNames = getClassNamesInClassList(classList, state.blocklist)
2424

2525
classNames.forEach((className, index) => {
2626
if (state.jit) {

packages/tailwindcss-language-service/src/diagnostics/getRecommendedVariantOrderDiagnostics.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export async function getRecommendedVariantOrderDiagnostics(
2323
const classLists = await findClassListsInDocument(state, document)
2424

2525
classLists.forEach((classList) => {
26-
const classNames = getClassNamesInClassList(classList)
26+
const classNames = getClassNamesInClassList(classList, state.blocklist)
2727
classNames.forEach((className) => {
2828
let { rules } = jit.generateRules(state, [className.className])
2929
if (rules.length === 0) {

packages/tailwindcss-language-service/src/documentColorProvider.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export async function getDocumentColors(
2222

2323
let classLists = await findClassListsInDocument(state, document)
2424
classLists.forEach((classList) => {
25-
let classNames = getClassNamesInClassList(classList)
25+
let classNames = getClassNamesInClassList(classList, state.blocklist)
2626
classNames.forEach((className) => {
2727
let color = getColor(state, className.className)
2828
if (color === null || typeof color === 'string' || (color.alpha ?? 1) === 0) {

packages/tailwindcss-language-service/src/util/find.ts

+11-8
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,15 @@ export function findLast(re: RegExp, str: string): RegExpMatchArray {
2929
return matches[matches.length - 1]
3030
}
3131

32-
export function getClassNamesInClassList({
33-
classList,
34-
range,
35-
important,
36-
}: DocumentClassList): DocumentClassName[] {
32+
export function getClassNamesInClassList(
33+
{ classList, range, important }: DocumentClassList,
34+
blocklist: State['blocklist']
35+
): DocumentClassName[] {
3736
const parts = classList.split(/(\s+)/)
3837
const names: DocumentClassName[] = []
3938
let index = 0
4039
for (let i = 0; i < parts.length; i++) {
41-
if (i % 2 === 0) {
40+
if (i % 2 === 0 && !blocklist.includes(parts[i])) {
4241
const start = indexToPosition(classList, index)
4342
const end = indexToPosition(classList, index + parts[i].length)
4443
names.push({
@@ -77,15 +76,19 @@ export async function findClassNamesInRange(
7776
includeCustom: boolean = true
7877
): Promise<DocumentClassName[]> {
7978
const classLists = await findClassListsInRange(state, doc, range, mode, includeCustom)
80-
return flatten(classLists.map(getClassNamesInClassList))
79+
return flatten(
80+
classLists.map((classList) => getClassNamesInClassList(classList, state.blocklist))
81+
)
8182
}
8283

8384
export async function findClassNamesInDocument(
8485
state: State,
8586
doc: TextDocument
8687
): Promise<DocumentClassName[]> {
8788
const classLists = await findClassListsInDocument(state, doc)
88-
return flatten(classLists.map(getClassNamesInClassList))
89+
return flatten(
90+
classLists.map((classList) => getClassNamesInClassList(classList, state.blocklist))
91+
)
8992
}
9093

9194
export function findClassListsInCssRange(doc: TextDocument, range?: Range): DocumentClassList[] {

packages/tailwindcss-language-service/src/util/state.ts

+1
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ export interface State {
9999
screens?: string[]
100100
variants?: Variant[]
101101
corePlugins?: string[]
102+
blocklist?: unknown[]
102103
modules?: {
103104
tailwindcss?: { version: string; module: any }
104105
postcss?: { version: string; module: Postcss }

0 commit comments

Comments
 (0)