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
-- 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
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
-- 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
{
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