Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 27 additions & 23 deletions app/Main.hs
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,21 @@ import UnliftIO.Directory
import UnliftIO.Exception
import UnliftIO.Process

import Transform.ClientNot
import Transform.ClientReq
import Transform.ClientRsp
import Transform.ServerNot
import Transform.ServerReq
import Transform.ServerRsp
import Transform.Util

import Parsing
import Process
import RequestMap
import Language.LSP.NotebookLanguageServer.Transform.ClientNot
import Language.LSP.NotebookLanguageServer.Transform.ClientReq
import Language.LSP.NotebookLanguageServer.Transform.ClientRsp
import Language.LSP.NotebookLanguageServer.Transform.ServerNot
import Language.LSP.NotebookLanguageServer.Transform.ServerReq
import Language.LSP.NotebookLanguageServer.Transform.ServerRsp
import Language.LSP.NotebookLanguageServer.Transform.Util

import Language.LSP.NotebookLanguageServer.Parsing
import Language.LSP.NotebookLanguageServer.Process
import Language.LSP.NotebookLanguageServer.RequestMap
import Language.LSP.Notebook
import Streams
import Language.LSP.NotebookLanguageServer.Config
import Transform.Config


data Options = Options {
Expand Down Expand Up @@ -141,20 +144,21 @@ main = do
, _message = T.decodeUtf8 $ fromLogStr msg
}

transformerState <- newTransformerState optDidSaveDebouncePeriodMs
let config = cppNotebookConfig optDidSaveDebouncePeriodMs
transformerState <- newTransformerState

flip runLoggingT logFn $ filterLogger logFilterFn $ flip runReaderT transformerState $
withAsync (readWrappedOut optDebugServerReads clientReqMap serverReqMap wrappedOut sendToStdout) $ \_wrappedOutAsync ->
withAsync (readWrappedOut config optDebugServerReads clientReqMap serverReqMap wrappedOut sendToStdout) $ \_wrappedOutAsync ->
withAsync (readWrappedErr wrappedErr) $ \_wrappedErrAsync ->
withAsync (forever $ handleStdin optDebugServerWrites optDebugClientReads wrappedIn clientReqMap serverReqMap) $ \_stdinAsync -> do
withAsync (forever $ handleStdin config optDebugServerWrites optDebugClientReads wrappedIn clientReqMap serverReqMap) $ \_stdinAsync -> do
waitForProcess p >>= \case
ExitFailure n -> logErrorN [i|clangd subprocess exited with code #{n}|]
ExitSuccess -> logInfoN [i|clangd subprocess exited successfully|]

handleStdin :: forall m. (
MonadLoggerIO m, MonadReader TransformerState m, MonadUnliftIO m, MonadFail m
) => Bool -> Bool -> Handle -> MVar ClientRequestMap -> MVar ServerRequestMap -> m ()
handleStdin debugServerWrites debugClientReads wrappedIn clientReqMap serverReqMap = do
MonadLoggerIO m, MonadReader (TransformerState CppNotebookTransformer) m, MonadUnliftIO m, MonadFail m
) => NotebookConfig CppNotebookTransformer -> Bool -> Bool -> Handle -> MVar ClientRequestMap -> MVar ServerRequestMap -> m ()
handleStdin config debugServerWrites debugClientReads wrappedIn clientReqMap serverReqMap = do
(A.eitherDecode <$> liftIO (parseStream stdin)) >>= \case
Left err -> logErr [i|Couldn't decode incoming message: #{err}|]
Right (x :: A.Value) -> do
Expand All @@ -171,9 +175,9 @@ handleStdin debugServerWrites debugClientReads wrappedIn clientReqMap serverReqM
modifyMVar_ clientReqMap $ \m -> case updateClientRequestMap m msgId (SMethodAndParams meth (msg ^. Lens.params)) of
Just m' -> return m'
Nothing -> return m
transformClientReq meth msg >>= writeToServerHandle wrappedIn . A.encode
transformClientReq config meth msg >>= writeToServerHandle wrappedIn . A.encode
Right (ClientToServerNot meth msg) ->
transformClientNot sendExtraNotification meth msg >>= writeToServerHandle wrappedIn . A.encode
transformClientNot config sendExtraNotification meth msg >>= writeToServerHandle wrappedIn . A.encode
where
writeToServerHandle :: Handle -> BL.ByteString -> m ()
writeToServerHandle h bs = do
Expand All @@ -185,9 +189,9 @@ handleStdin debugServerWrites debugClientReads wrappedIn clientReqMap serverReqM
liftIO $ writeToHandle wrappedIn $ A.encode msg

readWrappedOut :: (
MonadUnliftIO m, MonadLoggerIO m, MonadReader TransformerState m, MonadFail m
) => Bool -> MVar ClientRequestMap -> MVar ServerRequestMap -> Handle -> (forall a. ToJSON a => a -> m ()) -> m b
readWrappedOut debugServerReads clientReqMap serverReqMap wrappedOut sendToStdout = forever $ do
MonadUnliftIO m, MonadLoggerIO m, MonadReader (TransformerState CppNotebookTransformer) m, MonadFail m
) => NotebookConfig CppNotebookTransformer -> Bool -> MVar ClientRequestMap -> MVar ServerRequestMap -> Handle -> (forall a. ToJSON a => a -> m ()) -> m b
readWrappedOut config debugServerReads clientReqMap serverReqMap wrappedOut sendToStdout = forever $ do
(A.eitherDecode <$> liftIO (parseStream wrappedOut)) >>= \case
Left err -> logErr [i|Couldn't decode wrapped output: #{err}|]
Right (x :: A.Value) -> do
Expand All @@ -206,7 +210,7 @@ readWrappedOut debugServerReads clientReqMap serverReqMap wrappedOut sendToStdou
Nothing -> return m
sendToStdout (transformServerReq meth msg)
Right (ServerToClientRsp meth initialParams msg) ->
transformServerRsp meth initialParams msg >>= sendToStdout
transformServerRsp config meth initialParams msg >>= sendToStdout

readWrappedErr :: MonadLoggerIO m => Handle -> m ()
readWrappedErr wrappedErr = forever $ do
Expand Down
88 changes: 0 additions & 88 deletions app/Parsing.hs

This file was deleted.

38 changes: 0 additions & 38 deletions app/Process.hs

This file was deleted.

37 changes: 0 additions & 37 deletions app/RequestMap.hs

This file was deleted.

36 changes: 5 additions & 31 deletions cpp-notebook-language-server.cabal
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
cabal-version: 1.12

-- This file has been generated from package.yaml by hpack version 0.38.1.
-- This file has been generated from package.yaml by hpack version 0.39.1.
--
-- see: https://github.com/sol/hpack

Expand All @@ -17,17 +17,7 @@ library
Language.LSP.Notebook.CppParser
Language.LSP.Notebook.DeclarationSifter
Language.LSP.Test
Language.LSP.Transformer
Transform.ClientNot
Transform.ClientNot.DidSave
Transform.ClientReq
Transform.ClientRsp
Transform.Common
Transform.ServerNot
Transform.ServerReq
Transform.ServerRsp
Transform.ServerRsp.Hover
Transform.Util
Transform.Config
other-modules:
Paths_cpp_notebook_language_server
hs-source-dirs:
Expand All @@ -50,37 +40,21 @@ library
ghc-options: -Wunused-packages -Wall -fno-warn-name-shadowing
build-depends:
aeson
, auto-update
, base >=4.7 && <5
, bytestring
, containers
, filepath
, lens
, lens-regex-pcre
, lsp-types >=2.0.0.1
, monad-logger
, mtl
, myers-diff
, network-uri
, notebook-language-server-core
, pcre-light
, random
, safe
, string-interpolate
, text
, text-rope
, time
, unliftio
, unliftio-core
, uuid
, vector
default-language: Haskell2010

executable cpp-notebook-language-server
main-is: Main.hs
other-modules:
Parsing
Process
RequestMap
Streams
Test
Paths_cpp_notebook_language_server
Expand Down Expand Up @@ -111,9 +85,8 @@ executable cpp-notebook-language-server
, lsp-types >=2.0.0.1
, monad-logger
, mtl
, notebook-language-server-core
, optparse-applicative
, process
, retry
, safe
, string-interpolate
, text
Expand Down Expand Up @@ -175,6 +148,7 @@ test-suite cpp-notebook-language-server-test
, monad-logger
, mtl
, myers-diff
, notebook-language-server-core
, quickcheck-instances
, sandwich
, sandwich-contexts
Expand Down
Loading
Loading