on 22bb2ee help sign in
elk/src/Elm/Compiler.hs
89 lines 1.9 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 , errorsToDoc
11 , Warning.Warning
12 )
13 where
16import qualified Data.ByteString as BS
17import qualified Data.Map as Map
18import qualified Data.Text as Text
20import qualified Compile
21import qualified Elm.Compiler.Module as M
22import qualified Elm.Compiler.Version
23import qualified Elm.Package as Pkg
24import qualified Reporting.Error as Error
25import qualified Reporting.Helpers as H
26import qualified Reporting.Render.Code as Code
27import qualified Reporting.Render.Type as RenderType
28import qualified Reporting.Report as Report
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
84errorsToDoc :: FilePath -> Text.Text -> Localizer -> [Error.Error] -> H.Doc
85errorsToDoc filePath source (Localizer localizer) errors =
86 H.vcat $
87 map
88 (Report.toDoc filePath)
89 (concatMap (Error.toReports (Code.toSource source) localizer) errors)