on 474ec0d help sign in
elk/src/Elm/Compiler.hs
105 lines 2.3 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2module Elm.Compiler
3 ( version
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
15 )
16 where
18import qualified Data.Aeson as Json
19import qualified Data.ByteString as BS
20import qualified Data.Map as Map
21import Text.PrettyPrint.ANSI.Leijen (Doc)
23import qualified Compile
24import qualified Elm.Compiler.Module as M
25import qualified Elm.Compiler.Version
26import qualified Elm.Package as Pkg
27import qualified Reporting.Error as Error
28import qualified Reporting.Render.Type as RenderType
29import qualified Reporting.Result as Result
30import qualified Reporting.Warning as Warning
34-- VERSION
37version :: Pkg.Version
38version =
39 Elm.Compiler.Version.version
43-- COMPILE
46data Context =
47 Context
48 { _package :: Pkg.Name
49 , _exposed :: Bool
50 , _imports :: Map.Map M.Raw M.Canonical
51 , _interfaces :: M.Interfaces
52 }
55compile :: Context -> BS.ByteString -> (Localizer, [Warning.Warning], Either [Error.Error] Compile.Artifacts)
56compile (Context pkg exposed importDict interfaces) source =
57 let
58 docsFlag =
59 if exposed then Compile.YesDocs else Compile.NoDocs
61 (warnings, errorOrArtifacts) =
62 Result.run $ Compile.compile docsFlag pkg importDict interfaces source
63 in
64 ( dummyLocalizer, warnings, errorOrArtifacts )
68-- DEALIASER
71newtype Localizer =
72 Localizer RenderType.Localizer
75dummyLocalizer :: Localizer
76dummyLocalizer =
77 Localizer Map.empty
81-- ERRORS
84errorToDoc :: Localizer -> String -> String -> Error.Error -> Doc
85errorToDoc (Localizer localizer) location source err =
86 error "TODO Report.toDoc" location (Error.toReport localizer err) source
89errorToJson :: Localizer -> String -> Error.Error -> Json.Value
90errorToJson (Localizer localizer) location err =
91 error "TODO Error.toJson" localizer location err
95-- WARNINGS
98warningToDoc :: Localizer -> String -> String -> Warning.Warning -> Doc
99warningToDoc (Localizer localizer) location source warning =
100 error "TODO Report.toDoc" location (Warning.toReport localizer warning) source
103warningToJson :: Localizer -> String -> Warning.Warning -> Json.Value
104warningToJson (Localizer localizer) location warning =
105 error "TODO Warning.toJson" localizer location warning