projects
/
lsp-test.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Shutdown the server before kill its thread
[lsp-test.git]
/
src
/
Language
/
Haskell
/
LSP
/
Test
/
Session.hs
diff --git
a/src/Language/Haskell/LSP/Test/Session.hs
b/src/Language/Haskell/LSP/Test/Session.hs
index a3ba35b3a1a46f723d4ca0fce59775991680c862..415402a7ce261f98c0eb5b4ad707aad65288f54b 100644
(file)
--- a/
src/Language/Haskell/LSP/Test/Session.hs
+++ b/
src/Language/Haskell/LSP/Test/Session.hs
@@
-128,7
+128,7
@@
data SessionState = SessionState
{
curReqId :: LspId
, vfs :: VFS
{
curReqId :: LspId
, vfs :: VFS
- , curDiagnostics :: Map.Map Uri [Diagnostic]
+ , curDiagnostics :: Map.Map
Normalized
Uri [Diagnostic]
, curTimeoutId :: Int
, overridingTimeout :: Bool
-- ^ The last received message from the server.
, curTimeoutId :: Int
, overridingTimeout :: Bool
-- ^ The last received message from the server.
@@
-197,6
+197,10
@@
runSessionWithHandles serverIn serverOut serverHandler config caps rootDir sessi
hSetBuffering serverIn NoBuffering
hSetBuffering serverOut NoBuffering
hSetBuffering serverIn NoBuffering
hSetBuffering serverOut NoBuffering
+ -- This is required to make sure that we don’t get any
+ -- newline conversion or weird encoding issues.
+ hSetBinaryMode serverIn True
+ hSetBinaryMode serverOut True
reqMap <- newMVar newRequestMap
messageChan <- newChan
reqMap <- newMVar newRequestMap
messageChan <- newChan
@@
-208,9
+212,11
@@
runSessionWithHandles serverIn serverOut serverHandler config caps rootDir sessi
initState = SessionState (IdInt 0) mempty mempty 0 False Nothing
launchServerHandler = forkIO $ catch (serverHandler serverOut context)
(throwTo mainThreadId :: SessionException -> IO())
initState = SessionState (IdInt 0) mempty mempty 0 False Nothing
launchServerHandler = forkIO $ catch (serverHandler serverOut context)
(throwTo mainThreadId :: SessionException -> IO())
- (result, _) <- bracket launchServerHandler killThread $
- const $ runSession context initState session
-
+ (result, _) <- bracket
+ launchServerHandler
+ (\tid -> do runSession context initState sendExitMessage
+ killThread tid)
+ (const $ runSession context initState session)
return result
updateStateC :: ConduitM FromServerMessage FromServerMessage (StateT SessionState (ReaderT SessionContext IO)) ()
return result
updateStateC :: ConduitM FromServerMessage FromServerMessage (StateT SessionState (ReaderT SessionContext IO)) ()
@@
-223,7
+229,7
@@
updateState (NotPublishDiagnostics n) = do
let List diags = n ^. params . diagnostics
doc = n ^. params . uri
modify (\s ->
let List diags = n ^. params . diagnostics
doc = n ^. params . uri
modify (\s ->
- let newDiags = Map.insert
doc
diags (curDiagnostics s)
+ let newDiags = Map.insert
(toNormalizedUri doc)
diags (curDiagnostics s)
in s { curDiagnostics = newDiags })
updateState (ReqApplyWorkspaceEdit r) = do
in s { curDiagnostics = newDiags })
updateState (ReqApplyWorkspaceEdit r) = do
@@
-242,7
+248,7
@@
updateState (ReqApplyWorkspaceEdit r) = do
newVFS <- liftIO $ changeFromServerVFS (vfs s) r
return $ s { vfs = newVFS }
newVFS <- liftIO $ changeFromServerVFS (vfs s) r
return $ s { vfs = newVFS }
- let groupedParams = groupBy (\a b ->
(a ^. textDocument == b ^. textDocument)
) allChangeParams
+ let groupedParams = groupBy (\a b ->
a ^. textDocument == b ^. textDocument
) allChangeParams
mergedParams = map mergeParams groupedParams
-- TODO: Don't do this when replaying a session
mergedParams = map mergeParams groupedParams
-- TODO: Don't do this when replaying a session
@@
-257,7
+263,7
@@
updateState (ReqApplyWorkspaceEdit r) = do
modify $ \s ->
let oldVFS = vfs s
update (VirtualFile oldV t mf) = VirtualFile (fromMaybe oldV v) t mf
modify $ \s ->
let oldVFS = vfs s
update (VirtualFile oldV t mf) = VirtualFile (fromMaybe oldV v) t mf
- newVFS = Map.adjust update
uri
oldVFS
+ newVFS = Map.adjust update
(toNormalizedUri uri)
oldVFS
in s { vfs = newVFS }
where checkIfNeedsOpened uri = do
in s { vfs = newVFS }
where checkIfNeedsOpened uri = do
@@
-265,7
+271,7
@@
updateState (ReqApplyWorkspaceEdit r) = do
ctx <- ask
-- if its not open, open it
ctx <- ask
-- if its not open, open it
- unless (uri `Map.member` oldVFS) $ do
+ unless (
toNormalizedUri
uri `Map.member` oldVFS) $ do
let fp = fromJust $ uriToFilePath uri
contents <- liftIO $ T.readFile fp
let item = TextDocumentItem (filePathToUri fp) "" 0 contents
let fp = fromJust $ uriToFilePath uri
contents <- liftIO $ T.readFile fp
let item = TextDocumentItem (filePathToUri fp) "" 0 contents
@@
-297,6
+303,9
@@
sendMessage msg = do
logMsg LogClient msg
liftIO $ B.hPut h (addHeader $ encode msg)
logMsg LogClient msg
liftIO $ B.hPut h (addHeader $ encode msg)
+sendExitMessage :: (MonadIO m, HasReader SessionContext m) => m ()
+sendExitMessage = sendMessage (NotificationMessage "2.0" Exit ExitParams)
+
-- | Execute a block f that will throw a 'Timeout' exception
-- after duration seconds. This will override the global timeout
-- for waiting for messages to arrive defined in 'SessionConfig'.
-- | Execute a block f that will throw a 'Timeout' exception
-- after duration seconds. This will override the global timeout
-- for waiting for messages to arrive defined in 'SessionConfig'.