on b5df201 help sign in
elk/src/Reporting/Error.hs
89 lines 2.4 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Reporting.Error where
5import Data.Aeson ((.=))
6import qualified Data.Aeson as Json
8import qualified Reporting.Annotation as A
9import qualified Reporting.Error.Canonicalize as Canonicalize
10import qualified Reporting.Error.Docs as Docs
11import qualified Reporting.Error.Pattern as Pattern
12import qualified Reporting.Error.Syntax as Syntax
13import qualified Reporting.Error.Type as Type
14import qualified Reporting.Render.Type as RenderType
15import qualified Reporting.Report as Report
19-- ALL POSSIBLE ERRORS
22data Error
23 = Syntax Syntax.Error
24 | Canonicalize Canonicalize.Error
25 | Type Type.Error
26 | Pattern Pattern.Error
27 | Docs Docs.Error
31-- TO REPORT
34toReport :: RenderType.Localizer -> Error -> Report.Report
35toReport localizer err =
36 case err of
37 Syntax syntaxError ->
38 Syntax.toReport localizer syntaxError
40 Canonicalize canonicalizeError ->
41 Canonicalize.toReport localizer canonicalizeError
43 Type typeError ->
44 Type.toReport localizer typeError
46 Pattern patternError ->
47 Pattern.toReport localizer patternError
49 Docs docsError ->
50 Docs.toReport docsError
54-- TO JSON
57toJson :: RenderType.Localizer -> FilePath -> A.Located Error -> Json.Value
58toJson localizer filePath (A.A region err) =
59 let
60 (maybeRegion, additionalFields) =
61 case err of
62 Syntax syntaxError ->
63 Report.toJson [] (Syntax.toReport localizer syntaxError)
65 Canonicalize canonicalizeError ->
66 let
67 suggestions =
68 maybe []
69 (\s -> ["suggestions" .= s])
70 (Canonicalize.extractSuggestions canonicalizeError)
71 in
72 Report.toJson suggestions (Canonicalize.toReport localizer canonicalizeError)
74 Type typeError ->
75 Report.toJson [] (Type.toReport localizer typeError)
77 Pattern patternError ->
78 Report.toJson [] (Pattern.toReport localizer patternError)
80 Docs docsError ->
81 Report.toJson [] (Docs.toReport docsError)
82 in
83 Json.object $
84 [ "file" .= filePath
85 , "region" .= region
86 , "subregion" .= maybeRegion
87 , "type" .= ("error" :: String)
88 ]
89 ++ additionalFields