]> git.madduck.net Git - etc/vim.git/blob - .vim/bundle/vim-lsp/autoload/lsp/capabilities.vim

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

Do not set EDITOR/VISUAL for shell
[etc/vim.git] / .vim / bundle / vim-lsp / autoload / lsp / capabilities.vim
1 function! s:has_provider(server_name, ...) abort
2     let l:value = lsp#get_server_capabilities(a:server_name)
3     for l:provider in a:000
4         if empty(l:value) || type(l:value) != type({}) || !has_key(l:value, l:provider)
5             return 0
6         endif
7         let l:value = l:value[l:provider]
8     endfor
9     return (type(l:value) == type(v:true) && l:value == v:true) || type(l:value) == type({})
10 endfunction
11
12 function! lsp#capabilities#has_declaration_provider(server_name) abort
13     return s:has_provider(a:server_name, 'declarationProvider')
14 endfunction
15
16 function! lsp#capabilities#has_definition_provider(server_name) abort
17     return s:has_provider(a:server_name, 'definitionProvider')
18 endfunction
19
20 function! lsp#capabilities#has_references_provider(server_name) abort
21     return s:has_provider(a:server_name, 'referencesProvider')
22 endfunction
23
24 function! lsp#capabilities#has_hover_provider(server_name) abort
25     return s:has_provider(a:server_name, 'hoverProvider')
26 endfunction
27
28 function! lsp#capabilities#has_rename_provider(server_name) abort
29     return s:has_provider(a:server_name, 'renameProvider')
30 endfunction
31
32 function! lsp#capabilities#has_rename_prepare_provider(server_name) abort
33     return s:has_provider(a:server_name, 'renameProvider', 'prepareProvider')
34 endfunction
35
36 function! lsp#capabilities#has_workspace_folders_change_notifications(server_name) abort
37     let l:capabilities = lsp#get_server_capabilities(a:server_name)
38     if type(l:capabilities) == type({}) && !empty(l:capabilities)
39         let l:workspace = get(l:capabilities, 'workspace', {})
40         if type(l:workspace) == type({}) && !empty(l:workspace)
41             let l:workspace_folders = get(l:workspace, 'workspaceFolders', {})
42             if type(l:workspace_folders) == type({}) && !empty(l:workspace_folders)
43                 if get(l:workspace_folders, 'supported', v:false) && get(l:workspace_folders, 'changeNotifications', '') ==# 'workspace/didChangeWorkspaceFolders'
44                     return v:true
45                 endif
46             endif
47         endif
48     endif
49     return v:false
50 endfunction
51
52 function! lsp#capabilities#has_document_formatting_provider(server_name) abort
53     return s:has_provider(a:server_name, 'documentFormattingProvider')
54 endfunction
55
56 function! lsp#capabilities#has_document_range_formatting_provider(server_name) abort
57     return s:has_provider(a:server_name, 'documentRangeFormattingProvider')
58 endfunction
59
60 function! lsp#capabilities#has_document_symbol_provider(server_name) abort
61     return s:has_provider(a:server_name, 'documentSymbolProvider')
62 endfunction
63
64 function! lsp#capabilities#has_workspace_symbol_provider(server_name) abort
65     return s:has_provider(a:server_name, 'workspaceSymbolProvider')
66 endfunction
67
68 function! lsp#capabilities#has_implementation_provider(server_name) abort
69     return s:has_provider(a:server_name, 'implementationProvider')
70 endfunction
71
72 function! lsp#capabilities#has_code_action_provider(server_name) abort
73     let l:capabilities = lsp#get_server_capabilities(a:server_name)
74     if !empty(l:capabilities) && has_key(l:capabilities, 'codeActionProvider')
75         if type(l:capabilities['codeActionProvider']) == type({})
76             if has_key(l:capabilities['codeActionProvider'], 'codeActionKinds') && type(l:capabilities['codeActionProvider']['codeActionKinds']) == type([])
77                 return len(l:capabilities['codeActionProvider']['codeActionKinds']) != 0
78             endif
79         endif
80     endif
81     return s:has_provider(a:server_name, 'codeActionProvider')
82 endfunction
83
84 function! lsp#capabilities#has_code_lens_provider(server_name) abort
85     let l:capabilities = lsp#get_server_capabilities(a:server_name)
86     if !empty(l:capabilities) && has_key(l:capabilities, 'codeLensProvider')
87         return 1
88     endif
89     return 0
90 endfunction
91
92 function! lsp#capabilities#has_type_definition_provider(server_name) abort
93     return s:has_provider(a:server_name, 'typeDefinitionProvider')
94 endfunction
95
96 function! lsp#capabilities#has_type_hierarchy_provider(server_name) abort
97     return s:has_provider(a:server_name, 'typeHierarchyProvider')
98 endfunction
99
100 function! lsp#capabilities#has_document_highlight_provider(server_name) abort
101     return s:has_provider(a:server_name, 'documentHighlightProvider')
102 endfunction
103
104 function! lsp#capabilities#has_folding_range_provider(server_name) abort
105     return s:has_provider(a:server_name, 'foldingRangeProvider')
106 endfunction
107
108 function! lsp#capabilities#has_call_hierarchy_provider(server_name) abort
109     return s:has_provider(a:server_name, 'callHierarchyProvider')
110 endfunction
111
112 function! lsp#capabilities#has_semantic_tokens(server_name) abort
113     return s:has_provider(a:server_name, 'semanticTokensProvider')
114 endfunction
115
116 " [supports_did_save (boolean), { 'includeText': boolean }]
117 function! lsp#capabilities#get_text_document_save_registration_options(server_name) abort
118     let l:capabilities = lsp#get_server_capabilities(a:server_name)
119     if !empty(l:capabilities) && has_key(l:capabilities, 'textDocumentSync')
120         if type(l:capabilities['textDocumentSync']) == type({})
121             let l:save_options = get(l:capabilities['textDocumentSync'], 'save', 0)
122             if type(l:save_options) == type({})
123               return [1, {'includeText': get(l:save_options, 'includeText', 0)}]
124             else
125               return [l:save_options ? 1 : 0, {'includeText': 0 }]
126             endif
127         else
128             return [1, { 'includeText': 0 }]
129         endif
130     endif
131     return [0, { 'includeText': 0 }]
132 endfunction
133
134 " supports_did_change (boolean)
135 function! lsp#capabilities#get_text_document_change_sync_kind(server_name) abort
136     let l:capabilities = lsp#get_server_capabilities(a:server_name)
137     if !empty(l:capabilities) && has_key(l:capabilities, 'textDocumentSync')
138         if type(l:capabilities['textDocumentSync']) == type({})
139             if  has_key(l:capabilities['textDocumentSync'], 'change') && type(l:capabilities['textDocumentSync']['change']) == type(1)
140                 let l:val = l:capabilities['textDocumentSync']['change']
141                 return l:val >= 0 && l:val <= 2 ? l:val : 1
142             else
143                 return 1
144             endif
145         elseif type(l:capabilities['textDocumentSync']) == type(1)
146             return l:capabilities['textDocumentSync']
147         else
148             return 1
149         endif
150     endif
151     return 1
152 endfunction
153
154 function! lsp#capabilities#has_signature_help_provider(server_name) abort
155     let l:capabilities = lsp#get_server_capabilities(a:server_name)
156     if !empty(l:capabilities) && has_key(l:capabilities, 'signatureHelpProvider')
157         return 1
158     endif
159     return 0
160 endfunction
161
162 function! lsp#capabilities#get_signature_help_trigger_characters(server_name) abort
163     let l:capabilities = lsp#get_server_capabilities(a:server_name)
164     if !empty(l:capabilities) && has_key(l:capabilities, 'signatureHelpProvider')
165     let l:trigger_chars = []
166         if type(l:capabilities['signatureHelpProvider']) == type({})
167             if  has_key(l:capabilities['signatureHelpProvider'], 'triggerCharacters')
168                 let l:trigger_chars = l:capabilities['signatureHelpProvider']['triggerCharacters']
169             endif
170             " If retriggerChars exist, just treat them like triggerChars.
171             if  has_key(l:capabilities['signatureHelpProvider'], 'retriggerCharacters')
172                 let l:trigger_chars += l:capabilities['signatureHelpProvider']['retriggerCharacters']
173             endif
174             return l:trigger_chars
175         endif
176     endif
177     return []
178 endfunction
179
180 function! lsp#capabilities#get_code_action_kinds(server_name) abort
181     let l:capabilities = lsp#get_server_capabilities(a:server_name)
182     if !empty(l:capabilities) && has_key(l:capabilities, 'codeActionProvider')
183         if type(l:capabilities['codeActionProvider']) == type({})
184             if has_key(l:capabilities['codeActionProvider'], 'codeActionKinds') && type(l:capabilities['codeActionProvider']['codeActionKinds']) == type([])
185                 return l:capabilities['codeActionProvider']['codeActionKinds']
186             endif
187         endif
188     endif
189     return []
190 endfunction
191
192 function! lsp#capabilities#has_completion_provider(server_name) abort
193     return s:has_provider(a:server_name, 'completionProvider')
194 endfunction
195
196 function! lsp#capabilities#has_completion_resolve_provider(server_name) abort
197     return s:has_provider(a:server_name, 'completionProvider', 'resolveProvider')
198 endfunction
199
200 function! lsp#capabilities#has_inlay_hint_provider(server_name) abort
201     return s:has_provider(a:server_name, 'inlayHintProvider')
202 endfunction