@@ -1,36 +1,31 @@
11{-# OPTIONS_GHC -Wall #-}
22module Elm.Compiler
33 ( version
4− , compile, Context(..), Result(..)
5− , generate, JS.Target(..)
6− , Localizer, dummyLocalizer
7− , I.Error, errorToDoc, errorToJson
8− , I.Warning, warningToDoc, warningToJson
4+ , Context(..)
5+ , Compile.Artifacts(..)
6+ , compile
7+ , Localizer
8+ , dummyLocalizer
9+ , Error.Error
10+ , errorToDoc
11+ , errorToJson
12+ , Warning.Warning
13+ , warningToDoc
14+ , warningToJson
915 )
1016 where
1117
1218import qualified Data.Aeson as Json
19+import qualified Data.ByteString as BS
1320import qualified Data.Map as Map
14−import Data.Text (Text)
15−import qualified Data.ByteString.Builder as BS
1621import Text.PrettyPrint.ANSI.Leijen (Doc)
1722
18−import qualified AST.Module as Module
19−import qualified AST.Module.Name as ModuleName
2023import qualified Compile
21−import qualified Docs.Check as Docs
22−import qualified Elm.Compiler.Internals as I
2324import qualified Elm.Compiler.Module as M
24−import qualified Elm.Compiler.Objects.Internal as Obj
2525import qualified Elm.Compiler.Version
26−import qualified Elm.Docs as Docs
27−import qualified Elm.Package as Package
28−import qualified Generate.JavaScript as JS
29−import qualified Reporting.Annotation as A
30−import qualified Reporting.Bag as Bag
26+import qualified Elm.Package as Pkg
3127import qualified Reporting.Error as Error
3228import qualified Reporting.Render.Type as RenderType
33−import qualified Reporting.Report as Report
3429import qualified Reporting.Result as Result
3530import qualified Reporting.Warning as Warning
3631
@@ -39,75 +34,34 @@ import qualified Reporting.Warning as Warning
3934-- VERSION
4035
4136
42−version :: Package.Version
37+version :: Pkg.Version
4338version =
4439 Elm.Compiler.Version.version
4540
4641
4742
48−-- COMPILATION
49−
50−
51−{-| Compiles Elm source code to JavaScript. -}
52−compile :: Context -> Text -> (Localizer, [I.Warning], Either [I.Error] Result)
53−compile (Context packageName exposed importDict interfaces) source =
54− let
55− (Result.Result oneLocalizer warnings answer) =
56− do modul <- Compile.compile packageName importDict interfaces source
57− docs <- Result.format id (docsGen exposed modul)
58−
59− let iface = Module.toInterface modul
60− let objs = Obj.fromModule modul
61−
62− return (Result docs iface objs)
63− in
64− ( Result.oneToValue dummyLocalizer Localizer oneLocalizer
65− , Bag.toList I.Warning warnings
66− , Result.answerToEither I.Error id answer
67− )
43+-- COMPILE
6844
6945
7046data Context =
7147 Context
72− { _package :: Package.Name
48+ { _package :: Pkg.Name
7349 , _exposed :: Bool
7450 , _imports :: Map.Map M.Raw M.Canonical
7551 , _interfaces :: M.Interfaces
7652 }
7753
7854
79−data Result =
80− Result
81− { _docs :: Maybe Docs.Module
82− , _iface :: M.Interface
83− , _objs :: Obj.Graph
84− }
85−
86−
87−
88−-- DOCUMENTATION
89−
90−
91−docsGen :: Bool -> Module.Optimized -> Result.Result () w Error.Error (Maybe Docs.Module)
92−docsGen isExposed (Module.Module name info) =
93− if not isExposed then
94− Result.ok Nothing
95−
96− else
97− let
98− toDocs checked =
99− Just (Docs.Module (ModuleName._module name) checked)
100− in
101− toDocs <$> Docs.check (Module.exports info) (Module.docs info)
102−
103−
104−
105−-- CODE GENERATION
106−
55+compile :: Context -> BS.ByteString -> (Localizer, [Warning.Warning], Either [Error.Error] Compile.Artifacts)
56+compile (Context pkg exposed importDict interfaces) source =
57+ let
58+ docsFlag =
59+ if exposed then Compile.YesDocs else Compile.NoDocs
10760
108−generate :: Bool -> JS.Target -> Obj.Graph -> Obj.Roots -> BS.Builder
109−generate =
110− JS.generate
61+ (warnings, errorOrArtifacts) =
62+ Result.run $ Compile.compile docsFlag pkg importDict interfaces source
63+ in
64+ ( dummyLocalizer, warnings, errorOrArtifacts )
11165
11266
11367
@@ -115,37 +69,37 @@ generate =
11569
11670
11771newtype Localizer =
118− Localizer RenderType.Localizer
72+ Localizer RenderType.Localizer
11973
12074
12175dummyLocalizer :: Localizer
12276dummyLocalizer =
123− Localizer Map.empty
77+ Localizer Map.empty
12478
12579
12680
12781-- ERRORS
12882
12983
130−errorToDoc :: Localizer -> String -> Text -> I.Error -> Doc
131−errorToDoc (Localizer localizer) location source (I.Error (A.A region err)) =
132− Report.toDoc location region (Error.toReport localizer err) source
84+errorToDoc :: Localizer -> String -> String -> Error.Error -> Doc
85+errorToDoc (Localizer localizer) location source err =
86+ error "TODO Report.toDoc" location (Error.toReport localizer err) source
13387
13488
135−errorToJson :: Localizer -> String -> I.Error -> Json.Value
136−errorToJson (Localizer localizer) location (I.Error err) =
137− Error.toJson localizer location err
89+errorToJson :: Localizer -> String -> Error.Error -> Json.Value
90+errorToJson (Localizer localizer) location err =
91+ error "TODO Error.toJson" localizer location err
13892
13993
14094
14195-- WARNINGS
14296
14397
144−warningToDoc :: Localizer -> String -> Text -> I.Warning -> Doc
145−warningToDoc (Localizer localizer) location source (I.Warning (A.A region wrn)) =
146− Report.toDoc location region (Warning.toReport localizer wrn) source
98+warningToDoc :: Localizer -> String -> String -> Warning.Warning -> Doc
99+warningToDoc (Localizer localizer) location source warning =
100+ error "TODO Report.toDoc" location (Warning.toReport localizer warning) source
147101
148102
149−warningToJson :: Localizer -> String -> I.Warning -> Json.Value
150−warningToJson (Localizer localizer) location (I.Warning wrn) =
151− Warning.toJson localizer location wrn
103+warningToJson :: Localizer -> String -> Warning.Warning -> Json.Value
104+warningToJson (Localizer localizer) location warning =
105+ error "TODO Warning.toJson" localizer location warning