in src/language/providers/attributeValueCompletion.ts [138:205]
function getAttributeDetails(
document: vscode.TextDocument,
position: vscode.Position
): [attributeName: string, valueStartPos: number, valueEndPos: number] {
const quoteChar: string[] = ["'", '"']
const triggerLine = position.line
const triggerPos = position.character
let currentLine = triggerLine
let currentPos = triggerPos
let endPos = -1
let currentText = document.lineAt(currentLine).text
let textBeforeTrigger = currentText.substring(0, triggerPos)
let attributeName = 'none'
let attributeStartPos = 0
while (
!currentText.includes("'") &&
!currentText.includes('"') &&
!currentText.includes('=') &&
!currentText.includes('<') &&
!currentText.includes('>') &&
currentLine > 0 &&
currentLine < document.lineCount
) {
currentText = document.lineAt(--currentLine).text
}
if (currentLine === 0 || currentLine === document.lineCount) {
return ['none', 0, 0]
}
if ((currentPos = textBeforeTrigger.lastIndexOf('=')) !== -1) {
if (triggerPos === currentPos + 1) {
attributeStartPos = textBeforeTrigger.lastIndexOf(' ') + 1
attributeName = textBeforeTrigger.substring(attributeStartPos, currentPos)
return [attributeName, currentPos + 1, currentPos + 1]
}
}
for (let i = 0; i < quoteChar.length; ++i) {
if (currentText.includes(quoteChar[i])) {
if (currentLine === triggerLine) {
currentPos = textBeforeTrigger.lastIndexOf(quoteChar[i])
if (
currentPos < triggerPos &&
textBeforeTrigger.lastIndexOf('=') === currentPos - 1
) {
textBeforeTrigger = textBeforeTrigger.substring(
0,
textBeforeTrigger.lastIndexOf('=')
)
endPos = currentText.indexOf(quoteChar[i], currentPos + 1)
attributeStartPos = textBeforeTrigger.lastIndexOf(' ')
attributeName = textBeforeTrigger.substring(
attributeStartPos + 1,
currentPos - 1
)
}
}
}
if (attributeName !== 'none') {
break
}
}
return [attributeName, currentPos, endPos]
}