Rename sendRequest to request, sendRequest' to sendRequest
[opengl.git] / src / Language / Haskell / LSP / Test / Capabilities.hs
index f1237e3131f70e20a4b2d4207e10b7cf55cbc23f..2fd3a9947017ef244dd549585403df50078717f2 100644 (file)
@@ -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