Move responses to updateStateC
authorZubin Duggal <zubin@cmi.ac.in>
Tue, 9 Feb 2021 20:00:07 +0000 (01:30 +0530)
committerZubin Duggal <zubin@cmi.ac.in>
Tue, 9 Feb 2021 20:00:07 +0000 (01:30 +0530)
src/Language/LSP/Test/Parsing.hs
src/Language/LSP/Test/Session.hs

index ecf8e4538cb7a4116f5a08fa9db435e0d97efc22..e55909f4c59fc9076c665d9b8f66811ae9981bb9 100644 (file)
@@ -110,7 +110,7 @@ named s (Session x) = Session (Data.Conduit.Parser.named s x)
 
 -- | Matches a request or a notification coming from the server.
 message :: SServerMethod m -> Session (ServerMessage m)
-message m1 = named (T.pack $ show m1) $ satisfyMaybe $ \case
+message m1 = named (T.pack $ "Request for: " <> show m1) $ satisfyMaybe $ \case
   FromServerMess m2 msg -> do
     HRefl <- mEqServer m1 m2
     pure msg
@@ -161,7 +161,7 @@ anyResponse = named "Any response" $ satisfy $ \case
 
 -- | Matches a response coming from the server.
 response :: SMethod (m :: Method FromClient Request) -> Session (ResponseMessage m)
-response m1 = named (T.pack $ show m1) $ satisfyMaybe $ \case
+response m1 = named (T.pack $ "Response for: " <> show m1) $ satisfyMaybe $ \case
   FromServerRsp m2 msg -> do
     HRefl <- mEqClient m1 m2
     pure msg
index 4b3ce84be89205dbd1637a382ec3e61f19295a25..55055cdebfce545b65755a9c5b7f3c72f33feb3b 100644 (file)
@@ -297,7 +297,16 @@ runSession' serverIn serverOut mServerProc serverHandler config caps rootDir exi
 updateStateC :: ConduitM FromServerMessage FromServerMessage (StateT SessionState (ReaderT SessionContext IO)) ()
 updateStateC = awaitForever $ \msg -> do
   updateState msg
+  respond msg
   yield msg
+  where
+    respond :: (MonadIO m, HasReader SessionContext m) => FromServerMessage -> m ()
+    respond (FromServerMess SWindowWorkDoneProgressCreate req) =
+      sendMessage $ ResponseMessage "2.0" (Just $ req ^. LSP.id) (Right ())
+    respond (FromServerMess SWorkspaceApplyEdit r) = do
+      sendMessage $ ResponseMessage "2.0" (Just $ r ^. LSP.id) (Right $ ApplyWorkspaceEditResponseBody True Nothing)
+    respond _ = pure ()
+
 
 -- extract Uri out from DocumentChange
 -- didn't put this in `lsp-types` because TH was getting in the way
@@ -309,8 +318,6 @@ documentChangeUri (InR (InR (InR x))) = x ^. uri
 
 updateState :: (MonadIO m, HasReader SessionContext m, HasState SessionState m)
             => FromServerMessage -> m ()
-updateState (FromServerMess SWindowWorkDoneProgressCreate req) =
-  sendMessage $ ResponseMessage "2.0" (Just $ req ^. LSP.id) (Right ())
 updateState (FromServerMess SProgress req) = case req ^. params . value of
   Begin _ ->
     modify $ \s -> s { curProgressSessions = Set.insert (req ^. params . token) $ curProgressSessions s }
@@ -362,8 +369,6 @@ updateState (FromServerMess SWorkspaceApplyEdit r) = do
   -- TODO: Don't do this when replaying a session
   forM_ mergedParams (sendMessage . NotificationMessage "2.0" STextDocumentDidChange)
 
-  sendMessage $ ResponseMessage "2.0" (Just $ r ^. LSP.id) (Right $ ApplyWorkspaceEditResponseBody True Nothing)
-
   -- Update VFS to new document versions
   let sortedVersions = map (sortBy (compare `on` (^. textDocument . version))) groupedParams
       latestVersions = map ((^. textDocument) . last) sortedVersions