From 89907992958c09b9d1248e70b0462bf3b5ce3c05 Mon Sep 17 00:00:00 2001 From: Matvey Aksenov Date: Tue, 8 Oct 2024 17:09:13 +0000 Subject: [PATCH] feature: Liberalize record/array literals parsing --- src/T/Parse.hs | 4 ++-- test/T/ParseSpec.hs | 30 ++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/T/Parse.hs b/src/T/Parse.hs index 88a1d06..91e46ed 100644 --- a/src/T/Parse.hs +++ b/src/T/Parse.hs @@ -296,10 +296,10 @@ litP = do map String stringLiteral arrayP = map (Array . Vector.fromList) - (brackets (Unspaced (sepBy expP (symbol ",")))) + (brackets (spaces *> Unspaced (sepBy expP (symbol ",")))) recordP = map (Record . HashMap.fromList) - (braces (Unspaced (sepBy kv (symbol ",")))) + (braces (spaces *> Unspaced (sepBy kv (symbol ",")))) where kv = do k <- map fromString (some letter) diff --git a/test/T/ParseSpec.hs b/test/T/ParseSpec.hs index 6a311ff..7d65d47 100644 --- a/test/T/ParseSpec.hs +++ b/test/T/ParseSpec.hs @@ -161,6 +161,36 @@ spec = \ foo =\n\ \ 4\n\ \%}" `shouldParseTo` Tmpl.Set [Tmpl.Assign (var "foo") (int 4)] + "{% set\n\ + \ arr =\n\ + \ [ 4\n\ + \ , 7\n\ + \ , 42\n\ + \ ]\n\ + \%}" `shouldParseTo` Tmpl.Set + [ Tmpl.Assign + (var "arr") + (array + [ int 4 + , int 7 + , int 42 + ]) + ] + "{% set\n\ + \ rec =\n\ + \ { foo: 4\n\ + \ , bar: 7\n\ + \ , baz: 42\n\ + \ }\n\ + \%}" `shouldParseTo` Tmpl.Set + [ Tmpl.Assign + (var "rec") + (record + [ ("foo", int 4) + , ("bar", int 7) + , ("baz", int 42) + ]) + ] context "multi-*" $ do it "multi-sets" $ do