in src/language/semantics/xsltTokenDiagnostics.ts [1356:1396]
public static checkFinalXPathToken(
prevToken: BaseToken,
allTokens: BaseToken[],
index: number,
problemTokens: BaseToken[]
) {
let isValid = false
switch (prevToken.charType) {
case CharLevelState.rB:
case CharLevelState.rBr:
case CharLevelState.rPr:
isValid = true
break
case CharLevelState.dSep:
isValid =
prevToken.value === '()' ||
prevToken.value === '[]' ||
prevToken.value === '{}'
break
default:
if (prevToken.value === '%') {
isValid = true
} else if (prevToken.value === '/' || prevToken.value === '.') {
// these are ok provided that the previous token was XSLT or previous token was ,;
let prevToken2 = allTokens[index - 2]
let tokenBeforePrevWasXSLT =
prevToken2.tokenType >= XsltTokenDiagnostics.xsltStartTokenNumber
isValid =
tokenBeforePrevWasXSLT ||
(prevToken2.tokenType === TokenLevelState.operator &&
prevToken2.charType !== CharLevelState.rB &&
prevToken2.charType !== CharLevelState.rBr &&
prevToken2.charType !== CharLevelState.rPr)
}
break
}
if (!isValid) {
prevToken['error'] = ErrorType.XPathOperatorUnexpected
problemTokens.push(prevToken)
}
}