Add config option to log stderr
authorLuke Lau <luke_lau@icloud.com>
Thu, 28 Jun 2018 10:32:46 +0000 (11:32 +0100)
committerLuke Lau <luke_lau@icloud.com>
Thu, 28 Jun 2018 10:32:46 +0000 (11:32 +0100)
src/Language/Haskell/LSP/Test.hs
src/Language/Haskell/LSP/Test/Replay.hs
src/Language/Haskell/LSP/Test/Server.hs
src/Language/Haskell/LSP/Test/Session.hs

index 1b8c2a8c20a297af751b96497fd200700fe1b22f..1ce6871fb211f3a66e75f7ac95d65bbb979a4085 100644 (file)
@@ -121,7 +121,7 @@ runSessionWithConfig config serverExe rootDir session = do
                                           Nothing
                                           (capabilities config)
                                           (Just TraceOff)
-  withServer serverExe $ \serverIn serverOut _ ->
+  withServer serverExe (logStdErr config) $ \serverIn serverOut _ ->
     runSessionWithHandles serverIn serverOut listenServer config rootDir $ do
 
       -- Wrap the session around initialize and shutdown calls
index 88bc09228fd3a76e643fcc01ab62e692d0ac3f1d..68e6b1ba56424fe4f846fb111b3130717fe6ba4f 100644 (file)
@@ -42,7 +42,7 @@ replaySession serverExe sessionDir = do
   -- decode session
   let unswappedEvents = map (fromJust . decode) entries
 
-  withServer serverExe $ \serverIn serverOut pid -> do
+  withServer serverExe False $ \serverIn serverOut pid -> do
 
     events <- swapCommands pid <$> swapFiles sessionDir unswappedEvents
 
index c59a755979314316d4759765088f883df873c73a..7d00f2382900e454b5b67b32de1a33ffc71a4caa 100644 (file)
@@ -6,8 +6,8 @@ import Language.Haskell.LSP.Test.Compat
 import System.IO
 import System.Process
 
-withServer :: String -> (Handle -> Handle -> Int -> IO a) -> IO a
-withServer serverExe f = do
+withServer :: String -> Bool -> (Handle -> Handle -> Int -> IO a) -> IO a
+withServer serverExe logStdErr f = do
   -- TODO Probably should just change runServer to accept
   -- separate command and arguments
   let cmd:args = words serverExe
@@ -17,7 +17,7 @@ withServer serverExe f = do
   -- Need to continuously consume to stderr else it gets blocked
   -- Can't pass NoStream either to std_err
   hSetBuffering serverErr NoBuffering
-  errSinkThread <- forkIO $ forever $ hGetLine serverErr
+  errSinkThread <- forkIO $ forever $ hGetLine serverErr >>= when logStdErr . putStrLn
 
   pid <- getProcessID serverProc
 
index 6a9a6d50d51ef738c37b0250a9a9744add532049..b38d1b7fe1d4885de1354036be174aa10f484c93 100644 (file)
@@ -66,10 +66,11 @@ data SessionConfig = SessionConfig
   {
     capabilities :: ClientCapabilities -- ^ Specific capabilities the client should advertise. Default is yes to everything.
   , timeout :: Int -- ^ Maximum time to wait for a request in seconds. Defaults to 60.
+  , logStdErr :: Bool -- ^ When True redirects the servers stderr output to haskell-lsp-test's stdout. Defaults to False
   }
 
 instance Default SessionConfig where
-  def = SessionConfig def 60
+  def = SessionConfig def 60 False
 
 class Monad m => MonadSessionConfig m where
   sessionConfig :: m SessionConfig