in src/language/semantics/xsltTokenDiagnostics.ts [1434:1516]
private static checkTokenIsExpected(
prevToken: BaseToken | null,
token: BaseToken,
problemTokens: BaseToken[],
overridType?: TokenLevelState
) {
if (token.error) {
return
}
let tokenType = overridType ? overridType : token.tokenType
let errorSingleSeparators: string[]
if (tokenType === TokenLevelState.number) {
errorSingleSeparators = ['|']
} else if (tokenType === TokenLevelState.string) {
errorSingleSeparators = ['|', '+', '-', '*']
} else {
errorSingleSeparators = []
}
let errDoubleSeparators
if (tokenType === TokenLevelState.nodeNameTest) {
errDoubleSeparators = ['{}', '[]', '()']
} else if (
tokenType === TokenLevelState.number ||
tokenType === TokenLevelState.string
) {
errDoubleSeparators = ['{}', '[]', '()', '*:', '::', '//']
} else {
errDoubleSeparators = ['{}', '[]', '()', '*:', '::']
}
if (prevToken) {
let isXPathError = false
if (
prevToken.tokenType === TokenLevelState.complexExpression ||
prevToken.tokenType === TokenLevelState.entityRef
) {
// no error
} else if (
prevToken.tokenType === TokenLevelState.uriLiteral &&
tokenType !== TokenLevelState.nodeNameTest
) {
isXPathError = true
} else if (prevToken.tokenType === TokenLevelState.operator) {
if (
prevToken.charType === CharLevelState.rB ||
prevToken.charType === CharLevelState.rPr ||
prevToken.charType === CharLevelState.rPr
) {
isXPathError = true
} else if (prevToken.charType === CharLevelState.dSep) {
if (errDoubleSeparators.indexOf(prevToken.value) !== -1) {
isXPathError = true
}
} else if (prevToken.charType === CharLevelState.sep) {
if (errorSingleSeparators.indexOf(prevToken.value) !== -1) {
isXPathError = true
}
}
} else if (
tokenType === TokenLevelState.nodeNameTest &&
prevToken.tokenType === TokenLevelState.uriLiteral
) {
// no error
} else if (
tokenType === TokenLevelState.string &&
prevToken.tokenType === TokenLevelState.string
) {
const currentTokenFirstChar = token.value.charAt(0)
if (currentTokenFirstChar === '"' || currentTokenFirstChar === "'") {
isXPathError = true
}
} else {
isXPathError = true
}
if (isXPathError) {
let errType: ErrorType =
tokenType === TokenLevelState.function
? ErrorType.XPathFunctionUnexpected
: ErrorType.XPathUnexpected
token.error = errType
problemTokens.push(token)
}
}
}