in plugin-bazel/src/main/kotlin/org/jetbrains/bazel/languages/starlark/parser/ExpressionParsing.kt [500:536]
fun parseTestExpression(isTarget: Boolean): Boolean {
if (atToken(StarlarkTokenTypes.LAMBDA_KEYWORD)) {
return parseLambdaExpression(oldTest = false)
}
val condExpr = builder.mark()
if (!parseORTestExpression(isTarget)) {
condExpr.drop()
return false
}
if (atToken(StarlarkTokenTypes.IF_KEYWORD)) {
val conditionMarker = builder.mark()
builder.advanceLexer()
if (!parseORTestExpression(isTarget)) {
builder.error(StarlarkBundle.message("parser.expected.expression"))
} else {
if (!atToken(StarlarkTokenTypes.ELSE_KEYWORD)) {
if (atToken(StarlarkTokenTypes.COLON)) { // it's regular if statement. Bracket wasn't closed or new line was lost
conditionMarker.rollbackTo()
condExpr.drop()
return true
} else {
builder.error(StarlarkBundle.message("parser.expected.else"))
}
} else {
builder.advanceLexer()
if (!parseTestExpression(isTarget)) {
builder.error(StarlarkBundle.message("parser.expected.expression"))
}
}
}
conditionMarker.drop()
condExpr.done(StarlarkElementTypes.CONDITIONAL_EXPRESSION)
} else {
condExpr.drop()
}
return true
}