public static checkFinalXPathToken()

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)
    }
  }