in src/language/providers/utils.ts [431:504]
export function cursorWithinQuotes(
document: vscode.TextDocument,
position: vscode.Position
) {
const quoteChar: string[] = ["'", '"']
let startLine = position.line
for (let i = 0; i < quoteChar.length; ++i) {
let currentText = document.lineAt(startLine).text
if (
currentText.includes('<') &&
!currentText.includes("'") &&
!currentText.includes('"')
) {
return false
}
if (currentText.includes(quoteChar[i])) {
let textBeforeTrigger = currentText.substring(0, position.character)
//let tagStartPos = -1
let quoteStartLine = startLine
let quoteStartPos = -1
let equalStartPos = -1
while (
(equalStartPos = textBeforeTrigger.lastIndexOf('=' + quoteChar[i])) ===
-1
) {
if (textBeforeTrigger.indexOf('<') !== -1) {
break
}
textBeforeTrigger = document.lineAt(--quoteStartLine).text
}
quoteStartPos = equalStartPos + 1
let quoteEndLine = quoteStartLine
let quoteEndPos = -1
if (quoteStartPos > -1) {
while (
quoteEndLine < document.lineCount &&
(quoteEndPos = currentText.indexOf(
quoteChar[i],
quoteStartPos + 1
)) === -1
) {
currentText = document.lineAt(++quoteEndLine).text
}
if (
quoteEndPos > -1 &&
currentText.indexOf('=', quoteStartPos - 1) === quoteStartPos - 1
) {
if (
(position.line > quoteStartLine && position.line < quoteEndLine) ||
(quoteEndLine === quoteStartLine &&
position.character > quoteStartPos &&
position.character <= quoteEndPos) ||
(position.line === quoteStartLine &&
position.character > quoteStartPos &&
position.line < quoteEndLine) ||
(position.line === quoteEndLine &&
position.character <= quoteEndPos &&
position.line > quoteStartLine)
) {
return true
}
}
}
}
}
return false
}