fun parseBlock()

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