on master help sign in
Provide way to turn errors to JSON
f9540d6Evan Czaplicki
compiler/src/Elm/Compiler.hs+40−6
@@ -1,4 +1,4 @@
1−{-# OPTIONS_GHC -Wall #-}
1+{-# LANGUAGE OverloadedStrings #-}
2module Elm.Compiler
2module Elm.Compiler
3 ( version
3 ( version
4 , Context(..)
4 , Context(..)
@@ -6,6 +6,7 @@ module Elm.Compiler
6 , compile
6 , compile
7 , Error.Error
7 , Error.Error
8 , errorsToDoc
8 , errorsToDoc
9+ , errorsToJson
9 , Warning.Warning
10 , Warning.Warning
10 )
11 )
11 where
12 where
@@ -14,14 +15,17 @@ module Elm.Compiler
14import qualified Data.ByteString as BS
15import qualified Data.ByteString as BS
15import qualified Data.Map as Map
16import qualified Data.Map as Map
16import qualified Data.Text as Text
17import qualified Data.Text as Text
18+import qualified Text.PrettyPrint.ANSI.Leijen as P
17
19
18import qualified Compile
20import qualified Compile
19import qualified Elm.Compiler.Module as M
21import qualified Elm.Compiler.Module as M
20import qualified Elm.Compiler.Version
22import qualified Elm.Compiler.Version
21import qualified Elm.Package as Pkg
23import qualified Elm.Package as Pkg
24+import qualified Json.Encode as Encode
22import qualified Reporting.Error as Error
25import qualified Reporting.Error as Error
23import qualified Reporting.Helpers as H
26import qualified Reporting.Helpers as H
24import qualified Reporting.Render.Code as Code
27import qualified Reporting.Render.Code as Code
28+import qualified Reporting.Region as Region
25import qualified Reporting.Report as Report
29import qualified Reporting.Report as Report
26import qualified Reporting.Result as Result
30import qualified Reporting.Result as Result
27import qualified Reporting.Warning as Warning
31import qualified Reporting.Warning as Warning
@@ -59,12 +63,42 @@ compile (Context pkg exposed importDict interfaces) source =
59
63
60
64
61
65
62−-- ERRORS
66+-- ERRORS TO DOC
63
67
64
68
65errorsToDoc :: FilePath -> Text.Text -> [Error.Error] -> H.Doc
69errorsToDoc :: FilePath -> Text.Text -> [Error.Error] -> H.Doc
66errorsToDoc filePath source errors =
70errorsToDoc filePath source errors =
67− H.vcat $
71+ let
68− map
72+ reports =
73+ concatMap (Error.toReports (Code.toSource source) Map.empty) errors
74+ in
69− (Report.toDoc filePath)
75+ H.vcat $ map (Report.toDoc filePath) reports
76+
77+
78+
79+-- ERRORS TO JSON
80+
81+
82+errorsToJson :: FilePath -> Text.Text -> [Error.Error] -> Encode.Value
83+errorsToJson filePath source errors =
84+ let
85+ reports =
70− (concatMap (Error.toReports (Code.toSource source) Map.empty) errors)
86+ concatMap (Error.toReports (Code.toSource source) Map.empty) errors
87+ in
88+ Encode.object
89+ [ ("path", Encode.text (Text.pack filePath))
90+ , ("errors", Encode.array (map reportToJson reports))
91+ ]
92+
93+
94+reportToJson :: Report.Report -> Encode.Value
95+reportToJson (Report.Report title region _sgstns message) =
96+ let
97+ messageString =
98+ P.displayS (P.renderPretty 1 80 message) ""
99+ in
100+ Encode.object
101+ [ ("title", Encode.text (Text.pack title))
102+ , ("region", Region.encode region)
103+ , ("message", Encode.text (Text.pack messageString))
104+ ]