on fa1853e help sign in
elk/src/Reporting/Error.hs
80 lines 2.3 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.PrettyPrint as P
14import qualified Reporting.Report as Report
17-- ALL POSSIBLE ERRORS
19data Error
20 = Syntax Syntax.Error
21 | Canonicalize Canonicalize.Error
22 | Type Type.Error
25-- TO REPORT
27toReport :: P.Dealiaser -> Error -> Report.Report
28toReport dealiaser err =
29 case err of
30 Syntax syntaxError ->
31 Syntax.toReport dealiaser syntaxError
33 Canonicalize canonicalizeError ->
34 Canonicalize.toReport dealiaser canonicalizeError
36 Type typeError ->
37 Type.toReport dealiaser typeError
40-- TO STRING
42toString :: P.Dealiaser -> String -> String -> A.Located Error -> String
43toString dealiaser location source (A.A region err) =
44 Report.toString location region (toReport dealiaser err) source
47print :: P.Dealiaser -> String -> String -> A.Located Error -> IO ()
48print dealiaser location source (A.A region err) =
49 Report.printError location region (toReport dealiaser err) source
52-- TO JSON
54toJson :: P.Dealiaser -> FilePath -> A.Located Error -> Json.Value
55toJson dealiaser filePath (A.A region err) =
56 let
57 (maybeRegion, additionalFields) =
58 case err of
59 Syntax syntaxError ->
60 Report.toJson [] (Syntax.toReport dealiaser syntaxError)
62 Canonicalize canonicalizeError ->
63 let
64 suggestions =
65 maybe []
66 (\s -> ["suggestions" .= s])
67 (Canonicalize.extractSuggestions canonicalizeError)
68 in
69 Report.toJson suggestions (Canonicalize.toReport dealiaser canonicalizeError)
71 Type typeError ->
72 Report.toJson [] (Type.toReport dealiaser typeError)
73 in
74 Json.object $
75 [ "file" .= filePath
76 , "region" .= region
77 , "subregion" .= maybeRegion
78 , "type" .= ("error" :: String)
79 ]
80 ++ additionalFields