in plugin-bazel/src/main/kotlin/org/jetbrains/bazel/languages/starlark/parser/StatementParsing.kt [154:193]
fun parseSuite(endMarker: Marker?, elType: IElementType?) {
if (atToken(StarlarkTokenTypes.STATEMENT_BREAK)) {
builder.advanceLexer()
val marker = builder.mark()
val indentFound = atToken(StarlarkTokenTypes.INDENT)
if (indentFound) {
builder.advanceLexer()
while (!builder.eof() && !atToken(StarlarkTokenTypes.DEDENT)) {
parseStatement()
}
} else {
builder.error(StarlarkBundle.message("parser.indent.expected"))
}
marker.done(StarlarkElementTypes.STATEMENT_LIST)
endMarker?.done(elType!!)
if (indentFound && !builder.eof()) {
assert(atToken(StarlarkTokenTypes.DEDENT))
builder.advanceLexer()
}
} else {
val marker = builder.mark()
if (builder.eof()) {
builder.error(StarlarkBundle.message("parser.expected.statement"))
} else {
context.pushScope(context.getScope().withSuite())
parseSimpleStatement()
context.popScope()
while (matchToken(StarlarkTokenTypes.SEMICOLON)) {
if (matchToken(StarlarkTokenTypes.STATEMENT_BREAK)) {
break
}
context.pushScope(context.getScope().withSuite())
parseSimpleStatement()
context.popScope()
}
}
marker.done(StarlarkElementTypes.STATEMENT_LIST)
endMarker?.done(elType!!)
}
}