on master help sign in
errorToDoc replaces errorToString and errorToStdout

The idea is that the error formatting should be managed by the cli tool, not the compiler itself. Eventually, all of the error message generation stuff may be moved to a separate place.

commit65e6ff161eabc1040a77127059be736d4227075e authorEvan Czaplicki <evancz@users.noreply.github.com> dateFri 3 Mar 2017, 13:55 (10 years ago) parent9dbd825
2 files changed+22−58
src/Elm/Compiler.hs+15−25 src/Reporting/Report.hs+7−33
src/Elm/Compiler.hs+15−25
@@ -4,8 +4,8 @@ module Elm.Compiler
44 , parseDependencies, Tag(..)
55 , compile, Context(..), Result(..)
66 , Localizer, dummyLocalizer
7− , Error, errorToString, errorToJson, printError
8− , Warning, warningToString, warningToJson, printWarning
7+ , Error, errorToDoc, errorToJson
8+ , Warning, warningToDoc, warningToJson
99 )
1010 where
1111
@@ -13,7 +13,7 @@ import qualified Data.Aeson as Json
1313import qualified Data.Map as Map
1414import qualified Data.Text.Lazy as LazyText
1515import Data.Text (Text)
16−import System.IO (Handle)
16+import Text.PrettyPrint.ANSI.Leijen (Doc)
1717
1818import qualified AST.Module as Module
1919import qualified AST.Module.Name as ModuleName
@@ -55,18 +55,18 @@ data Tag
5555 | Port
5656
5757
58−parseDependencies :: Maybe Package.Name -> Text -> Either Error (Tag, M.Raw, [M.Raw])
59−parseDependencies maybePkgName sourceCode =
58+parseDependencies :: Package.Name -> Text -> Either Error (Tag, M.Raw, [M.Raw])
59+parseDependencies pkgName sourceCode =
6060 case Parse.run Parse.header sourceCode of
6161 Right header ->
62− Right $ getDeps maybePkgName header
62+ Right $ getDeps pkgName header
6363
6464 Left err ->
6565 Left (Error (A.map Error.Syntax err))
6666
6767
68−getDeps :: Maybe Package.Name -> Module.Header [Module.UserImport] -> (Tag, M.Raw, [M.Raw])
69−getDeps maybePkgName (Module.Header sourceTag name _ _ _ imports) =
68+getDeps :: Package.Name -> Module.Header [Module.UserImport] -> (Tag, M.Raw, [M.Raw])
69+getDeps pkgName (Module.Header sourceTag name _ _ _ imports) =
7070 let
7171 tag =
7272 case sourceTag of
@@ -75,7 +75,7 @@ getDeps maybePkgName (Module.Header sourceTag name _ _ _ imports) =
7575 Module.Effect _ -> Effect
7676
7777 deps =
78− if maybePkgName == Just Package.core then
78+ if pkgName == Package.core then
7979 map (fst . A.drop) imports
8080 else
8181 map (fst . A.drop) imports ++ map fst Imports.defaults
@@ -159,14 +159,9 @@ newtype Error =
159159 Error (A.Located Error.Error)
160160
161161
162−errorToString :: Localizer -> String -> Text -> Error -> String
163−errorToString (Localizer localizer) location source (Error (A.A region err)) =
164− Report.toString location region (Error.toReport localizer err) source
165−
166−
167−printError :: Handle -> Localizer -> String -> Text -> Error -> IO ()
168−printError handle (Localizer localizer) location source (Error (A.A region err)) =
169− Report.toHandle handle location region (Error.toReport localizer err) source
162+errorToDoc :: Localizer -> String -> Text -> Error -> Doc
163+errorToDoc (Localizer localizer) location source (Error (A.A region err)) =
164+ Report.toDoc location region (Error.toReport localizer err) source
170165
171166
172167errorToJson :: Localizer -> String -> Error -> Json.Value
@@ -182,14 +177,9 @@ newtype Warning =
182177 Warning (A.Located Warning.Warning)
183178
184179
185−warningToString :: Localizer -> String -> Text -> Warning -> String
186−warningToString (Localizer localizer) location source (Warning (A.A region wrn)) =
187− Report.toString location region (Warning.toReport localizer wrn) source
188−
189−
190−printWarning :: Handle -> Localizer -> String -> Text -> Warning -> IO ()
191−printWarning handle (Localizer localizer) location source (Warning (A.A region wrn)) =
192− Report.toHandle handle location region (Warning.toReport localizer wrn) source
180+warningToDoc :: Localizer -> String -> Text -> Warning -> Doc
181+warningToDoc (Localizer localizer) location source (Warning (A.A region wrn)) =
182+ Report.toDoc location region (Warning.toReport localizer wrn) source
193183
194184
195185warningToJson :: Localizer -> String -> Warning -> Json.Value
src/Reporting/Report.hs+7−33
@@ -3,9 +3,8 @@
33module Reporting.Report
44 ( Report
55 , report
6− , toString
6+ , toDoc
77 , toJson
8− , toHandle
98 )
109 where
1110
@@ -13,11 +12,7 @@ import Data.Aeson ((.=))
1312import qualified Data.Aeson.Types as Json
1413import qualified Data.Text as Text
1514import Data.Text (Text)
16−import System.IO (Handle)
17−import Text.PrettyPrint.ANSI.Leijen
18− ( Doc, (<>), displayS, displayIO, dullcyan
19− , hardline, plain, renderPretty, text
20− )
15+import Text.PrettyPrint.ANSI.Leijen (Doc, (<>), displayS, dullcyan, hardline, plain, renderPretty, text)
2116
2217import qualified Reporting.Helpers as Help
2318import qualified Reporting.Region as R
@@ -57,6 +52,11 @@ toJson extraFields (Report title subregion pre post) =
5752 (subregion, fields ++ extraFields)
5853
5954
55+nonAnsiRender :: Doc -> String
56+nonAnsiRender doc =
57+ displayS (renderPretty 1 80 (plain doc)) ""
58+
59+
6060
6161-- REPORT TO DOC
6262
@@ -83,29 +83,3 @@ messageBar tag location =
8383 "-- " ++ Text.unpack tag
8484 ++ " " ++ replicate (max 1 (80 - usedSpace)) '-'
8585 ++ " " ++ location
86−
87−
88−
89−-- RENDER DOCS
90−
91−
92−toHandle :: Handle -> String -> R.Region -> Report -> Text -> IO ()
93−toHandle handle location region rprt source =
94− displayIO
95− handle
96− (renderPretty 1 80 (toDoc location region rprt source))
97−
98−
99−toString :: String -> R.Region -> Report -> Text -> String
100−toString location region rprt source =
101− nonAnsiRender (toDoc location region rprt source)
102−
103−
104−
105−-- DOC TO STRING WITH NO ANSI CODES
106−
107−
108−nonAnsiRender :: Doc -> String
109−nonAnsiRender doc =
110− displayS (renderPretty 1 80 (plain doc)) ""
111−