@@ -20,8 +20,8 @@ import Data.Foldable as F
2020import Data.Json.Extended as EJ
2121import Data.List ((:))
2222import Data.List as L
23+ import Data.List.NonEmpty as NEL
2324import Data.Maybe (Maybe (..), fromMaybe , isJust )
24- import Data.NonEmpty ((:|))
2525import Data.String as S
2626import Data.String.CodeUnits as SCU
2727import Data.Tuple (Tuple (..), uncurry )
@@ -77,17 +77,18 @@ prettyParse parser input =
7777 SCU .fromCharArray (A .replicate (n - S .length s) ' ' ) <> s
7878
7979 printError parseError =
80- let
81- message = P .parseErrorMessage parseError
82- PP.Position pos = P .parseErrorPosition parseError
83- lines = S .split (S.Pattern " \n " ) input
84- pre = A .drop (pos.line - 3 ) $ A .take (pos.line - 1 ) lines
85- line = A .take 1 $ A .drop (pos.line - 1 ) lines
86- post = A .take 3 $ A .drop pos.line lines
87- nums = A .mapWithIndex (\n l → padLeft 4 (show (n + pos.line - (A .length pre))) <> " | " <> l) (pre <> line <> post)
88- pointer = pure $ SCU .fromCharArray (A .replicate (pos.column - 1 + 7 ) ' -' ) <> " ^ " <> message
89- in
90- S .joinWith " \n " $ A .take (A .length pre + 1 ) nums <> pointer <> A .drop 3 nums
80+ case P .parseErrorPosition parseError of
81+ PP.Position pos →
82+ let
83+ message = P .parseErrorMessage parseError
84+ lines = S .split (S.Pattern " \n " ) input
85+ pre = A .drop (pos.line - 3 ) $ A .take (pos.line - 1 ) lines
86+ line = A .take 1 $ A .drop (pos.line - 1 ) lines
87+ post = A .take 3 $ A .drop pos.line lines
88+ nums = A .mapWithIndex (\n l → padLeft 4 (show (n + pos.line - (A .length pre))) <> " | " <> l) (pre <> line <> post)
89+ pointer = pure $ SCU .fromCharArray (A .replicate (pos.column - 1 + 7 ) ' -' ) <> " ^ " <> message
90+ in
91+ S .joinWith " \n " $ A .take (A .length pre + 1 ) nums <> pointer <> A .drop 3 nums
9192
9293parse
9394 ∷ ∀ t
@@ -111,7 +112,7 @@ parseModule
111112parseModule = tokenize >=> flip P .runParser (moduleTop <* eof)
112113
113114queryTop ∷ ∀ m t . SqlParser m t (Sig.SqlQueryF t )
114- queryTop = defer \_ → Sig.Query <$> ( PC .sepEndBy decl $ operator " ;" ) <*> expr
115+ queryTop = defer \_ → Sig.Query <$> PC .sepEndBy decl ( operator " ;" ) <*> expr
115116
116117moduleTop ∷ ∀ m t . SqlParser m t (Sig.SqlModuleF t )
117118moduleTop = defer \_ → Sig.Module <$> PC .sepBy decl (operator " ;" )
@@ -639,7 +640,7 @@ groupBy ∷ ∀ m t. SqlParser m t (Sig.GroupBy t)
639640groupBy = do
640641 _ ← keyword " group"
641642 _ ← keyword " by"
642- keys ← PC .sepBy1 definedExpr $ operator " ,"
643+ keys ← NEL .toList <$> PC .sepBy1 definedExpr ( operator " ," )
643644 having ← PC .optionMaybe do
644645 _ ← keyword " having"
645646 definedExpr
@@ -655,10 +656,7 @@ orderBy prs = do
655656 _ ← keyword " order"
656657 _ ← keyword " by"
657658 pos ← P .position
658- lst ← flip PC .sepBy1 (operator " ," ) $ sortClause pos
659- case lst of
660- L.Nil → P .fail " incorrect order by"
661- x : xs → pure $ Sig.OrderBy (x :| xs)
659+ Sig.OrderBy <$> flip PC .sepBy1 (operator " ," ) (sortClause pos)
662660 where
663661 sortPart = PC .choice
664662 [ keyword " asc" $> Sig.ASC
0 commit comments