@@ -8,12 +8,11 @@ module Parse.Pattern
10import qualified Data.List as List
10import qualified Data.List as List
11−import Data.Text (Text)
13−import qualified AST.Literal as L
14import qualified AST.Pattern as P
12import qualified AST.Pattern as P
13+import qualified Elm.Name as N
15import qualified Parse.Literal as Literal
14import qualified Parse.Literal as Literal
16−import Parse.Primitives (Parser, SParser, SPos, checkSpace, getPosition, hint, inContext, spaces, oneOf)
15+import Parse.Primitives (Parser, SParser, SPos, addLocation, checkSpace, getPosition, hint, inContext, spaces, oneOf)
17import qualified Parse.Primitives.Keyword as Keyword
16import qualified Parse.Primitives.Keyword as Keyword
18import qualified Parse.Primitives.Symbol as Symbol
17import qualified Parse.Primitives.Symbol as Symbol
19import qualified Parse.Primitives.Variable as Var
18import qualified Parse.Primitives.Variable as Var
@@ -41,28 +40,28 @@ term =
42termHelp :: R.Position -> Parser P.Raw
41termHelp :: R.Position -> Parser P.Raw
43termHelp start =
42termHelp start =
46− [ Symbol.underscore >> return P.RAnything
45+ do Symbol.underscore
47+ return (A.at start end P.RAnything)
47− , P.RVar <$> Var.lower
49+ do name <- Var.lower
51+ return (A.at start end (P.RVar name))
48− , upperTerm <$> Var.foreignUpper
53+ do (maybePrefix, name) <- Var.foreignUpper
49− , P.RLiteral <$> Literal.literal
54+ end <- getPosition
50− ]
55+ let ctor = P.RCtor (R.Region start end) maybePrefix name []
52− return (A.at start end pattern)
56+ return (A.at start end ctor)
55−upperTerm :: (Maybe Text, Text) -> P.Raw_
58+ ,
56−upperTerm pair =
59+ do lit <- Literal.literal
57− case pair of
60+ end <- getPosition
58− (Nothing, "True") ->
61+ return (A.at start end (P.RLiteral lit))
59− P.RLiteral (L.Boolean True)
62+ ]
61− (Nothing, "False") ->
62− P.RLiteral (L.Boolean False)
64− (maybePrefix, name) ->
65− P.RCtor maybePrefix name []
@@ -75,7 +74,7 @@ record start =
75 inContext start E.ExprRecord $
74 inContext start E.ExprRecord $
78− [ do var <- Var.lower
77+ [ do var <- addLocation Var.lower
80 recordHelp start [var]
79 recordHelp start [var]
81 , do Symbol.rightCurly
80 , do Symbol.rightCurly
@@ -84,12 +83,12 @@ record start =
87−recordHelp :: R.Position -> [Text] -> Parser P.Raw
86+recordHelp :: R.Position -> [A.Located N.Name] -> Parser P.Raw
88recordHelp start vars =
87recordHelp start vars =
90 [ do Symbol.comma
89 [ do Symbol.comma
92− var <- Var.lower
91+ var <- addLocation Var.lower
94 recordHelp start (var:vars)
93 recordHelp start (var:vars)
95 , do Symbol.rightCurly
94 , do Symbol.rightCurly
@@ -192,11 +191,13 @@ exprHelp start patterns (pattern, _end, sPos) =
192 , do checkSpace sPos
191 , do checkSpace sPos
193 Keyword.as_
192 Keyword.as_
194+ nameStart <- getPosition
195− alias <- Var.lower
195+ name <- Var.lower
196 newEnd <- getPosition
196 newEnd <- getPosition
197 newSpace <- whitespace
197 newSpace <- whitespace
198+ let alias = A.at nameStart newEnd name
199− ( A.at start newEnd (P.RAlias alias (List.foldl' cons pattern patterns))
200+ ( A.at start newEnd (P.RAlias (List.foldl' cons pattern patterns) alias)
200 , newSpace
201 , newSpace
@@ -226,8 +227,8 @@ exprTerm =
229−exprTermHelp :: R.Position -> (Maybe Text, Text) -> [P.Raw] -> SParser P.Raw
230+exprTermHelp :: R.Position -> (Maybe N.Name, N.Name) -> [P.Raw] -> SParser P.Raw
230−exprTermHelp start pair@(prefix, name) args =
231+exprTermHelp start pair@(maybePrefix, name) args =
231 do end <- getPosition
232 do end <- getPosition
232 sPos <- whitespace
233 sPos <- whitespace
@@ -235,7 +236,7 @@ exprTermHelp start pair@(prefix, name) args =
235 arg <- term
236 arg <- term
236 exprTermHelp start pair (arg:args)
237 exprTermHelp start pair (arg:args)
238− ( A.at start end (P.RCtor prefix name (reverse args))
239+ ( A.at start end (P.RCtor (R.Region start end) maybePrefix name (reverse args))