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) const classLists = await findClassListsInDocument(state, document)
classLists.forEach((classList) => { classLists.forEach((classList) => {
const classNames = Array.isArray(classList) const classNames = getClassNamesInClassList(classList)
? classList.flatMap(getClassNamesInClassList)
: getClassNamesInClassList(classList)
classNames.forEach((className, index) => { classNames.forEach((className, index) => {
if (state.jit) { if (state.jit) {

View File

@ -22,7 +22,7 @@ export async function getRecommendedVariantOrderDiagnostics(
let diagnostics: RecommendedVariantOrderDiagnostic[] = [] let diagnostics: RecommendedVariantOrderDiagnostic[] = []
const classLists = await findClassListsInDocument(state, document) const classLists = await findClassListsInDocument(state, document)
classLists.flat().forEach((classList) => { classLists.forEach((classList) => {
const classNames = getClassNamesInClassList(classList) const classNames = getClassNamesInClassList(classList)
classNames.forEach((className) => { classNames.forEach((className) => {
let { rules } = jit.generateRules(state, [className.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 if (settings.tailwindCSS.colorDecorators === false) return colors
let classLists = await findClassListsInDocument(state, document) let classLists = await findClassListsInDocument(state, document)
classLists.flat().forEach((classList) => { classLists.forEach((classList) => {
let classNames = getClassNamesInClassList(classList) let classNames = getClassNamesInClassList(classList)
classNames.forEach((className) => { classNames.forEach((className) => {
let color = getColor(state, className.className) let color = getColor(state, className.className)

View File

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