module Test.Sandwich.Formatters.Print.CallStacks where

import Control.Monad
import GHC.Stack
import Test.Sandwich.Formatters.Print.Color
import Test.Sandwich.Formatters.Print.Printing


printCallStack :: CallStack -> m ()
printCallStack CallStack
cs = forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
t a -> (a -> m b) -> m ()
forM_ (CallStack -> [([Char], SrcLoc)]
getCallStack CallStack
cs) forall {m :: * -> *}.
(MonadReader (PrintFormatter, Int, Handle) m, MonadIO m) =>
([Char], SrcLoc) -> m ()
printCallStackLine

printCallStackLine :: ([Char], SrcLoc) -> m ()
printCallStackLine ([Char]
f, (SrcLoc {Int
[Char]
srcLocEndCol :: SrcLoc -> Int
srcLocEndLine :: SrcLoc -> Int
srcLocFile :: SrcLoc -> [Char]
srcLocModule :: SrcLoc -> [Char]
srcLocPackage :: SrcLoc -> [Char]
srcLocStartCol :: SrcLoc -> Int
srcLocStartLine :: SrcLoc -> Int
srcLocEndCol :: Int
srcLocEndLine :: Int
srcLocStartCol :: Int
srcLocStartLine :: Int
srcLocFile :: [Char]
srcLocModule :: [Char]
srcLocPackage :: [Char]
..})) = do
  forall {m :: * -> *}.
(MonadReader (PrintFormatter, Int, Handle) m, MonadIO m) =>
Colour Float -> [Char] -> m ()
pic Colour Float
logFunctionColor [Char]
f

  forall {b} {m :: * -> *}.
(MonadReader (PrintFormatter, b, Handle) m, MonadIO m) =>
[Char] -> m ()
p [Char]
" called at "
  forall {b} {m :: * -> *}.
(MonadReader (PrintFormatter, b, Handle) m, MonadIO m) =>
Colour Float -> [Char] -> m ()
pc Colour Float
logFilenameColor [Char]
srcLocFile
  forall {b} {m :: * -> *}.
(MonadReader (PrintFormatter, b, Handle) m, MonadIO m) =>
[Char] -> m ()
p [Char]
":"
  forall {b} {m :: * -> *}.
(MonadReader (PrintFormatter, b, Handle) m, MonadIO m) =>
Colour Float -> [Char] -> m ()
pc Colour Float
logLineColor (forall a. Show a => a -> [Char]
show Int
srcLocStartLine)
  forall {b} {m :: * -> *}.
(MonadReader (PrintFormatter, b, Handle) m, MonadIO m) =>
[Char] -> m ()
p [Char]
":"
  forall {b} {m :: * -> *}.
(MonadReader (PrintFormatter, b, Handle) m, MonadIO m) =>
Colour Float -> [Char] -> m ()
pc Colour Float
logChColor (forall a. Show a => a -> [Char]
show Int
srcLocStartCol)
  forall {b} {m :: * -> *}.
(MonadReader (PrintFormatter, b, Handle) m, MonadIO m) =>
[Char] -> m ()
p [Char]
" in "
  forall {b} {m :: * -> *}.
(MonadReader (PrintFormatter, b, Handle) m, MonadIO m) =>
Colour Float -> [Char] -> m ()
pc Colour Float
logPackageColor [Char]
srcLocPackage
  forall {b} {m :: * -> *}.
(MonadReader (PrintFormatter, b, Handle) m, MonadIO m) =>
[Char] -> m ()
p [Char]
":"
  forall {b} {m :: * -> *}.
(MonadReader (PrintFormatter, b, Handle) m, MonadIO m) =>
Colour Float -> [Char] -> m ()
pc Colour Float
logModuleColor [Char]
srcLocModule
  forall {b} {m :: * -> *}.
(MonadReader (PrintFormatter, b, Handle) m, MonadIO m) =>
[Char] -> m ()
p [Char]
"\n"

logFunctionColor :: Colour Float
logFunctionColor = Colour Float
solarizedMagenta
logFilenameColor :: Colour Float
logFilenameColor = Colour Float
solarizedViolet
logModuleColor :: Colour Float
logModuleColor = Colour Float
solarizedMagenta
logPackageColor :: Colour Float
logPackageColor = Colour Float
solarizedGreen
logLineColor :: Colour Float
logLineColor = Colour Float
solarizedCyan
logChColor :: Colour Float
logChColor = Colour Float
solarizedOrange