aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/lsp.lua
diff options
context:
space:
mode:
authorMathias Fußenegger <mfussenegger@users.noreply.github.com>2022-07-10 17:26:43 +0200
committerGitHub <noreply@github.com>2022-07-10 17:26:43 +0200
commit95c65a6b221fe6e1cf91e8322e7d7571dc511a71 (patch)
tree67411feeb8318cd7f98cd3758694e2cdd582a672 /runtime/lua/vim/lsp.lua
parent67b26a39f01cfd4a036070580b8ac6ccecda4a93 (diff)
downloadrneovim-95c65a6b221fe6e1cf91e8322e7d7571dc511a71.tar.gz
rneovim-95c65a6b221fe6e1cf91e8322e7d7571dc511a71.tar.bz2
rneovim-95c65a6b221fe6e1cf91e8322e7d7571dc511a71.zip
feat(lsp): defaults: tagfunc, omnifunc (#19003)
set `tagfunc` to `vim.lsp.tagfunc` and `omnifunc` to `vim.lsp.omnifunc` if empty when attaching a server
Diffstat (limited to 'runtime/lua/vim/lsp.lua')
-rw-r--r--runtime/lua/vim/lsp.lua31
1 files changed, 30 insertions, 1 deletions
diff --git a/runtime/lua/vim/lsp.lua b/runtime/lua/vim/lsp.lua
index 75c3b63da7..e11f127f47 100644
--- a/runtime/lua/vim/lsp.lua
+++ b/runtime/lua/vim/lsp.lua
@@ -562,7 +562,7 @@ end
---@private
--- Default handler for the 'textDocument/didOpen' LSP notification.
---
----@param bufnr (Number) Number of the buffer, or 0 for current
+---@param bufnr number Number of the buffer, or 0 for current
---@param client Client object
local function text_document_did_open_handler(bufnr, client)
changetracking.init(client, bufnr)
@@ -948,6 +948,28 @@ function lsp.start_client(config)
end
---@private
+ local function set_defaults(client, bufnr)
+ if client.server_capabilities.definitionProvider and vim.bo[bufnr].tagfunc == '' then
+ vim.bo[bufnr].tagfunc = 'v:lua.vim.lsp.tagfunc'
+ end
+ if client.server_capabilities.completionProvider and vim.bo[bufnr].omnifunc == '' then
+ vim.bo[bufnr].omnifunc = 'v:lua.vim.lsp.omnifunc'
+ end
+ end
+
+ ---@private
+ --- Reset defaults set by `set_defaults`.
+ --- Must only be called if the last client attached to a buffer exits.
+ local function unset_defaults(bufnr)
+ if vim.bo[bufnr].tagfunc == 'v:lua.vim.lsp.tagfunc' then
+ vim.bo[bufnr].tagfunc = nil
+ end
+ if vim.bo[bufnr].omnifunc == 'v:lua.vim.lsp.omnifunc' then
+ vim.bo[bufnr].omnifunc = nil
+ end
+ end
+
+ ---@private
--- Invoked on client exit.
---
---@param code (number) exit code of the process
@@ -972,6 +994,11 @@ function lsp.start_client(config)
client_ids[client_id] = nil
end
+ if vim.tbl_isempty(client_ids) then
+ vim.schedule(function()
+ unset_defaults(bufnr)
+ end)
+ end
end
active_clients[client_id] = nil
@@ -1325,6 +1352,8 @@ function lsp.start_client(config)
function client._on_attach(bufnr)
text_document_did_open_handler(bufnr, client)
+ set_defaults(client, bufnr)
+
nvim_exec_autocmds('LspAttach', {
buffer = bufnr,
modeline = false,