From ddad6502d460a9140757ac38da7f59a3d5a3a96c Mon Sep 17 00:00:00 2001 From: Luke Lau Date: Tue, 31 Jul 2018 16:24:58 +0100 Subject: [PATCH] Add LSPVersion and capsForVersion --- haskell-lsp-test.cabal | 4 ++-- src/Language/Haskell/LSP/Test/Capabilities.hs | 18 +++++++++++++++--- src/Language/Haskell/LSP/Test/Session.hs | 10 ---------- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/haskell-lsp-test.cabal b/haskell-lsp-test.cabal index ec769ac..e3bb526 100644 --- a/haskell-lsp-test.cabal +++ b/haskell-lsp-test.cabal @@ -18,6 +18,7 @@ extra-source-files: README.md library hs-source-dirs: src exposed-modules: Language.Haskell.LSP.Test + , Language.Haskell.LSP.Test.Capabilities , Language.Haskell.LSP.Test.Replay reexported-modules: haskell-lsp:Language.Haskell.LSP.Types , haskell-lsp:Language.Haskell.LSP.Types.Capabilities @@ -48,8 +49,7 @@ library build-depends: Win32 else build-depends: unix - other-modules: Language.Haskell.LSP.Test.Capabilities - Language.Haskell.LSP.Test.Compat + other-modules: Language.Haskell.LSP.Test.Compat Language.Haskell.LSP.Test.Decoding Language.Haskell.LSP.Test.Exceptions Language.Haskell.LSP.Test.Files diff --git a/src/Language/Haskell/LSP/Test/Capabilities.hs b/src/Language/Haskell/LSP/Test/Capabilities.hs index f1237e3..9947906 100644 --- a/src/Language/Haskell/LSP/Test/Capabilities.hs +++ b/src/Language/Haskell/LSP/Test/Capabilities.hs @@ -1,11 +1,20 @@ +-- TODO: Move this into haskell-lsp module Language.Haskell.LSP.Test.Capabilities where import Language.Haskell.LSP.Types import Language.Haskell.LSP.Types.Capabilities --- | Capabilities for full conformance to the LSP specification. +-- | Capabilities for full conformance to the current (v3.10) LSP specification. -- The whole shebang. fullCaps :: ClientCapabilities -fullCaps = ClientCapabilities (Just w) (Just td) Nothing +fullCaps = capsForVersion (LSPVersion maxBound maxBound) + +-- | A specific version of the LSP specification. +data LSPVersion = LSPVersion Int -- ^ Major + Int -- ^ Minor + +-- | Capabilities for full conformance to the LSP specification up until a version. +capsForVersion :: LSPVersion -> ClientCapabilities +capsForVersion (LSPVersion maj min) = ClientCapabilities (Just w) (Just td) Nothing where w = WorkspaceClientCapabilities (Just True) @@ -39,7 +48,10 @@ fullCaps = ClientCapabilities (Just w) (Just td) Nothing (Just True) codeAction = CodeActionClientCapabilities (Just True) - (Just (CodeActionLiteralSupport kinds)) + codeActionLiterals + codeActionLiterals + | maj >= 3 && min >= 8 = Just (CodeActionLiteralSupport kinds) + | otherwise = Nothing kinds = CodeActionKindValueSet (List [ CodeActionQuickFix , CodeActionRefactor diff --git a/src/Language/Haskell/LSP/Test/Session.hs b/src/Language/Haskell/LSP/Test/Session.hs index 39a3ed2..86030df 100644 --- a/src/Language/Haskell/LSP/Test/Session.hs +++ b/src/Language/Haskell/LSP/Test/Session.hs @@ -302,14 +302,6 @@ withTimeout duration f = do } return res --- logClientMsg :: (MonadIO m, HasReader SessionContext m) --- => FromClientMessage -> m () --- logClientMsg = logMsg True - --- logServerMsg :: (MonadIO m, HasReader SessionContext m) --- => FromServerMessage -> m () --- logServerMsg = logMsg False - data LogMsgType = LogServer | LogClient deriving Eq @@ -331,6 +323,4 @@ logMsg t msg = do | t == LogServer = Magenta | otherwise = Cyan - -showPretty :: ToJSON a => a -> String showPretty = B.unpack . encodePretty -- 2.30.2