on master help sign in
handle docs errors / update JSON encoding
f4401acEvan Czaplicki
compiler/src/Reporting/Error.hs+13−11
@@ -10,10 +10,8 @@ module Reporting.Error
10
10
11
11
12import qualified Data.ByteString as B
12import qualified Data.ByteString as B
13−import qualified Data.Name as Name
14import qualified Data.NonEmptyList as NE
13import qualified Data.NonEmptyList as NE
15import qualified Data.OneOrMore as OneOrMore
14import qualified Data.OneOrMore as OneOrMore
16−import qualified Data.Utf8 as Utf8
17
15
18import qualified Elm.ModuleName as ModuleName
16import qualified Elm.ModuleName as ModuleName
19import qualified File
17import qualified File
@@ -22,6 +20,7 @@ import Json.Encode ((==>))
22import qualified Reporting.Annotation as A
20import qualified Reporting.Annotation as A
23import qualified Reporting.Doc as D
21import qualified Reporting.Doc as D
24import qualified Reporting.Error.Canonicalize as Canonicalize
22import qualified Reporting.Error.Canonicalize as Canonicalize
23+import qualified Reporting.Error.Docs as Docs
25import qualified Reporting.Error.Import as Import
24import qualified Reporting.Error.Import as Import
26import qualified Reporting.Error.Main as Main
25import qualified Reporting.Error.Main as Main
27import qualified Reporting.Error.Pattern as Pattern
26import qualified Reporting.Error.Pattern as Pattern
@@ -57,6 +56,7 @@ data Error
57 | BadTypes L.Localizer (NE.List Type.Error)
56 | BadTypes L.Localizer (NE.List Type.Error)
58 | BadMains L.Localizer (OneOrMore.OneOrMore Main.Error)
57 | BadMains L.Localizer (OneOrMore.OneOrMore Main.Error)
59 | BadPatterns (NE.List Pattern.Error)
58 | BadPatterns (NE.List Pattern.Error)
59+ | BadDocs Docs.Error
60
60
61
61
62
62
@@ -84,6 +84,9 @@ toReports source err =
84 BadPatterns errs ->
84 BadPatterns errs ->
85 fmap (Pattern.toReport source) errs
85 fmap (Pattern.toReport source) errs
86
86
87+ BadDocs docsErr ->
88+ Docs.toReports source docsErr
89+
87
90
88
91
89-- TO DOC
92-- TO DOC
@@ -92,8 +95,7 @@ toReports source err =
92toDoc :: Module -> [Module] -> D.Doc
95toDoc :: Module -> [Module] -> D.Doc
93toDoc err errs =
96toDoc err errs =
94 let
97 let
95− timeCompare m1 m2 = compare (_time m1) (_time m2)
96− (NE.List m ms) = NE.sortBy timeCompare (NE.List err errs)
98+ (NE.List m ms) = NE.sortBy _time (NE.List err errs)
97 in
99 in
98 D.vcat (toDocHelp m ms)
100 D.vcat (toDocHelp m ms)
99
101
@@ -173,8 +175,8 @@ toJson (Module name path _ source err) =
173 toReports (Code.toSource source) err
175 toReports (Code.toSource source) err
174 in
176 in
175 E.object
177 E.object
176− [ "path" ==> E.string (Utf8.fromChars path)
178+ [ "path" ==> E.chars path
177− , "name" ==> E.string (Name.toUtf8 name)
179+ , "name" ==> E.name name
178 , "problems" ==> E.array (map reportToJson (NE.toList reports))
180 , "problems" ==> E.array (map reportToJson (NE.toList reports))
179 ]
181 ]
180
182
@@ -182,7 +184,7 @@ toJson (Module name path _ source err) =
182reportToJson :: Report.Report -> E.Value
184reportToJson :: Report.Report -> E.Value
183reportToJson (Report.Report title region _sgstns message) =
185reportToJson (Report.Report title region _sgstns message) =
184 E.object
186 E.object
185− [ "title" ==> E.string (Utf8.fromChars title)
187+ [ "title" ==> E.chars title
186 , "region" ==> encodeRegion region
188 , "region" ==> encodeRegion region
187 , "message" ==> D.encode message
189 , "message" ==> D.encode message
188 ]
190 ]
@@ -193,12 +195,12 @@ encodeRegion (A.Region (A.Position sr sc) (A.Position er ec)) =
193 E.object
195 E.object
194 [ "start" ==>
196 [ "start" ==>
195 E.object
197 E.object
196− [ ("line", E.int (fromIntegral sr))
198+ [ "line" ==> E.int (fromIntegral sr)
197− , ("column", E.int (fromIntegral sc))
199+ , "column" ==> E.int (fromIntegral sc)
198 ]
200 ]
199 , "end" ==>
201 , "end" ==>
200 E.object
202 E.object
201− [ ("line", E.int (fromIntegral er))
203+ [ "line" ==> E.int (fromIntegral er)
202− , ("column", E.int (fromIntegral ec))
204+ , "column" ==> E.int (fromIntegral ec)
203 ]
205 ]
204 ]
206 ]