]> Untitled Git - axy/ft/a-maze-ing.git/commitdiff
Slightly better error messages for key parser
authorAxy <gilliardmarthey.axel@gmail.com>
Sat, 28 Mar 2026 20:18:44 +0000 (21:18 +0100)
committerAxy <gilliardmarthey.axel@gmail.com>
Sat, 28 Mar 2026 20:18:44 +0000 (21:18 +0100)
.gitignore
mazegen/config/config_parser.py

index 1da507837a68388c07a1305b4840f756bebf4744..a38882082f0a68734fae9af881fce9362f4482e1 100644 (file)
@@ -4,4 +4,4 @@ out.prof
 prof.svg
 tmp
 .venv
-dist
+test
index c59b2b9142bc57b2a8ca6eab78e290cf953ba553..3d545589f77e53227785cab1effa10cd9a41565e 100644 (file)
@@ -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"))),
     )