fun parseSuite()

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