X-Git-Url: http://git.lukelau.me/?p=opengl.git;a=blobdiff_plain;f=src%2FLanguage%2FHaskell%2FLSP%2FTest%2FCapabilities.hs;h=2fd3a9947017ef244dd549585403df50078717f2;hp=f1237e3131f70e20a4b2d4207e10b7cf55cbc23f;hb=cdb1ba7038c32bac71a3bc783effc1e07049a985;hpb=e0926c045ccd5444f3112cb231cc3590c600d48d diff --git a/src/Language/Haskell/LSP/Test/Capabilities.hs b/src/Language/Haskell/LSP/Test/Capabilities.hs index f1237e3..2fd3a99 100644 --- a/src/Language/Haskell/LSP/Test/Capabilities.hs +++ b/src/Language/Haskell/LSP/Test/Capabilities.hs @@ -1,45 +1,60 @@ +-- 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. --- The whole shebang. +-- | The whole shebang. The real deal. +-- Capabilities for full conformance to the current (v3.10) LSP specification. 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 Int -- ^ Construct a major.minor version + +-- | Capabilities for full conformance to the LSP specification up until a version. +-- Some important milestones: +-- +-- * 3.8 codeAction literals +-- * 3.0 dynamic registration +capsForVersion :: LSPVersion -> ClientCapabilities +capsForVersion (LSPVersion maj min) = ClientCapabilities (Just w) (Just td) Nothing where w = WorkspaceClientCapabilities (Just True) (Just (WorkspaceEditClientCapabilities (Just True))) - (Just (DidChangeConfigurationClientCapabilities (Just True))) - (Just (DidChangeWatchedFilesClientCapabilities (Just True))) - (Just (SymbolClientCapabilities (Just True))) - (Just (ExecuteClientCapabilities (Just True))) + (Just (DidChangeConfigurationClientCapabilities dynamicReg)) + (Just (DidChangeWatchedFilesClientCapabilities dynamicReg)) + (Just (SymbolClientCapabilities dynamicReg)) + (Just (ExecuteClientCapabilities dynamicReg)) td = TextDocumentClientCapabilities (Just sync) (Just (CompletionClientCapabilities - (Just True) + dynamicReg (Just (CompletionItemClientCapabilities (Just True))))) - (Just (HoverClientCapabilities (Just True))) - (Just (SignatureHelpClientCapabilities (Just True))) - (Just (ReferencesClientCapabilities (Just True))) - (Just (DocumentHighlightClientCapabilities (Just True))) - (Just (DocumentSymbolClientCapabilities (Just True))) + (Just (HoverClientCapabilities dynamicReg)) + (Just (SignatureHelpClientCapabilities dynamicReg)) + (Just (ReferencesClientCapabilities dynamicReg)) + (Just (DocumentHighlightClientCapabilities dynamicReg)) + (Just (DocumentSymbolClientCapabilities dynamicReg)) (Just (FormattingClientCapabilities (Just True))) - (Just (RangeFormattingClientCapabilities (Just True))) - (Just (OnTypeFormattingClientCapabilities (Just True))) - (Just (DefinitionClientCapabilities (Just True))) + (Just (RangeFormattingClientCapabilities dynamicReg)) + (Just (OnTypeFormattingClientCapabilities dynamicReg)) + (Just (DefinitionClientCapabilities dynamicReg)) (Just codeAction) - (Just (CodeLensClientCapabilities (Just True))) - (Just (DocumentLinkClientCapabilities (Just True))) - (Just (RenameClientCapabilities (Just True))) + (Just (CodeLensClientCapabilities dynamicReg)) + (Just (DocumentLinkClientCapabilities dynamicReg)) + (Just (RenameClientCapabilities dynamicReg)) sync = SynchronizationTextDocumentClientCapabilities - (Just True) + dynamicReg (Just True) (Just True) (Just True) codeAction = CodeActionClientCapabilities - (Just True) - (Just (CodeActionLiteralSupport kinds)) + dynamicReg + codeActionLiterals + codeActionLiterals + | maj >= 3 && min >= 8 = Just (CodeActionLiteralSupport kinds) + | otherwise = Nothing kinds = CodeActionKindValueSet (List [ CodeActionQuickFix , CodeActionRefactor @@ -49,3 +64,6 @@ fullCaps = ClientCapabilities (Just w) (Just td) Nothing , CodeActionSource , CodeActionSourceOrganizeImports ]) + dynamicReg + | maj >= 3 = Just True + | otherwise = Nothing