on 74db13f 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.Render.Type as RenderType
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 :: RenderType.Localizer -> Error -> Report.Report
32toReport localizer err =
33 case err of
34 Syntax syntaxError ->
35 Syntax.toReport localizer syntaxError
37 Canonicalize canonicalizeError ->
38 Canonicalize.toReport localizer canonicalizeError
40 Type typeError ->
41 Type.toReport localizer typeError
43 Pattern patternError ->
44 Pattern.toReport localizer patternError
46 Docs docsError ->
47 Docs.toReport docsError
50-- TO STRING
52toString :: RenderType.Localizer -> String -> String -> A.Located Error -> String
53toString localizer location source (A.A region err) =
54 Report.toString location region (toReport localizer err) source
57print :: RenderType.Localizer -> String -> String -> A.Located Error -> IO ()
58print localizer location source (A.A region err) =
59 Report.printError location region (toReport localizer err) source
62-- TO JSON
64toJson :: RenderType.Localizer -> FilePath -> A.Located Error -> Json.Value
65toJson localizer filePath (A.A region err) =
66 let
67 (maybeRegion, additionalFields) =
68 case err of
69 Syntax syntaxError ->
70 Report.toJson [] (Syntax.toReport localizer 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 localizer canonicalizeError)
81 Type typeError ->
82 Report.toJson [] (Type.toReport localizer typeError)
84 Pattern patternError ->
85 Report.toJson [] (Pattern.toReport localizer 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