Skip to content

Commit 950cc52

Browse files
committed
More capabilities
1 parent 58055c2 commit 950cc52

File tree

6 files changed

+134
-13
lines changed

6 files changed

+134
-13
lines changed

lsp-types/src/Language/LSP/Types/Capabilities.hs

+11-2
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ data LSPVersion = LSPVersion Int Int -- ^ Construct a major.minor version
3535
-- * 3.4 extended completion item and symbol item kinds
3636
-- * 3.0 dynamic registration
3737
capsForVersion :: LSPVersion -> ClientCapabilities
38-
capsForVersion (LSPVersion maj min) = ClientCapabilities (Just w) (Just td) (Just window) Nothing
38+
capsForVersion (LSPVersion maj min) = ClientCapabilities (Just w) (Just td) (Just window) (since 3 16 general) Nothing
3939
where
4040
w = WorkspaceClientCapabilities
4141
(Just True)
@@ -285,4 +285,13 @@ capsForVersion (LSPVersion maj min) = ClientCapabilities (Just w) (Just td) (Jus
285285
| maj >= x && min >= y = Just a
286286
| otherwise = Nothing
287287

288-
window = WindowClientCapabilities (since 3 15 True)
288+
window =
289+
WindowClientCapabilities
290+
(since 3 15 True)
291+
(since 3 16 $ ShowMessageRequestClientCapabilities Nothing)
292+
(since 3 16 $ ShowDocumentClientCapabilities True)
293+
294+
general = GeneralClientCapabilities
295+
(since 3 16 $ StaleRequestClientCapabilities True (List []))
296+
(since 3 16 $ RegularExpressionsClientCapabilities "" Nothing)
297+
(since 3 16 $ MarkdownClientCapabilities "" Nothing)

lsp-types/src/Language/LSP/Types/ClientCapabilities.hs

+102-6
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ module Language.LSP.Types.ClientCapabilities where
66
import Data.Aeson.TH
77
import qualified Data.Aeson as A
88
import Data.Default
9+
import Data.Text (Text)
10+
911
import Language.LSP.Types.CallHierarchy
1012
import Language.LSP.Types.CodeAction
1113
import Language.LSP.Types.CodeLens
@@ -34,6 +36,8 @@ import Language.LSP.Types.Utils
3436
import Language.LSP.Types.WatchedFiles
3537
import Language.LSP.Types.WorkspaceEdit
3638
import Language.LSP.Types.WorkspaceSymbol
39+
import Language.LSP.Types.MarkupContent (MarkdownClientCapabilities)
40+
import Language.LSP.Types.Common (List)
3741

3842

3943
data WorkspaceClientCapabilities =
@@ -170,30 +174,122 @@ instance Default TextDocumentClientCapabilities where
170174

171175
-- ---------------------------------------------------------------------
172176

177+
-- | Capabilities specific to the `MessageActionItem` type.
178+
data MessageActionItemClientCapabilities =
179+
MessageActionItemClientCapabilities
180+
{
181+
-- | Whether the client supports additional attributes which
182+
-- are preserved and sent back to the server in the
183+
-- request's response.
184+
_additionalPropertiesSupport :: Maybe Bool
185+
} deriving (Show, Read, Eq)
186+
187+
deriveJSON lspOptions ''MessageActionItemClientCapabilities
188+
189+
-- | Show message request client capabilities
190+
data ShowMessageRequestClientCapabilities =
191+
ShowMessageRequestClientCapabilities
192+
{ -- | Capabilities specific to the `MessageActionItem` type.
193+
_messageActionItem :: Maybe MessageActionItemClientCapabilities
194+
} deriving (Show, Read, Eq)
195+
196+
deriveJSON lspOptions ''ShowMessageRequestClientCapabilities
197+
198+
-- | Client capabilities for the show document request.
199+
--
200+
-- @since 3.16.0
201+
data ShowDocumentClientCapabilities =
202+
ShowDocumentClientCapabilities
203+
{ -- | The client has support for the show document request
204+
_support :: Bool
205+
} deriving (Show, Read, Eq)
206+
207+
deriveJSON lspOptions ''ShowDocumentClientCapabilities
208+
173209
-- | Window specific client capabilities.
174210
data WindowClientCapabilities =
175211
WindowClientCapabilities
176212
{ -- | Whether client supports handling progress notifications.
213+
--
214+
-- @since 3.15.0
177215
_workDoneProgress :: Maybe Bool
216+
-- | Capabilities specific to the showMessage request
217+
--
218+
-- @since 3.16.0
219+
, _showMessage :: Maybe ShowMessageRequestClientCapabilities
220+
-- | Capabilities specific to the showDocument request
221+
--
222+
-- @since 3.16.0
223+
, _showDocument :: Maybe ShowDocumentClientCapabilities
178224
} deriving (Show, Read, Eq)
179225

180226
deriveJSON lspOptions ''WindowClientCapabilities
181227

182228
instance Default WindowClientCapabilities where
183-
def = WindowClientCapabilities def
229+
def = WindowClientCapabilities def def def
230+
231+
-- ---------------------------------------------------------------------
232+
233+
-- | Client capability that signals how the client
234+
-- handles stale requests (e.g. a request
235+
-- for which the client will not process the response
236+
-- anymore since the information is outdated).
237+
-- @since 3.17.0
238+
data StaleRequestClientCapabilities =
239+
StaleRequestClientCapabilities
240+
{ _cancel :: Bool
241+
, _retryOnContentModified :: List Text
242+
} deriving (Show, Read, Eq)
243+
244+
deriveJSON lspOptions ''StaleRequestClientCapabilities
245+
246+
-- | Client capabilities specific to the used markdown parser.
247+
-- @since 3.16.0
248+
data RegularExpressionsClientCapabilities =
249+
RegularExpressionsClientCapabilities
250+
{ _engine :: Text
251+
, _version :: Maybe Text
252+
} deriving (Show, Read, Eq)
253+
254+
deriveJSON lspOptions ''RegularExpressionsClientCapabilities
255+
256+
-- | General client capabilities.
257+
-- @since 3.16.0
258+
data GeneralClientCapabilities =
259+
GeneralClientCapabilities
260+
{
261+
_staleRequestSupport :: Maybe StaleRequestClientCapabilities
262+
-- | Client capabilities specific to regular expressions.
263+
-- @since 3.16.0
264+
, _regularExpressions :: Maybe RegularExpressionsClientCapabilities
265+
-- | Client capabilities specific to the client's markdown parser.
266+
-- @since 3.16.0
267+
, _markdown :: Maybe MarkdownClientCapabilities
268+
} deriving (Show, Read, Eq)
269+
270+
deriveJSON lspOptions ''GeneralClientCapabilities
271+
272+
instance Default GeneralClientCapabilities where
273+
def = GeneralClientCapabilities def def def
274+
275+
-- ---------------------------------------------------------------------
184276

185277
data ClientCapabilities =
186278
ClientCapabilities
187-
{ _workspace :: Maybe WorkspaceClientCapabilities
279+
{ -- | Workspace specific client capabilities
280+
_workspace :: Maybe WorkspaceClientCapabilities
281+
-- | Text document specific client capabilities
188282
, _textDocument :: Maybe TextDocumentClientCapabilities
189-
-- | Capabilities specific to `window/progress` requests. Experimental.
190-
--
191-
-- @since 0.10.0.0
283+
-- | Window specific client capabilities.
192284
, _window :: Maybe WindowClientCapabilities
285+
-- | General client capabilities.
286+
-- @since 3.16.0
287+
, _general :: Maybe GeneralClientCapabilities
288+
-- | Experimental client capabilities.
193289
, _experimental :: Maybe A.Object
194290
} deriving (Show, Read, Eq)
195291

196292
deriveJSON lspOptions ''ClientCapabilities
197293

198294
instance Default ClientCapabilities where
199-
def = ClientCapabilities def def def def
295+
def = ClientCapabilities def def def def def

lsp-types/src/Language/LSP/Types/Lens.hs

+7
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,12 @@ import Control.Lens.TH
5757
-- TODO: This is out of date and very unmantainable, use TH to call all these!!
5858

5959
-- client capabilities
60+
makeFieldsNoPrefix ''MessageActionItemClientCapabilities
61+
makeFieldsNoPrefix ''ShowMessageRequestClientCapabilities
62+
makeFieldsNoPrefix ''ShowDocumentClientCapabilities
63+
makeFieldsNoPrefix ''StaleRequestClientCapabilities
64+
makeFieldsNoPrefix ''RegularExpressionsClientCapabilities
65+
makeFieldsNoPrefix ''GeneralClientCapabilities
6066
makeFieldsNoPrefix ''WorkspaceClientCapabilities
6167
makeFieldsNoPrefix ''WindowClientCapabilities
6268
makeFieldsNoPrefix ''ClientCapabilities
@@ -115,6 +121,7 @@ makeFieldsNoPrefix ''LocationLink
115121

116122
-- Markup
117123
makeFieldsNoPrefix ''MarkupContent
124+
makeFieldsNoPrefix ''MarkdownClientCapabilities
118125

119126
-- Completion
120127
makeFieldsNoPrefix ''CompletionDoc

lsp-types/src/Language/LSP/Types/MarkupContent.hs

+9
Original file line numberDiff line numberDiff line change
@@ -91,3 +91,12 @@ instance Monoid MarkupContent where
9191

9292
-- ---------------------------------------------------------------------
9393

94+
-- | Client capabilities specific to the used markdown parser.
95+
-- @since 3.16.0
96+
data MarkdownClientCapabilities =
97+
MarkdownClientCapabilities
98+
{ _parser :: Text
99+
, _version :: Maybe Text
100+
} deriving (Show, Read, Eq)
101+
102+
deriveJSON lspOptions ''MarkdownClientCapabilities

lsp/src/Language/LSP/Server/Core.hs

+3-3
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,7 @@ getWorkspaceFolders :: MonadLsp config m => m (Maybe [WorkspaceFolder])
473473
getWorkspaceFolders = do
474474
clientCaps <- getClientCapabilities
475475
let clientSupportsWfs = fromMaybe False $ do
476-
let (J.ClientCapabilities mw _ _ _) = clientCaps
476+
let (J.ClientCapabilities mw _ _ _ _) = clientCaps
477477
(J.WorkspaceClientCapabilities _ _ _ _ _ _ mwf _ _) <- mw
478478
mwf
479479
if clientSupportsWfs
@@ -654,8 +654,8 @@ withProgressBase indefinite title cancellable f = do
654654
WorkDoneProgressReportParams Nothing msg percentage
655655

656656
clientSupportsProgress :: J.ClientCapabilities -> Bool
657-
clientSupportsProgress (J.ClientCapabilities _ _ wc _) = fromMaybe False $ do
658-
(J.WindowClientCapabilities mProgress) <- wc
657+
clientSupportsProgress (J.ClientCapabilities _ _ wc _ _) = fromMaybe False $ do
658+
(J.WindowClientCapabilities mProgress _ _) <- wc
659659
mProgress
660660

661661
{-# INLINE clientSupportsProgress #-}

lsp/test/CapabilitiesSpec.hs

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ import Test.Hspec
77
spec :: Spec
88
spec = describe "capabilities" $ do
99
it "gives 3.10 capabilities" $
10-
let ClientCapabilities _ (Just tdcs) _ _ = capsForVersion (LSPVersion 3 10)
10+
let ClientCapabilities _ (Just tdcs) _ _ _ = capsForVersion (LSPVersion 3 10)
1111
Just (DocumentSymbolClientCapabilities _ _ mHierarchical _ _ ) = _documentSymbol tdcs
1212
in mHierarchical `shouldBe` Just True
1313
it "gives pre 3.10 capabilities" $
14-
let ClientCapabilities _ (Just tdcs) _ _ = capsForVersion (LSPVersion 3 9)
14+
let ClientCapabilities _ (Just tdcs) _ _ _ = capsForVersion (LSPVersion 3 9)
1515
Just (DocumentSymbolClientCapabilities _ _ mHierarchical _ _) = _documentSymbol tdcs
1616
in mHierarchical `shouldBe` Nothing

0 commit comments

Comments
 (0)