in src/language/semantics/xsltTokenDiagnostics.ts [1618:1673]
public static resolveXPathVariableReference(
globalVarName: string | null,
document: vscode.TextDocument,
importedVariables: string[],
token: BaseToken,
xpathVariableCurrentlyBeingDefined: boolean,
inScopeXPathVariablesList: VariableData[],
xpathStack: XPathData[],
inScopeVariablesList: VariableData[],
elementStack: ElementData[]
): BaseToken | null {
let fullVarName = XsltTokenDiagnostics.getTextForToken(
token.line,
token,
document
)
let varName = fullVarName.startsWith('$')
? fullVarName.substring(1)
: fullVarName.substring(1, fullVarName.length - 1)
let result: BaseToken | null = null
let globalVariable = null
let resolved = this.resolveVariableName(
inScopeXPathVariablesList,
varName,
xpathVariableCurrentlyBeingDefined,
globalVariable
)
if (!resolved) {
resolved = this.resolveStackVariableName(xpathStack, varName)
}
if (!resolved) {
resolved = this.resolveVariableName(
inScopeVariablesList,
varName,
false,
globalVariable
)
}
if (!resolved) {
if (elementStack.length === 1 && globalVarName === varName) {
// don't asign
} else {
resolved = this.resolveStackVariableName(elementStack, varName)
}
}
let importedResolved = false
if (!resolved) {
importedResolved =
globalVarName !== varName && importedVariables.indexOf(varName) > -1
}
if (!resolved && !importedResolved) {
result = token
}
return result
}