From: Axy Date: Sat, 28 Mar 2026 20:18:44 +0000 (+0100) Subject: Slightly better error messages for key parser X-Git-Url: https://git.uwuaxy.net/animations_scrolling.mp4?a=commitdiff_plain;h=511f25602275f54ccfb3b3584c231f1f0d9e1514;p=axy%2Fft%2Fa-maze-ing.git Slightly better error messages for key parser --- diff --git a/.gitignore b/.gitignore index 1da5078..a388820 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,4 @@ out.prof prof.svg tmp .venv -dist +test diff --git a/mazegen/config/config_parser.py b/mazegen/config/config_parser.py index c59b2b9..3d54558 100644 --- a/mazegen/config/config_parser.py +++ b/mazegen/config/config_parser.py @@ -23,6 +23,7 @@ from .parser_combinator import ( pair, parser_complete, parser_map, + parser_map_err, preceeded, recognize, seq, @@ -329,19 +330,24 @@ PatternField = ListParser(parse_str_line) def line_parser[T]( fields: dict[str, ConfigField[T]], ) -> Parser[tuple[str, T] | None]: - return alt( - parser_map(lambda _: None, parse_comment), - *( - preceeded( - seq(tag(name), multispace0, tag("="), multispace0), - parser_map( - (lambda name: lambda res: (name, res))(name), - cut(terminated(field.parse, multispace0)), - ), - ) - for name, field in fields.items() + return parser_map_err( + lambda e: ParseError("Expected valid field name", e.at), + alt( + parser_map(lambda _: None, parse_comment), + *( + preceeded( + seq(tag(name), multispace0, cut(tag("=")), multispace0), + parser_map( + (lambda name: lambda res: (name, res))(name), + cut(terminated(field.parse, multispace0)), + ), + ) + for name, field in fields.items() + ), + parser_map( + lambda _: None, lookahead_parser(null_parser, tag("\n")) + ), ), - parser_map(lambda _: None, lookahead_parser(null_parser, tag("\n"))), )