in plugin-bazel/src/main/kotlin/org/jetbrains/bazel/languages/projectview/parser/ProjectViewParser.kt [23:61]
fun parseBlock() {
val sectionMarker = builder.mark()
when (getCurrentTokenType()) {
ProjectViewTokenType.SECTION_KEYWORD -> {
val sectionNameMarker = builder.mark()
builder.advanceLexer()
sectionNameMarker.done(ProjectViewElementTypes.SECTION_NAME)
expect(ProjectViewTokenType.COLON)
if (!matches(ProjectViewTokenType.NEWLINE)) {
parseItem(ProjectViewElementTypes.SECTION_ITEM)
}
parseListItems()
sectionMarker.done(ProjectViewElementTypes.SECTION)
return
}
ProjectViewTokenType.IMPORT_KEYWORD -> {
builder.advanceLexer()
parseItem(ProjectViewElementTypes.IMPORT_ITEM)
builder.advanceLexer()
sectionMarker.done(ProjectViewElementTypes.IMPORT)
return
}
ProjectViewTokenType.TRY_IMPORT_KEYWORD -> {
builder.advanceLexer()
parseItem(ProjectViewElementTypes.IMPORT_ITEM)
builder.advanceLexer()
sectionMarker.done(ProjectViewElementTypes.TRY_IMPORT)
return
}
}
// Error handling
when {
matches(ProjectViewTokenType.INDENT) ->
skipBlockAndError(sectionMarker, "Indented lines must be items of a list section.")
matches(ProjectViewTokenType.COLON) ->
skipBlockAndError(sectionMarker, "A line cannot begin with a colon.")
else -> skipBlockAndError(sectionMarker, "Unrecognized keyword: ${builder.tokenText}")
}
}