Revert "Improve conflict diagnostics (#503)" (#525)

This reverts commit ddfaea21cc.
master
Brad Cornes 2022-04-13 22:24:02 +01:00 committed by GitHub
parent 055b8909af
commit 183cc2f863
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 51 additions and 105 deletions

View File

@ -20,9 +20,7 @@ export async function getCssConflictDiagnostics(
const classLists = await findClassListsInDocument(state, document)
classLists.forEach((classList) => {
const classNames = Array.isArray(classList)
? classList.flatMap(getClassNamesInClassList)
: getClassNamesInClassList(classList)
const classNames = getClassNamesInClassList(classList)
classNames.forEach((className, index) => {
if (state.jit) {

View File

@ -22,7 +22,7 @@ export async function getRecommendedVariantOrderDiagnostics(
let diagnostics: RecommendedVariantOrderDiagnostic[] = []
const classLists = await findClassListsInDocument(state, document)
classLists.flat().forEach((classList) => {
classLists.forEach((classList) => {
const classNames = getClassNamesInClassList(classList)
classNames.forEach((className) => {
let { rules } = jit.generateRules(state, [className.className])

View File

@ -20,7 +20,7 @@ export async function getDocumentColors(
if (settings.tailwindCSS.colorDecorators === false) return colors
let classLists = await findClassListsInDocument(state, document)
classLists.flat().forEach((classList) => {
classLists.forEach((classList) => {
let classNames = getClassNamesInClassList(classList)
classNames.forEach((className) => {
let color = getColor(state, className.className)

View File

@ -77,15 +77,7 @@ export async function findClassNamesInRange(
includeCustom: boolean = true
): Promise<DocumentClassName[]> {
const classLists = await findClassListsInRange(state, doc, range, mode, includeCustom)
return flatten(
classLists.flatMap((classList) => {
if (Array.isArray(classList)) {
return classList.map(getClassNamesInClassList)
} else {
return [getClassNamesInClassList(classList)]
}
})
)
return flatten(classLists.map(getClassNamesInClassList))
}
export async function findClassNamesInDocument(
@ -93,15 +85,7 @@ export async function findClassNamesInDocument(
doc: TextDocument
): Promise<DocumentClassName[]> {
const classLists = await findClassListsInDocument(state, doc)
return flatten(
classLists.flatMap((classList) => {
if (Array.isArray(classList)) {
return classList.map(getClassNamesInClassList)
} else {
return [getClassNamesInClassList(classList)]
}
})
)
return flatten(classLists.map(getClassNamesInClassList))
}
export function findClassListsInCssRange(doc: TextDocument, range?: Range): DocumentClassList[] {
@ -198,7 +182,7 @@ export async function findClassListsInHtmlRange(
state: State,
doc: TextDocument,
range?: Range
): Promise<Array<DocumentClassList | DocumentClassList[]>> {
): Promise<DocumentClassList[]> {
const text = doc.getText(range)
const matches = matchClassAttributes(
@ -206,7 +190,7 @@ export async function findClassListsInHtmlRange(
(await state.editor.getConfiguration(doc.uri)).tailwindCSS.classAttributes
)
const result: Array<DocumentClassList | DocumentClassList[]> = []
const result: DocumentClassList[] = []
matches.forEach((match) => {
const subtext = text.substr(match.index + match[0].length - 1)
@ -217,11 +201,9 @@ export async function findClassListsInHtmlRange(
: getClassAttributeLexer()
lexer.reset(subtext)
let classLists: Array<{ value: string; offset: number } | { value: string; offset: number }[]> =
[]
let rootClassList: { value: string; offset: number }[] = []
let classLists: { value: string; offset: number }[] = []
let token: moo.Token
let currentClassList: { value: string; offset: number }
let depth = 0
try {
for (let token of lexer) {
@ -236,69 +218,26 @@ export async function findClassListsInHtmlRange(
}
} else {
if (currentClassList) {
if (depth === 0) {
rootClassList.push({
value: currentClassList.value,
offset: currentClassList.offset,
})
} else {
classLists.push({
value: currentClassList.value,
offset: currentClassList.offset,
})
}
}
currentClassList = undefined
}
if (token.type === 'lbrace') {
depth += 1
} else if (token.type === 'rbrace') {
depth -= 1
}
}
} catch (_) {}
if (currentClassList) {
if (depth === 0) {
rootClassList.push({
value: currentClassList.value,
offset: currentClassList.offset,
})
} else {
classLists.push({
value: currentClassList.value,
offset: currentClassList.offset,
})
}
}
classLists.push(rootClassList)
result.push(
...classLists
.map((classList) => {
if (Array.isArray(classList)) {
return classList
.map((classList) => resolveClassList(classList, text, match, range))
.filter((x) => x !== null)
} else {
return resolveClassList(classList, text, match, range)
}
})
.filter((x) => x !== null)
)
})
return result
}
function resolveClassList(
classList: { value: string; offset: number },
text: string,
match: RegExpMatchArray,
range?: Range
): DocumentClassList {
let { value, offset } = classList
.map(({ value, offset }) => {
if (value.trim() === '') {
return null
}
@ -308,7 +247,10 @@ function resolveClassList(
const after = value.match(/\s*$/)
const afterOffset = after === null ? 0 : -after[0].length
const start = indexToPosition(text, match.index + match[0].length - 1 + offset + beforeOffset)
const start = indexToPosition(
text,
match.index + match[0].length - 1 + offset + beforeOffset
)
const end = indexToPosition(
text,
match.index + match[0].length - 1 + offset + value.length + afterOffset
@ -327,6 +269,12 @@ function resolveClassList(
},
},
}
})
.filter((x) => x !== null)
)
})
return result
}
export async function findClassListsInRange(
@ -335,8 +283,8 @@ export async function findClassListsInRange(
range?: Range,
mode?: 'html' | 'css',
includeCustom: boolean = true
): Promise<Array<DocumentClassList | DocumentClassList[]>> {
let classLists: Array<DocumentClassList | DocumentClassList[]>
): Promise<DocumentClassList[]> {
let classLists: DocumentClassList[]
if (mode === 'css') {
classLists = findClassListsInCssRange(doc, range)
} else {
@ -348,7 +296,7 @@ export async function findClassListsInRange(
export async function findClassListsInDocument(
state: State,
doc: TextDocument
): Promise<Array<DocumentClassList | DocumentClassList[]>> {
): Promise<DocumentClassList[]> {
if (isCssDoc(state, doc)) {
return findClassListsInCssRange(doc)
}