, choice
, option
, optional
- , skipOptional
, between
, some
, many
, sepBy
, sepBy1
- , sepByNonEmpty
, sepEndBy1
- , sepEndByNonEmpty
, sepEndBy
, endBy1
- , endByNonEmpty
, endBy
, count
- , chainl
- , chainr
- , chainl1
- , chainr1
, manyTill
- , try
- , (<?>)
, skipMany
, skipSome
- , unexpected
- , notFollowedBy
+ , skipManyTill
+ , skipSomeTill
, (<|>)
, satisfy
-- * Utilities
) where
import Control.Applicative
+import Control.Applicative.Combinators
import Control.Monad
import Control.Monad.IO.Class
import Control.Concurrent
import System.FilePath
import Language.Haskell.LSP.Test.Decoding
import Language.Haskell.LSP.Test.Parsing
-import Text.Parser.Combinators
-- | Starts a new session.
-runSession :: FilePath -- ^ The filepath to the root directory for the session.
+runSession :: FilePath -- ^ The filepath to the server executable.
+ -> FilePath -- ^ The filepath to the root directory for the session.
-> Session a -- ^ The session to run.
-> IO ()
-runSession rootDir session = do
+runSession serverExe rootDir session = do
pid <- getProcessID
absRootDir <- canonicalizePath rootDir
def
(Just TraceOff)
- runSessionWithHandler listenServer rootDir $ do
+ runSessionWithHandler listenServer serverExe rootDir $ do
-- Wrap the session around initialize and shutdown calls
sendRequest (Proxy :: Proxy InitializeRequest) Initialize initializeParams
-- | An internal version of 'runSession' that allows for a custom handler to listen to the server.
-- It also does not automatically send initialize and exit messages.
runSessionWithHandler :: (Handle -> Session ())
+ -> FilePath
-> FilePath
-> Session a
-> IO a
-runSessionWithHandler serverHandler rootDir session = do
+runSessionWithHandler serverHandler serverExe rootDir session = do
absRootDir <- canonicalizePath rootDir
(Just serverIn, Just serverOut, Nothing, serverProc) <- createProcess
- (proc "hie" ["--lsp", "-d", "-l", "/tmp/hie-test.log"])
+ (proc serverExe ["--lsp", "-d", "-l", "/tmp/hie-test.log"])
{ std_in = CreatePipe, std_out = CreatePipe }
hSetBuffering serverIn NoBuffering