lsp: Add check for declaration and typeDefinition support in vim lsp server before making request (#12421)

* Add check for typeDefinition support in vim lsp server

* Check for typeDefinitionProvider in server

* Check for declarationProvider in server

* Add check for client support

* Fix typo
This commit is contained in:
Dheepak Krishnamurthy 2020-06-04 06:52:44 -06:00 committed by GitHub
parent ac5a3f2c56
commit 6f4f38cd54
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 0 deletions

View File

@ -507,6 +507,8 @@ function lsp.start_client(config)
or (not client.resolved_capabilities.signature_help and method == 'textDocument/signatureHelp')
or (not client.resolved_capabilities.goto_definition and method == 'textDocument/definition')
or (not client.resolved_capabilities.implementation and method == 'textDocument/implementation')
or (not client.resolved_capabilities.declaration and method == 'textDocument/declaration')
or (not client.resolved_capabilities.type_definition and method == 'textDocument/typeDefinition')
or (not client.resolved_capabilities.document_symbol and method == 'textDocument/documentSymbol')
or (not client.resolved_capabilities.workspace_symbol and method == 'textDocument/workspaceSymbol')
then

View File

@ -923,6 +923,28 @@ function protocol.resolve_capabilities(server_capabilities)
error("The server sent invalid codeActionProvider")
end
if server_capabilities.declarationProvider == nil then
general_properties.declaration = false
elseif type(server_capabilities.declarationProvider) == 'boolean' then
general_properties.declaration = server_capabilities.declarationProvider
elseif type(server_capabilities.declarationProvider) == 'table' then
-- TODO: support more detailed declarationProvider options.
general_properties.declaration = false
else
error("The server sent invalid declarationProvider")
end
if server_capabilities.typeDefinitionProvider == nil then
general_properties.type_definition = false
elseif type(server_capabilities.typeDefinitionProvider) == 'boolean' then
general_properties.type_definition = server_capabilities.typeDefinitionProvider
elseif type(server_capabilities.typeDefinitionProvider) == 'table' then
-- TODO: support more detailed typeDefinitionProvider options.
general_properties.type_definition = false
else
error("The server sent invalid typeDefinitionProvider")
end
if server_capabilities.implementationProvider == nil then
general_properties.implementation = false
elseif type(server_capabilities.implementationProvider) == 'boolean' then