import System.IO
import System.Process (ProcessHandle())
import System.Timeout
+import System.IO.Temp
-- | A session representing one instance of launching and connecting to a server.
--
-- 'Language.Haskell.LSP.Test.sendRequest' and
-- 'Language.Haskell.LSP.Test.sendNotification'.
--- newtype Session a = Session (ParserStateReader FromServerMessage SessionState SessionContext IO a)
-
newtype Session a = Session (ConduitParser FromServerMessage (StateT SessionState (ReaderT SessionContext IO)) a)
deriving (Functor, Applicative, Monad, MonadIO, Alternative)
mainThreadId <- myThreadId
let context = SessionContext serverIn absRootDir messageChan reqMap initRsp config caps
- initState = SessionState (IdInt 0) mempty mempty 0 False Nothing
- runSession' = runSession context initState
+ initState tmp_dir = SessionState (IdInt 0) (VFS mempty tmp_dir)
+ mempty 0 False Nothing
+ runSession' ses = withSystemTempDirectory "lsp-test" $ \tmp_dir ->
+ runSession context (initState tmp_dir) ses
errorHandler = throwTo mainThreadId :: SessionException -> IO()
serverListenerLauncher =
forM_ bumpedVersions $ \(VersionedTextDocumentIdentifier uri v) ->
modify $ \s ->
let oldVFS = vfs s
- update (VirtualFile oldV t mf) = VirtualFile (fromMaybe oldV v) t mf
- newVFS = Map.adjust update (toNormalizedUri uri) oldVFS
+ update (VirtualFile oldV t) = VirtualFile (fromMaybe oldV v) t
+ newVFS = updateVFS (Map.adjust update (toNormalizedUri uri)) oldVFS
in s { vfs = newVFS }
where checkIfNeedsOpened uri = do
ctx <- ask
-- if its not open, open it
- unless (toNormalizedUri uri `Map.member` oldVFS) $ do
+ unless (toNormalizedUri uri `Map.member` (vfsMap oldVFS)) $ do
let fp = fromJust $ uriToFilePath uri
contents <- liftIO $ T.readFile fp
let item = TextDocumentItem (filePathToUri fp) "" 0 contents