on 10fa496 help sign in
elk/compiler/src/Elm/Compiler.hs
93 lines 2.1 kB history raw
1{-# LANGUAGE OverloadedStrings #-}
2module Elm.Compiler
3 ( version
4 , Compile.DocsFlag(..)
5 , Compile.Artifacts(..)
6 , compile
7 , Error.Error
8 , errorsToDoc
9 , errorsToJson
10 , Warning.Warning
11 )
12 where
15import qualified Data.ByteString as BS
16import qualified Data.Map as Map
17import qualified Data.Text as Text
19import qualified Compile
20import qualified Elm.Compiler.Module as M
21import qualified Elm.Compiler.Version
22import qualified Elm.Package as Pkg
23import qualified Json.Encode as Encode
24import qualified Reporting.Doc as D
25import qualified Reporting.Error as Error
26import qualified Reporting.Render.Code as Code
27import qualified Reporting.Region as Region
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
46compile
47 :: Compile.DocsFlag
48 -> Pkg.Name
49 -> Map.Map M.Raw M.Canonical
50 -> M.Interfaces
51 -> BS.ByteString
52 -> ( [Warning.Warning], Either [Error.Error] Compile.Artifacts )
53compile docsFlag pkg importDict interfaces source =
54 Result.run $ Compile.compile docsFlag pkg importDict interfaces source
58-- ERRORS TO DOC
61errorsToDoc :: FilePath -> Text.Text -> [Error.Error] -> D.Doc
62errorsToDoc filePath source errors =
63 let
64 reports =
65 concatMap (Error.toReports (Code.toSource source)) errors
66 in
67 D.vcat $ map (Report.toDoc filePath) reports
71-- ERRORS TO JSON
74errorsToJson :: M.Raw -> FilePath -> Text.Text -> [Error.Error] -> Encode.Value
75errorsToJson moduleName filePath source errors =
76 let
77 reports =
78 concatMap (Error.toReports (Code.toSource source)) errors
79 in
80 Encode.object
81 [ ("path", Encode.text (Text.pack filePath))
82 , ("name", Encode.name moduleName)
83 , ("problems", Encode.array (map reportToJson reports))
84 ]
87reportToJson :: Report.Report -> Encode.Value
88reportToJson (Report.Report title region _sgstns message) =
89 Encode.object
90 [ ("title", Encode.text (Text.pack title))
91 , ("region", Region.encode region)
92 , ("message", D.encode message)
93 ]