@@ -240,6 +240,17 @@ abstract class Parser(
240240
241241 final def maybeIndented [R ](f : (Parser , Bool ) => R ): R =
242242 yeetSpaces match
243+ case (NEWLINE , l0) :: _ =>
244+ consume
245+ while yeetSpaces.headOption.exists(_._1 === NEWLINE ) do consume
246+ cur match
247+ case Nil =>
248+ case (tok, loc) :: _ =>
249+ raise(WarningReport (
250+ msg " This ${tok.describe} should be indented " -> S (loc) ::
251+ msg " since it is a continuation of the new line here " -> S (l0) ::
252+ Nil ))
253+ maybeIndented(f)
243254 case (br @ BRACKETS (Indent | Curly , toks), _) :: _ =>
244255 consume
245256 rec(toks, S (br.innerLoc), br.describe).concludeWith(f(_, true ))
@@ -278,7 +289,7 @@ abstract class Parser(
278289 consume
279290 val blk = rec(toks, S (tok.innerLoc), tok.describe).concludeWith(_.blockOf(subRule, Nil , allowNewlines)) // FIXME allowNewlines?
280291 if blk.isEmpty then
281- err(( msg " Expected ${subRule.whatComesAfter} ${subRule.mkAfterStr}; found end of block instead " -> S (loc) :: Nil ) )
292+ err(msg " Expected ${subRule.whatComesAfter} ${subRule.mkAfterStr}; found end of block instead " -> S (loc) :: Nil )
282293 errExpr
283294 blk.map(annotations.annotate) ::: blockContOf(rule)
284295 case _ =>
@@ -307,10 +318,10 @@ abstract class Parser(
307318 annotations.annotate(parseRule(CommaPrecNext , exprAlt.rest).map(res => exprAlt.k(e, res)).getOrElse(errExpr)) :: blockContOf(rule)
308319 case N =>
309320 // TODO dedup?
310- err(( msg " Expected ${rule.whatComesAfter} ${rule.mkAfterStr}; found ${tok.describe} instead " -> S (loc) :: Nil ) )
321+ err(msg " Expected ${rule.whatComesAfter} ${rule.mkAfterStr}; found ${tok.describe} instead " -> S (loc) :: Nil )
311322 annotations.annotate(errExpr) :: blockContOf(rule)
312323 case N =>
313- err(( msg " Expected ${rule.whatComesAfter} ${rule.mkAfterStr}; found ${tok.describe} instead " -> S (loc) :: Nil ) )
324+ err(msg " Expected ${rule.whatComesAfter} ${rule.mkAfterStr}; found ${tok.describe} instead " -> S (loc) :: Nil )
314325 annotations.annotate(errExpr) :: blockContOf(rule)
315326 case N =>
316327 val lhs = tryParseExp(CommaPrecNext , tok, loc, rule).getOrElse(errExpr)
@@ -336,7 +347,7 @@ abstract class Parser(
336347 case S (res) =>
337348 S (res)
338349 case N =>
339- err(( msg " Expected ${rule.whatComesAfter} ${rule.mkAfterStr}; found ${tok.describe} instead " -> S (loc) :: Nil ) )
350+ err(msg " Expected ${rule.whatComesAfter} ${rule.mkAfterStr}; found ${tok.describe} instead " -> S (loc) :: Nil )
340351 N
341352
342353
@@ -348,7 +359,7 @@ abstract class Parser(
348359 case S (res) => S (res)
349360 case N =>
350361 consume
351- err(( msg " Expected ${rule.whatComesAfter} ${rule.mkAfterStr}; found ${tok.describe} instead " -> S (loc) :: Nil ) )
362+ err(msg " Expected ${rule.whatComesAfter} ${rule.mkAfterStr}; found ${tok.describe} instead " -> S (loc) :: Nil )
352363 N
353364 yeetSpaces match
354365 // case (tok @ (id: IDENT), loc) :: _ if Keyword.all.get(id.name).exists(_.leftPrecOrMin < prec) =>
@@ -358,7 +369,7 @@ abstract class Parser(
358369 // case S(res) =>
359370 // S(res)
360371 // case N =>
361- // err((msg"Expected ${rule.whatComesAfter} ${rule.mkAfterStr}; found end of phrase instead" -> S(loc.left) :: Nil) )
372+ // err((msg"Expected ${rule.whatComesAfter} ${rule.mkAfterStr}; found end of phrase instead" -> S(loc.left) :: Nil)
362373 // N
363374 case (tok @ (id : IDENT ), loc) :: _ =>
364375 Keyword .all.get(id.name) match
@@ -397,14 +408,14 @@ abstract class Parser(
397408 rule.emptyAlt match
398409 case S (res) => S (res)
399410 case N =>
400- // err((msg"Expected ${rule.whatComesAfter} ${rule.mkAfterStr}; found ${tok.describe} instead" -> lastLoc :: Nil) )
401- err(( msg " Expected ${rule.whatComesAfter} ${rule.mkAfterStr}; found ${tok.describe} instead " -> S (l0) :: Nil ) )
411+ // err((msg"Expected ${rule.whatComesAfter} ${rule.mkAfterStr}; found ${tok.describe} instead" -> lastLoc :: Nil)
412+ err(msg " Expected ${rule.whatComesAfter} ${rule.mkAfterStr}; found ${tok.describe} instead " -> S (l0) :: Nil )
402413 N
403414 case (br @ BRACKETS (Indent | Curly , toks), loc) :: _ =>
404415 // rule.blkAlt match
405416 // case S(res) => S(res)
406417 // case N =>
407- // err((msg"Expected ${rule.whatComesAfter} ${rule.mkAfterStr}; found ${tok.describe} instead" -> lastLoc :: Nil) )
418+ // err((msg"Expected ${rule.whatComesAfter} ${rule.mkAfterStr}; found ${tok.describe} instead" -> lastLoc :: Nil)
408419 // N
409420
410421 if verbose then printDbg(" $ found an indented" + (toks match
@@ -445,7 +456,7 @@ abstract class Parser(
445456 case S (res) =>
446457 S (res)
447458 case N =>
448- err(( msg " Expected ${rule.whatComesAfter} ${rule.mkAfterStr}; found end of input instead " -> lastLoc :: Nil ) )
459+ err(msg " Expected ${rule.whatComesAfter} ${rule.mkAfterStr}; found end of input instead " -> lastLoc :: Nil )
449460 N
450461
451462
@@ -462,7 +473,7 @@ abstract class Parser(
462473 yeetSpaces match
463474 case (IDENT (" =" , _), l1) :: _ => consume
464475 case (tk, l1) :: _ =>
465- err(( msg " Expected `=` after ${nme}; found ${tk.toString} instead " -> S (l1) :: Nil ) )
476+ err(msg " Expected `=` after ${nme}; found ${tk.toString} instead " -> S (l1) :: Nil )
466477 val rhs = simpleExprImpl(0 )
467478 val v = Tree .Ident (nme).withLoc(S (l0))
468479 cur match {
@@ -495,7 +506,7 @@ abstract class Parser(
495506 Keyword .all.get(nme) match
496507 case S (kw) => // * Expressions starting with keywords should be handled in parseRule
497508 // * I guess this case is not really supposed to be ever reached (?)
498- err(( msg " Unexpected ${kw.toString} in this position " -> S (loc) :: Nil ) )
509+ err(msg " Unexpected ${kw.toString} in this position " -> S (loc) :: Nil )
499510 errExpr
500511 case N =>
501512 consume
@@ -554,7 +565,7 @@ abstract class Parser(
554565 consume
555566 simpleExpr(0 )
556567 case (tk, loc) :: _ =>
557- err(( msg " Expected an expression; found ${tk.toString} instead " -> S (loc) :: Nil ) )
568+ err(msg " Expected an expression; found ${tk.toString} instead " -> S (loc) :: Nil )
558569 errExpr
559570 case Nil =>
560571 err(msg " Expected '`in'; found end of input instead " -> lastLoc :: Nil )
@@ -578,7 +589,7 @@ abstract class Parser(
578589 err(msg " Expected '`in'; found ${tk.toString} instead " -> tk.toLoc :: Nil )
579590 errExpr
580591 case (tk, loc) :: _ =>
581- err(( msg " Expected 'else'; found ${tk.toString} instead " -> S (loc) :: Nil ) )
592+ err(msg " Expected 'else'; found ${tk.toString} instead " -> S (loc) :: Nil )
582593 errExpr
583594 case Nil =>
584595 err(msg " Expected 'else'; found end of input instead " -> lastLoc :: Nil )
@@ -594,19 +605,23 @@ abstract class Parser(
594605 case _ => unsupportedQuote(S (loc))
595606 }
596607 case (BRACKETS (Indent | Curly , _), loc) :: _ =>
597- err(( msg " Expected an expression; found block instead " -> lastLoc :: Nil ) )
608+ err(msg " Expected an expression; found block instead " -> lastLoc :: Nil )
598609 errExpr
599610 case (SUSPENSION (dotDotDot), loc) :: _ =>
600611 consume
601612 val bod = yeetSpaces match
602613 case Nil | (COMMA , _) :: _ => N
603614 case _ => S (expr(prec))
604615 Spread (if dotDotDot then Keyword .`...` else Keyword .`..`, S (loc), bod)
616+ // case (NEWLINE, loc) :: _ => // this seems to never be reached
617+ // raise(WarningReport(msg"???" -> S(loc) :: Nil))
618+ // consume
619+ // simpleExprImpl(prec)
605620 case (tok, loc) :: _ =>
606- err(( msg " Expected an expression; found new line instead " -> S (loc) :: Nil ) )
621+ err(msg " Expected an expression; found ${tok.describe} instead" -> S (loc) :: Nil )
607622 errExpr
608623 case Nil =>
609- err(( msg " Expected an expression; found end of input instead " -> lastLoc :: Nil ) )
624+ err(msg " Expected an expression; found end of input instead " -> lastLoc :: Nil )
610625 errExpr
611626
612627
@@ -727,7 +742,7 @@ abstract class Parser(
727742 }
728743 case (COMMA , l0) :: _ if prec === 0 =>
729744 consume
730- err(( msg " Unexpected comma in this position " -> S (l0) :: Nil ) )
745+ err(msg " Unexpected comma in this position " -> S (l0) :: Nil )
731746 acc
732747 /*
733748 case (KEYWORD(opStr @ "=>"), l0) :: (NEWLINE, l1) :: _ if opPrec(opStr)._1 > prec =>
@@ -986,7 +1001,7 @@ abstract class Parser(
9861001 .getOrElse(errExpr)
9871002 case N =>
9881003 // TODO other alts...?
989- err(( msg " Expected ${rule.whatComesAfter} ${rule.mkAfterStr}; found ${kw.name} instead " -> S (l0) :: Nil ) )
1004+ err(msg " Expected ${rule.whatComesAfter} ${rule.mkAfterStr}; found ${kw.name} instead " -> S (l0) :: Nil )
9901005 acc
9911006 case _ => acc
9921007 case _ =>
0 commit comments