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