Pretty print message trace
authorLuke Lau <luke_lau@icloud.com>
Thu, 26 Jul 2018 21:13:42 +0000 (22:13 +0100)
committerLuke Lau <luke_lau@icloud.com>
Thu, 26 Jul 2018 21:13:42 +0000 (22:13 +0100)
Make colours a bit less eye-bleeding
Also implement logMessages config

haskell-lsp-test.cabal
src/Language/Haskell/LSP/Test/Parsing.hs
src/Language/Haskell/LSP/Test/Session.hs

index d3e9b20c2401bd63f9e282c18407f8ab9cd2598d..d3ef9402ab39ed547f9280c63b50791dc04a98de 100644 (file)
@@ -26,6 +26,7 @@ library
   build-depends:       base >= 4.7 && < 5
                      , haskell-lsp >= 0.4
                      , aeson
   build-depends:       base >= 4.7 && < 5
                      , haskell-lsp >= 0.4
                      , aeson
+                     , aeson-pretty
                      , ansi-terminal
                      , bytestring
                      , conduit
                      , ansi-terminal
                      , bytestring
                      , conduit
index 36349dae864f4fbd63aa82c6016d87da1bd52084..2936b31347f9db69ecf4b1a3951c552336953cfb 100644 (file)
@@ -10,6 +10,7 @@ import Control.Lens
 import Control.Monad.IO.Class
 import Control.Monad
 import Data.Aeson
 import Control.Monad.IO.Class
 import Control.Monad
 import Data.Aeson
+import Data.Aeson.Encode.Pretty
 import qualified Data.ByteString.Lazy.Char8 as B
 import Data.Conduit.Parser
 import Data.Maybe
 import qualified Data.ByteString.Lazy.Char8 as B
 import Data.Conduit.Parser
 import Data.Maybe
@@ -42,9 +43,10 @@ satisfy pred = do
 
   if pred x
     then do
 
   if pred x
     then do
-      liftIO $ do
-        setSGR [SetColor Foreground Vivid Magenta]
-        putStrLn $ "<-- " ++ B.unpack (encodeMsg x)
+      shouldLog <- asks $ logMessages . config
+      liftIO $ when shouldLog $ do
+        setSGR [SetColor Foreground Dull Magenta]
+        putStrLn $ "<-- " ++ B.unpack (encodeMsgPretty x)
         setSGR [Reset]
       return x
     else empty
         setSGR [Reset]
       return x
     else empty
@@ -86,6 +88,9 @@ castMsg = fromMaybe (error "Failed casting a message") . decode . encodeMsg
 encodeMsg :: FromServerMessage -> B.ByteString
 encodeMsg = encode . genericToJSON (defaultOptions { sumEncoding = UntaggedValue })
 
 encodeMsg :: FromServerMessage -> B.ByteString
 encodeMsg = encode . genericToJSON (defaultOptions { sumEncoding = UntaggedValue })
 
+encodeMsgPretty :: FromServerMessage -> B.ByteString
+encodeMsgPretty = encodePretty . genericToJSON (defaultOptions { sumEncoding = UntaggedValue })
+
 -- | Matches if the message is a log message notification or a show message notification/request.
 loggingNotification :: Session FromServerMessage
 loggingNotification = named "Logging notification" $ satisfy shouldSkip
 -- | Matches if the message is a log message notification or a show message notification/request.
 loggingNotification :: Session FromServerMessage
 loggingNotification = named "Logging notification" $ satisfy shouldSkip
index c9234780b8b881eda2f41198e56743db0da2d8a2..a58496d5234dff41854b0f5baba401658daeffc7 100644 (file)
@@ -35,6 +35,7 @@ import Control.Monad.Trans.State (StateT, runStateT)
 import qualified Control.Monad.Trans.State as State (get, put)
 import qualified Data.ByteString.Lazy.Char8 as B
 import Data.Aeson
 import qualified Control.Monad.Trans.State as State (get, put)
 import qualified Data.ByteString.Lazy.Char8 as B
 import Data.Aeson
+import Data.Aeson.Encode.Pretty
 import Data.Conduit as Conduit
 import Data.Conduit.Parser as Parser
 import Data.Default
 import Data.Conduit as Conduit
 import Data.Conduit.Parser as Parser
 import Data.Default
@@ -276,10 +277,12 @@ updateState _ = return ()
 sendMessage :: (MonadIO m, HasReader SessionContext m, ToJSON a) => a -> m ()
 sendMessage msg = do
   h <- serverIn <$> ask
 sendMessage :: (MonadIO m, HasReader SessionContext m, ToJSON a) => a -> m ()
 sendMessage msg = do
   h <- serverIn <$> ask
-  let encoded = encode msg
-  liftIO $ do
+  let encoded = encodePretty msg
 
 
-    setSGR [SetColor Foreground Vivid Cyan]
+  shouldLog <- asks $ logMessages . config
+  liftIO $ when shouldLog $ do
+  
+    setSGR [SetColor Foreground Dull Cyan]
     putStrLn $ "--> " ++ B.unpack encoded
     setSGR [Reset]
 
     putStrLn $ "--> " ++ B.unpack encoded
     setSGR [Reset]