   ///
   /// - Note: This function must be kept in sync with `parseStatement()`.
   /// - Seealso: ``Parser/parseStatement()``
-  func atStartOfStatement() -> Bool {
-    var lookahead = self.lookahead()
-    _ = lookahead.consume(if: .identifier, followedBy: .colon)
-    return lookahead.at(anyIn: CanBeStatementStart.self) != nil
+  func atStartOfStatement(context: Parser.ItemContext? = nil) -> Bool {
+    return self.lookahead().isStartOfStatement(context: context)
   }
 }
 

// MARK: Lookahead

extension Parser.Lookahead {
  func isBooleanExpr() -> Bool {
    var lookahead = self.lookahead()
    return !lookahead.canParseTypedPattern() || !lookahead.at(.equal)


    let yields: RawSyntax
    if let lparen = self.consume(if: .leftParen) {
      let exprList: RawYieldExprListSyntax
      do {
        var keepGoing = true
        var elementList = [RawYieldExprListElementSyntax]()
        var loopProgress = LoopProgressCondition()
        while !self.at(any: [.eof, .rightParen]) && keepGoing && loopProgress.evaluate(currentToken) {
          let expr = self.parseExpression()
          let comma = self.consume(if: .comma)
          elementList.append(RawYieldExprListElementSyntax(
            expression: expr,
            comma: comma,
            arena: self.arena))

          keepGoing = (comma != nil)
        }
        exprList = RawYieldExprListSyntax(elements: elementList, arena: self.arena)
      }
      let (unexpectedBeforeRParen, rparen) = self.expect(.rightParen)
      yields = RawSyntax(RawYieldListSyntax(
        leftParen: lparen,
        elementList: exprList,
        unexpectedBeforeRParen,
        rightParen: rparen,
        arena: self.arena))
