@@ -2,12 +2,10 @@
2module Elm.Compiler
2module Elm.Compiler
4 , compile, Context(..), Result(..)
4 , compile, Context(..), Result(..)
5− , generate
5+ , generate, JS.Target(..)
6 , Localizer, dummyLocalizer
6 , Localizer, dummyLocalizer
7− , Error, errorToDoc, errorToJson
7+ , I.Error, errorToDoc, errorToJson
8− , Warning, warningToDoc, warningToJson
8+ , I.Warning, warningToDoc, warningToJson
9− , Tag(..), parseHeader
10− , KernelInfo(..), parseKernel
@@ -17,21 +15,17 @@ import Data.Text (Text)
17import qualified Data.ByteString.Builder as BS
15import qualified Data.ByteString.Builder as BS
18import Text.PrettyPrint.ANSI.Leijen (Doc)
16import Text.PrettyPrint.ANSI.Leijen (Doc)
20−import qualified AST.Kernel as Kernel (Info)
21import qualified AST.Module as Module
18import qualified AST.Module as Module
22import qualified AST.Module.Name as ModuleName
19import qualified AST.Module.Name as ModuleName
23import qualified Compile
20import qualified Compile
24import qualified Docs.Check as Docs
21import qualified Docs.Check as Docs
25−import qualified Elm.Compiler.Imports as Imports
22+import qualified Elm.Compiler.Internals as I
26import qualified Elm.Compiler.Module as M
23import qualified Elm.Compiler.Module as M
27import qualified Elm.Compiler.Objects.Internal as Obj
24import qualified Elm.Compiler.Objects.Internal as Obj
28import qualified Elm.Compiler.Version
25import qualified Elm.Compiler.Version
29import qualified Elm.Docs as Docs
26import qualified Elm.Docs as Docs
30import qualified Elm.Package as Package
27import qualified Elm.Package as Package
31import qualified Generate.JavaScript as JS
28import qualified Generate.JavaScript as JS
32−import qualified Parse.Helpers as Parse (run)
33−import qualified Parse.Kernel as Kernel (parser)
34−import qualified Parse.Module as Parse (header)
35import qualified Reporting.Annotation as A
29import qualified Reporting.Annotation as A
36import qualified Reporting.Bag as Bag
30import qualified Reporting.Bag as Bag
37import qualified Reporting.Error as Error
31import qualified Reporting.Error as Error
@@ -55,7 +49,7 @@ version =
57{-| Compiles Elm source code to JavaScript. -}
51{-| Compiles Elm source code to JavaScript. -}
58−compile :: Context -> Text -> (Localizer, [Warning], Either [Error] Result)
52+compile :: Context -> Text -> (Localizer, [I.Warning], Either [I.Error] Result)
59compile (Context packageName exposed importDict interfaces) source =
53compile (Context packageName exposed importDict interfaces) source =
61 (Result.Result oneLocalizer warnings answer) =
55 (Result.Result oneLocalizer warnings answer) =
@@ -68,8 +62,8 @@ compile (Context packageName exposed importDict interfaces) source =
68 return (Result docs iface objs)
62 return (Result docs iface objs)
70 ( Result.oneToValue dummyLocalizer Localizer oneLocalizer
64 ( Result.oneToValue dummyLocalizer Localizer oneLocalizer
71− , Bag.toList Warning warnings
65+ , Bag.toList I.Warning warnings
72− , Result.answerToEither Error id answer
66+ , Result.answerToEither I.Error id answer
@@ -111,7 +105,7 @@ docsGen isExposed (Module.Module name info) =
111-- CODE GENERATION
105-- CODE GENERATION
114−generate :: Bool -> Obj.Graph -> Obj.Roots -> BS.Builder
108+generate :: Bool -> JS.Target -> Obj.Graph -> Obj.Roots -> BS.Builder
115generate =
109generate =
116 JS.generate
110 JS.generate
@@ -133,17 +127,13 @@ dummyLocalizer =
137− Error (A.Located Error.Error)
140−errorToDoc :: Localizer -> String -> Text -> Error -> Doc
130+errorToDoc :: Localizer -> String -> Text -> I.Error -> Doc
141−errorToDoc (Localizer localizer) location source (Error (A.A region err)) =
131+errorToDoc (Localizer localizer) location source (I.Error (A.A region err)) =
142 Report.toDoc location region (Error.toReport localizer err) source
132 Report.toDoc location region (Error.toReport localizer err) source
145−errorToJson :: Localizer -> String -> Error -> Json.Value
135+errorToJson :: Localizer -> String -> I.Error -> Json.Value
146−errorToJson (Localizer localizer) location (Error err) =
136+errorToJson (Localizer localizer) location (I.Error err) =
147 Error.toJson localizer location err
137 Error.toJson localizer location err
@@ -151,73 +141,11 @@ errorToJson (Localizer localizer) location (Error err) =
151-- WARNINGS
141-- WARNINGS
155− Warning (A.Located Warning.Warning)
158−warningToDoc :: Localizer -> String -> Text -> Warning -> Doc
144+warningToDoc :: Localizer -> String -> Text -> I.Warning -> Doc
159−warningToDoc (Localizer localizer) location source (Warning (A.A region wrn)) =
145+warningToDoc (Localizer localizer) location source (I.Warning (A.A region wrn)) =
160 Report.toDoc location region (Warning.toReport localizer wrn) source
146 Report.toDoc location region (Warning.toReport localizer wrn) source
163−warningToJson :: Localizer -> String -> Warning -> Json.Value
149+warningToJson :: Localizer -> String -> I.Warning -> Json.Value
164−warningToJson (Localizer localizer) location (Warning wrn) =
150+warningToJson (Localizer localizer) location (I.Warning wrn) =
165 Warning.toJson localizer location wrn
151 Warning.toJson localizer location wrn
172−data Tag = Normal | Effect | Port
175−parseHeader :: Package.Name -> Text -> Either Error (Maybe (Tag, M.Raw), [M.Raw])
176−parseHeader pkgName sourceCode =
177− case Parse.run Parse.header sourceCode of
179− Right $ toHeaderSummary pkgName header
182− Left (Error (A.map Error.Syntax err))
185−toHeaderSummary :: Package.Name -> Module.Header [Module.UserImport] -> (Maybe (Tag, M.Raw), [M.Raw])
186−toHeaderSummary pkgName (Module.Header maybeHeaderDecl imports) =
189− if pkgName == Package.core
190− then map (A.drop . fst . A.drop) imports
191− else map (A.drop . fst . A.drop) imports ++ map fst Imports.defaults
193− case maybeHeaderDecl of
195− ( Nothing, dependencies )
197− Just (Module.HeaderDecl sourceTag name _ _ _) ->
201− Module.Normal -> Normal
202− Module.Port _ -> Port
203− Module.Effect _ -> Effect
205− ( Just (tag, name), dependencies )
213− KernelInfo Kernel.Info
216−parseKernel :: Text -> Either Error KernelInfo
217−parseKernel sourceCode =
218− case Parse.run Kernel.parser sourceCode of
220− Right (KernelInfo info)
223− Left (Error (A.map Error.Syntax err))