on master help sign in
less backtracking and better errors for `freshLine`
commitc376ed6a66c5f620d8ba04a3d84fbdb5805f14f5 authorEvan Czaplicki <info@elm-lang.org> dateSat 10 Oct 2015, 18:40 (11 years ago) parent27e0add
1 file changed+14−4
src/Parse/Helpers.hs+14−4
src/Parse/Helpers.hs+14−4
@@ -353,11 +353,21 @@ whitespace =
353353 option "" forcedWS
354354
355355
356−freshLine :: IParser [[String]]
356+freshLine :: IParser String
357357freshLine =
358− try (many1 newline >> many space_nl) <|> try (many1 space_nl) <?> Syntax.freshLine
359− where
360− space_nl = try $ spaces >> many1 newline
358+ try (
359+ do ws <- many1 (spaces <|> newline)
360+ column <- sourceColumn <$> getPosition
361+ if column == 1
362+ then return (concat ws)
363+ else fail badFreshLineMessage
364+ ) <?> Syntax.freshLine
365+
366+
367+badFreshLineMessage :: String
368+badFreshLineMessage =
369+ "I need a fresh line to start a new declaration. This means a new line that\n"
370+ ++ "starts with stuff, not with spaces or comments."
361371
362372
363373newline :: IParser String