1{-# LANGUAGE DuplicateRecordFields  #-}
2{-# LANGUAGE TemplateHaskell        #-}
3
4module Language.LSP.Types.ClientCapabilities where
5
6import           Data.Aeson.TH
7import qualified Data.Aeson as A
8import Data.Default
9import Language.LSP.Types.CallHierarchy
10import Language.LSP.Types.CodeAction
11import Language.LSP.Types.CodeLens
12import Language.LSP.Types.Command
13import Language.LSP.Types.Completion
14import Language.LSP.Types.Configuration
15import Language.LSP.Types.Diagnostic
16import Language.LSP.Types.Declaration
17import Language.LSP.Types.Definition
18import Language.LSP.Types.DocumentColor
19import Language.LSP.Types.DocumentHighlight
20import Language.LSP.Types.DocumentLink
21import Language.LSP.Types.DocumentSymbol
22import Language.LSP.Types.FoldingRange
23import Language.LSP.Types.Formatting
24import Language.LSP.Types.Hover
25import Language.LSP.Types.Implementation
26import Language.LSP.Types.References
27import Language.LSP.Types.Rename
28import Language.LSP.Types.SelectionRange
29import Language.LSP.Types.SemanticTokens
30import Language.LSP.Types.SignatureHelp
31import Language.LSP.Types.TextDocument
32import Language.LSP.Types.TypeDefinition
33import Language.LSP.Types.Utils
34import Language.LSP.Types.WatchedFiles
35import Language.LSP.Types.WorkspaceEdit
36import Language.LSP.Types.WorkspaceSymbol
37
38
39data WorkspaceClientCapabilities =
40  WorkspaceClientCapabilities
41    { -- | The client supports applying batch edits to the workspace by supporting
42      -- the request 'workspace/applyEdit'
43      _applyEdit :: Maybe Bool
44
45      -- | Capabilities specific to `WorkspaceEdit`s
46    , _workspaceEdit :: Maybe WorkspaceEditClientCapabilities
47
48      -- | Capabilities specific to the `workspace/didChangeConfiguration` notification.
49    , _didChangeConfiguration :: Maybe DidChangeConfigurationClientCapabilities
50
51       -- | Capabilities specific to the `workspace/didChangeWatchedFiles` notification.
52    , _didChangeWatchedFiles :: Maybe DidChangeWatchedFilesClientCapabilities
53
54      -- | Capabilities specific to the `workspace/symbol` request.
55    , _symbol :: Maybe WorkspaceSymbolClientCapabilities
56
57      -- | Capabilities specific to the `workspace/executeCommand` request.
58    , _executeCommand :: Maybe ExecuteCommandClientCapabilities
59
60      -- | The client has support for workspace folders.
61    , _workspaceFolders :: Maybe Bool
62
63      -- | The client supports `workspace/configuration` requests.
64    , _configuration :: Maybe Bool
65
66      -- | Capabilities specific to the semantic token requests scoped to the
67      -- workspace.
68      --
69      -- @since 3.16.0
70    , _semanticTokens :: Maybe SemanticTokensWorkspaceClientCapabilities
71    } deriving (Show, Read, Eq)
72
73deriveJSON lspOptions ''WorkspaceClientCapabilities
74
75instance Default WorkspaceClientCapabilities where
76  def = WorkspaceClientCapabilities def def def def def def def def def
77
78-- -------------------------------------
79
80data TextDocumentClientCapabilities =
81  TextDocumentClientCapabilities
82    { _synchronization :: Maybe TextDocumentSyncClientCapabilities
83
84      -- | Capabilities specific to the `textDocument/completion`
85    , _completion :: Maybe CompletionClientCapabilities
86
87      -- | Capabilities specific to the `textDocument/hover`
88    , _hover :: Maybe HoverClientCapabilities
89
90      -- | Capabilities specific to the `textDocument/signatureHelp`
91    , _signatureHelp :: Maybe SignatureHelpClientCapabilities
92
93      -- | Capabilities specific to the `textDocument/references`
94    , _references :: Maybe ReferencesClientCapabilities
95
96      -- | Capabilities specific to the `textDocument/documentHighlight`
97    , _documentHighlight :: Maybe DocumentHighlightClientCapabilities
98
99      -- | Capabilities specific to the `textDocument/documentSymbol`
100    , _documentSymbol :: Maybe DocumentSymbolClientCapabilities
101
102      -- | Capabilities specific to the `textDocument/formatting`
103    , _formatting :: Maybe DocumentFormattingClientCapabilities
104
105      -- | Capabilities specific to the `textDocument/rangeFormatting`
106    , _rangeFormatting :: Maybe DocumentRangeFormattingClientCapabilities
107
108      -- | Capabilities specific to the `textDocument/onTypeFormatting`
109    , _onTypeFormatting :: Maybe DocumentOnTypeFormattingClientCapabilities
110
111      -- | Capabilities specific to the `textDocument/declaration` request.
112      --
113      -- Since LSP 3.14.0
114    , _declaration :: Maybe DeclarationClientCapabilities
115
116      -- | Capabilities specific to the `textDocument/definition`
117    , _definition :: Maybe DefinitionClientCapabilities
118
119      -- | Capabilities specific to the `textDocument/typeDefinition`
120    , _typeDefinition :: Maybe TypeDefinitionClientCapabilities
121
122      -- | Capabilities specific to the `textDocument/implementation`
123    , _implementation :: Maybe ImplementationClientCapabilities
124
125      -- | Capabilities specific to the `textDocument/codeAction`
126    , _codeAction :: Maybe CodeActionClientCapabilities
127
128      -- | Capabilities specific to the `textDocument/codeLens`
129    , _codeLens :: Maybe CodeLensClientCapabilities
130
131      -- | Capabilities specific to the `textDocument/documentLink`
132    , _documentLink :: Maybe DocumentLinkClientCapabilities
133
134      -- | Capabilities specific to the `textDocument/documentColor` and the
135      -- `textDocument/colorPresentation` request
136    , _colorProvider :: Maybe DocumentColorClientCapabilities
137
138      -- | Capabilities specific to the `textDocument/rename`
139    , _rename :: Maybe RenameClientCapabilities
140
141      -- | Capabilities specific to `textDocument/publishDiagnostics`
142    , _publishDiagnostics :: Maybe PublishDiagnosticsClientCapabilities
143
144      -- | Capabilities specific to the `textDocument/foldingRange` request.
145      -- Since LSP 3.10.
146      --
147      -- @since 0.7.0.0
148    , _foldingRange :: Maybe FoldingRangeClientCapabilities
149
150      -- | Capabilities specific to the `textDocument/selectionRange` request.
151      -- Since LSP 3.15.0
152    , _selectionRange :: Maybe SelectionRangeClientCapabilities
153
154      -- | Call hierarchy specific to the `textDocument/prepareCallHierarchy` request.
155      -- Since LSP 3.16.0
156    , _callHierarchy :: Maybe CallHierarchyClientCapabilities
157
158    -- | Capabilities specific to the various semantic token requests.
159    --
160    -- @since 3.16.0
161    , _semanticTokens :: Maybe SemanticTokensClientCapabilities
162    } deriving (Show, Read, Eq)
163
164deriveJSON lspOptions ''TextDocumentClientCapabilities
165
166instance Default TextDocumentClientCapabilities where
167  def = TextDocumentClientCapabilities def def def def def def def def
168                                       def def def def def def def def
169                                       def def def def def def def def
170
171-- ---------------------------------------------------------------------
172
173-- | Window specific client capabilities.
174data WindowClientCapabilities =
175  WindowClientCapabilities
176    { -- | Whether client supports handling progress notifications.
177      _workDoneProgress :: Maybe Bool
178    } deriving (Show, Read, Eq)
179
180deriveJSON lspOptions ''WindowClientCapabilities
181
182instance Default WindowClientCapabilities where
183  def = WindowClientCapabilities def
184
185data ClientCapabilities =
186  ClientCapabilities
187    { _workspace    :: Maybe WorkspaceClientCapabilities
188    , _textDocument :: Maybe TextDocumentClientCapabilities
189    -- | Capabilities specific to `window/progress` requests. Experimental.
190    --
191    -- @since 0.10.0.0
192    , _window :: Maybe WindowClientCapabilities
193    , _experimental :: Maybe A.Object
194    } deriving (Show, Read, Eq)
195
196deriveJSON lspOptions ''ClientCapabilities
197
198instance Default ClientCapabilities where
199  def = ClientCapabilities def def def def
200