summaryrefslogtreecommitdiff
path: root/src/Conftrack/Pretty.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Conftrack/Pretty.hs')
-rw-r--r--src/Conftrack/Pretty.hs40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/Conftrack/Pretty.hs b/src/Conftrack/Pretty.hs
new file mode 100644
index 0000000..8a11204
--- /dev/null
+++ b/src/Conftrack/Pretty.hs
@@ -0,0 +1,40 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Conftrack.Pretty where
+
+
+import Conftrack.Value (Origin (..), ConfigError, ConfigValue (..))
+import Conftrack (Warning)
+import Data.Map (Map)
+import Conftrack.Value (Key)
+import qualified Data.Map.Strict as M
+import qualified Data.Text.IO as T
+import qualified Data.Text as T
+import Data.List (sortOn)
+import GHC.Exts (groupWith)
+
+
+printConfigErrors :: [ConfigError] -> IO ()
+printConfigErrors = mapM_ print
+
+-- TODO: perhaps sort it by source, not by key?
+-- also, shadowed values are currently never read
+printConfigOrigins :: Map Key [Origin] -> IO ()
+printConfigOrigins =
+ mapM_ (T.putStrLn . prettyOrigin)
+ . groupWith ((\(Origin _ s) -> s) . head . snd)
+ . filter (not . null . snd)
+ . M.toList
+ where prettyOrigin origins =
+ T.concat $ originSource (snd (head origins)) : fmap prettyKey origins
+ prettyKey (key, []) = "\n " <> T.pack (show key)
+ prettyKey (key, (Origin val _):shadowed) = T.concat $
+ ["\n ", T.pack $ show key, " = ", prettyValue val]
+ <> fmap (\(Origin _ text) -> "\n (occurrance in "<>text<>" shadowed)") shadowed
+ originSource [] = "default value"
+ originSource (Origin _ text:_) = text
+
+
+
+printConfigWarnings :: [Warning] -> IO ()
+printConfigWarnings = mapM_ print