on d814a8a help sign in
elk/src/Reporting/Error.hs
96 lines 2.8 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.Docs as Docs
12import qualified Reporting.Error.Pattern as Pattern
13import qualified Reporting.Error.Syntax as Syntax
14import qualified Reporting.Error.Type as Type
15import qualified Reporting.PrettyPrint as P
16import qualified Reporting.Report as Report
19-- ALL POSSIBLE ERRORS
21data Error
22 = Syntax Syntax.Error
23 | Canonicalize Canonicalize.Error
24 | Type Type.Error
25 | Pattern Pattern.Error
26 | Docs Docs.Error
29-- TO REPORT
31toReport :: P.Dealiaser -> Error -> Report.Report
32toReport dealiaser err =
33 case err of
34 Syntax syntaxError ->
35 Syntax.toReport dealiaser syntaxError
37 Canonicalize canonicalizeError ->
38 Canonicalize.toReport dealiaser canonicalizeError
40 Type typeError ->
41 Type.toReport dealiaser typeError
43 Pattern patternError ->
44 Pattern.toReport dealiaser patternError
46 Docs docsError ->
47 Docs.toReport docsError
50-- TO STRING
52toString :: P.Dealiaser -> String -> String -> A.Located Error -> String
53toString dealiaser location source (A.A region err) =
54 Report.toString location region (toReport dealiaser err) source
57print :: P.Dealiaser -> String -> String -> A.Located Error -> IO ()
58print dealiaser location source (A.A region err) =
59 Report.printError location region (toReport dealiaser err) source
62-- TO JSON
64toJson :: P.Dealiaser -> FilePath -> A.Located Error -> Json.Value
65toJson dealiaser filePath (A.A region err) =
66 let
67 (maybeRegion, additionalFields) =
68 case err of
69 Syntax syntaxError ->
70 Report.toJson [] (Syntax.toReport dealiaser syntaxError)
72 Canonicalize canonicalizeError ->
73 let
74 suggestions =
75 maybe []
76 (\s -> ["suggestions" .= s])
77 (Canonicalize.extractSuggestions canonicalizeError)
78 in
79 Report.toJson suggestions (Canonicalize.toReport dealiaser canonicalizeError)
81 Type typeError ->
82 Report.toJson [] (Type.toReport dealiaser typeError)
84 Pattern patternError ->
85 Report.toJson [] (Pattern.toReport dealiaser patternError)
87 Docs docsError ->
88 Report.toJson [] (Docs.toReport docsError)
89 in
90 Json.object $
91 [ "file" .= filePath
92 , "region" .= region
93 , "subregion" .= maybeRegion
94 , "type" .= ("error" :: String)
95 ]
96 ++ additionalFields