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