on 2ecbee3 help sign in
elk/compiler/src/Elm/Compiler.hs
94 lines 2.2 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.Version
21import qualified Elm.Interface as I
22import qualified Elm.ModuleName as ModuleName
23import qualified Elm.Package as Pkg
24import qualified Json.Encode as Encode
25import qualified Reporting.Doc as D
26import qualified Reporting.Error as Error
27import qualified Reporting.Render.Code as Code
28import qualified Reporting.Region as Region
29import qualified Reporting.Report as Report
30import qualified Reporting.Result as Result
31import qualified Reporting.Warning as Warning
35-- VERSION
38version :: Pkg.Version
39version =
40 Elm.Compiler.Version.version
44-- COMPILE
47compile
48 :: Compile.DocsFlag
49 -> Pkg.Name
50 -> Map.Map ModuleName.Raw ModuleName.Canonical
51 -> I.Interfaces
52 -> BS.ByteString
53 -> ( [Warning.Warning], Either [Error.Error] Compile.Artifacts )
54compile docsFlag pkg importDict interfaces source =
55 Result.run $ Compile.compile docsFlag pkg importDict interfaces source
59-- ERRORS TO DOC
62errorsToDoc :: FilePath -> Text.Text -> [Error.Error] -> D.Doc
63errorsToDoc filePath source errors =
64 let
65 reports =
66 concatMap (Error.toReports (Code.toSource source)) errors
67 in
68 D.vcat $ map (Report.toDoc filePath) reports
72-- ERRORS TO JSON
75errorsToJson :: ModuleName.Raw -> FilePath -> Text.Text -> [Error.Error] -> Encode.Value
76errorsToJson moduleName filePath source errors =
77 let
78 reports =
79 concatMap (Error.toReports (Code.toSource source)) errors
80 in
81 Encode.object
82 [ ("path", Encode.text (Text.pack filePath))
83 , ("name", Encode.name moduleName)
84 , ("problems", Encode.array (map reportToJson reports))
85 ]
88reportToJson :: Report.Report -> Encode.Value
89reportToJson (Report.Report title region _sgstns message) =
90 Encode.object
91 [ ("title", Encode.text (Text.pack title))
92 , ("region", Region.encode region)
93 , ("message", D.encode message)
94 ]