on 2d29699 help sign in
elk/src/Reporting/Error.hs
88 lines 2.5 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.Syntax as Syntax
13import qualified Reporting.Error.Type as Type
14import qualified Reporting.PrettyPrint as P
15import qualified Reporting.Report as Report
18-- ALL POSSIBLE ERRORS
20data Error
21 = Syntax Syntax.Error
22 | Canonicalize Canonicalize.Error
23 | Type Type.Error
24 | Docs Docs.Error
27-- TO REPORT
29toReport :: P.Dealiaser -> Error -> Report.Report
30toReport dealiaser err =
31 case err of
32 Syntax syntaxError ->
33 Syntax.toReport dealiaser syntaxError
35 Canonicalize canonicalizeError ->
36 Canonicalize.toReport dealiaser canonicalizeError
38 Type typeError ->
39 Type.toReport dealiaser typeError
41 Docs docsError ->
42 Docs.toReport docsError
45-- TO STRING
47toString :: P.Dealiaser -> String -> String -> A.Located Error -> String
48toString dealiaser location source (A.A region err) =
49 Report.toString location region (toReport dealiaser err) source
52print :: P.Dealiaser -> String -> String -> A.Located Error -> IO ()
53print dealiaser location source (A.A region err) =
54 Report.printError location region (toReport dealiaser err) source
57-- TO JSON
59toJson :: P.Dealiaser -> FilePath -> A.Located Error -> Json.Value
60toJson dealiaser filePath (A.A region err) =
61 let
62 (maybeRegion, additionalFields) =
63 case err of
64 Syntax syntaxError ->
65 Report.toJson [] (Syntax.toReport dealiaser syntaxError)
67 Canonicalize canonicalizeError ->
68 let
69 suggestions =
70 maybe []
71 (\s -> ["suggestions" .= s])
72 (Canonicalize.extractSuggestions canonicalizeError)
73 in
74 Report.toJson suggestions (Canonicalize.toReport dealiaser canonicalizeError)
76 Type typeError ->
77 Report.toJson [] (Type.toReport dealiaser typeError)
79 Docs docsError ->
80 Report.toJson [] (Docs.toReport docsError)
81 in
82 Json.object $
83 [ "file" .= filePath
84 , "region" .= region
85 , "subregion" .= maybeRegion
86 , "type" .= ("error" :: String)
87 ]
88 ++ additionalFields