@@ -6,15 +6,15 @@ module Elm.Header
66 where
77
88
9−import Data.Text (Text)
9+import qualified Data.ByteString as B
1010
11−import qualified AST.Module as Module
11+import qualified AST.Source as Src
1212import qualified Elm.Compiler.Imports as Imports
13−import qualified Elm.Compiler.Internals as I
1413import qualified Elm.Compiler.Module as M
15−import qualified Elm.Package as Package
16−import qualified Parse.Helpers as Parse (run)
17−import qualified Parse.Module as Parse (header)
14+import qualified Elm.Name as N
15+import qualified Elm.Package as Pkg
16+import qualified Parse.Primitives as Parser
17+import qualified Parse.Module as Module
1818import qualified Reporting.Annotation as A
1919import qualified Reporting.Error as Error
2020
@@ -30,34 +30,63 @@ data Tag = Normal | Effect | Port
3030-- PARSE
3131
3232
33−parse :: Package.Name -> Text -> Either I.Error (Maybe (Tag, M.Raw), [M.Raw])
34−parse pkgName sourceCode =
35− case Parse.run Parse.header sourceCode of
36− Right header ->
37− Right $ toSummary pkgName header
33+parse :: Pkg.Name -> B.ByteString -> Either Error.Error (Maybe (Tag, M.Raw), [M.Raw])
34+parse pkg sourceCode =
35+ case Parser.run chompHeader sourceCode of
36+ Right (Src.Module header imports _) ->
37+ Right
38+ ( fmap simplifyHeader header
39+ , toDeps pkg imports
40+ )
3841
3942 Left err ->
40− Left (I.Error (A.map Error.Syntax err))
41−
42−
43−toSummary :: Package.Name -> Module.Header [Module.UserImport] -> (Maybe (Tag, M.Raw), [M.Raw])
44−toSummary pkgName (Module.Header maybeHeaderDecl imports) =
45− let
46− dependencies =
47− if pkgName == Package.core
48− then map (A.drop . fst . A.drop) imports
49− else map (A.drop . fst . A.drop) imports ++ map fst Imports.defaults
50− in
51− case maybeHeaderDecl of
52− Nothing ->
53− ( Nothing, dependencies )
54−
55− Just (Module.HeaderDecl sourceTag name _ _ _) ->
56− let
57− tag =
58− case sourceTag of
59− Module.Normal -> Normal
60− Module.Port _ -> Port
61− Module.Effect _ -> Effect
62− in
63− ( Just (tag, name), dependencies )
43+ Left (Error.Syntax err)
44+
45+
46+chompHeader :: Parser.Parser (Src.Module ())
47+chompHeader =
48+ Module.module_ $ return ()
49+
50+
51+
52+-- TO DEPS
53+
54+
55+toDeps :: Pkg.Name -> [Src.Import] -> [N.Name]
56+toDeps pkg imports =
57+ if pkg == Pkg.core
58+ then map getName imports
59+ else map getName imports ++ defaultImports
60+
61+
62+getName :: Src.Import -> N.Name
63+getName (Src.Import (A.At _ name) _ _) =
64+ name
65+
66+
67+{-# NOINLINE defaultImports #-}
68+defaultImports :: [N.Name]
69+defaultImports =
70+ map Imports._name Imports.defaults
71+
72+
73+
74+-- TO HEADER
75+
76+
77+simplifyHeader :: Src.Header -> (Tag, N.Name)
78+simplifyHeader (Src.Header name effects _ _) =
79+ ( toTag effects, name )
80+
81+
82+toTag :: Src.Effects -> Tag
83+toTag effects =
84+ case effects of
85+ Src.NoEffects ->
86+ Normal
87+
88+ Src.Ports _ ->
89+ Port
90+
91+ Src.Manager _ _ ->
92+ Effect