on db277d9 help sign in
elk/src/Reporting/Error.hs
78 lines 2.0 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Reporting.Error where
5import Data.Aeson ((.=))
6import qualified Data.Aeson as Json
7import Prelude hiding (print)
9import qualified Reporting.Annotation as A
10import qualified Reporting.Error.Canonicalize as Canonicalize
11import qualified Reporting.Error.Syntax as Syntax
12import qualified Reporting.Error.Type as Type
13import qualified Reporting.Report as Report
16-- ALL POSSIBLE ERRORS
18data Error
19 = Syntax Syntax.Error
20 | Canonicalize Canonicalize.Error
21 | Type Type.Error
24-- TO REPORT
26toReport :: Error -> Report.Report
27toReport err =
28 case err of
29 Syntax syntaxError ->
30 Syntax.toReport syntaxError
32 Canonicalize canonicalizeError ->
33 Canonicalize.toReport canonicalizeError
35 Type typeError ->
36 Type.toReport typeError
39-- TO STRING
41toString :: String -> String -> A.Located Error -> String
42toString location source (A.A region err) =
43 Report.toString location region (toReport err) source
46print :: String -> String -> A.Located Error -> IO ()
47print location source (A.A region err) =
48 Report.printError location region (toReport err) source
51-- TO JSON
53toJson :: FilePath -> A.Located Error -> Json.Value
54toJson filePath (A.A region err) =
55 let
56 (maybeRegion, additionalFields) =
57 case err of
58 Syntax syntaxError ->
59 Report.toJson [] (Syntax.toReport syntaxError)
61 Canonicalize canonicalizeError ->
62 let
63 suggestions =
64 maybe []
65 (\s -> ["suggestions" .= s])
66 (Canonicalize.extractSuggestions canonicalizeError)
67 in
68 Report.toJson suggestions (Canonicalize.toReport canonicalizeError)
70 Type typeError ->
71 Report.toJson [] (Type.toReport typeError)
72 in
73 Json.object $
74 [ "file" .= filePath
75 , "region" .= maybe region id maybeRegion
76 , "type" .= ("error" :: String)
77 ]
78 ++ additionalFields