in src/language/providers/closeUtils.ts [291:394]
export function getItemsForLineLT2(
document: vscode.TextDocument,
triggerText: string,
triggerLine: number,
nsPrefix: string,
items: string[],
i: number
) {
let [currentText, currentLine] = [triggerText, triggerLine]
let [lineBefore, lineAfter, testLine] = [
triggerLine,
triggerLine,
triggerLine,
]
let openTagArray: number[] = []
let closeTagArray: number[] = []
nsPrefix = getItemPrefix(items[i], nsPrefix)
while (
currentText.indexOf('<' + nsPrefix + items[i]) === -1 &&
currentLine > -1
) {
--currentLine
if (currentLine > -1) {
currentText = document.lineAt(currentLine).text
}
if (getItemsOnLineCount(currentText) > 1) {
--currentLine
}
}
if (currentText.indexOf('<' + nsPrefix + items[i]) > -1) {
while (lineBefore > -1) {
currentText = document.lineAt(lineBefore).text
if (getItemsOnLineCount(currentText) < 2) {
if (currentText.indexOf('<' + nsPrefix + items[i]) > -1) {
openTagArray.push(lineBefore)
//if multi line tag
let testText = currentText
if (!testText.includes('>')) {
testLine = lineBefore
while (!testText.includes('>')) {
testText = document.lineAt(++testLine).text
}
}
//if selfclosing remove from the array
if (
testText.indexOf('/>') > -1 ||
testText.includes('xml version') ||
currentText.indexOf('</' + nsPrefix + items[i]) > -1
) {
openTagArray.splice(openTagArray.length - 1, 1)
}
}
if (currentText.indexOf('</' + nsPrefix + items[i]) > -1) {
closeTagArray.push(lineBefore)
}
}
--lineBefore
}
++lineAfter
while (lineAfter < document.lineCount) {
currentText = document.lineAt(lineAfter).text
if (getItemsOnLineCount(currentText) < 2) {
if (currentText.indexOf('<' + nsPrefix + items[i]) > -1) {
openTagArray.push(lineAfter)
//if multi line tag
while (!currentText.includes('>')) {
currentText = document.lineAt(++lineAfter).text
}
//if selfclosing remove from the array
if (currentText.indexOf('/>') > -1) {
openTagArray.splice(openTagArray.length - 1, 1)
}
}
if (currentText.indexOf('</' + nsPrefix + items[i]) > -1) {
closeTagArray.push(lineAfter)
}
}
++lineAfter
}
if (openTagArray.length > closeTagArray.length) {
return items[i]
}
}
return 'none'
}