on c19392f help sign in
elk/src/Elm/Header.hs
63 lines 1.5 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2module Elm.Header
3 ( Tag(..)
4 , parse
5 )
6 where
9import Data.Text (Text)
11import qualified AST.Module as Module
12import qualified Elm.Compiler.Imports as Imports
13import qualified Elm.Compiler.Internals as I
14import qualified Elm.Compiler.Module as M
15import qualified Elm.Package as Package
16import qualified Parse.Helpers as Parse (run)
17import qualified Parse.Module as Parse (header)
18import qualified Reporting.Annotation as A
19import qualified Reporting.Error as Error
23-- HEADER TAGS
26data Tag = Normal | Effect | Port
30-- PARSE
33parse :: Package.Name -> Text -> Either I.Error (Maybe (Tag, M.Raw), [M.Raw])
34parse pkgName sourceCode =
35 case Parse.run Parse.header sourceCode of
36 Right header ->
37 Right $ toSummary pkgName header
39 Left err ->
40 Left (I.Error (A.map Error.Syntax err))
43toSummary :: Package.Name -> Module.Header [Module.UserImport] -> (Maybe (Tag, M.Raw), [M.Raw])
44toSummary 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 )
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 )