diff options
Diffstat (limited to 'lsp/clangd.lua')
| -rw-r--r-- | lsp/clangd.lua | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/lsp/clangd.lua b/lsp/clangd.lua index a4443779..c3f5d522 100644 --- a/lsp/clangd.lua +++ b/lsp/clangd.lua @@ -12,14 +12,15 @@ --- specified as compile_commands.json, see https://clangd.llvm.org/installation#compile_commandsjson -- https://clangd.llvm.org/extensions.html#switch-between-sourceheader -local function switch_source_header(bufnr) +local function switch_source_header(bufnr, client) local method_name = 'textDocument/switchSourceHeader' - local client = vim.lsp.get_clients({ bufnr = bufnr, name = 'clangd' })[1] - if not client then + ---@diagnostic disable-next-line:param-type-mismatch + if not client or not client:supports_method(method_name) then return vim.notify(('method %s is not supported by any servers active on the current buffer'):format(method_name)) end local params = vim.lsp.util.make_text_document_params(bufnr) - client.request(method_name, params, function(err, result) + ---@diagnostic disable-next-line:param-type-mismatch + client:request(method_name, params, function(err, result) if err then error(tostring(err)) end @@ -31,17 +32,18 @@ local function switch_source_header(bufnr) end, bufnr) end -local function symbol_info() - local bufnr = vim.api.nvim_get_current_buf() - local clangd_client = vim.lsp.get_clients({ bufnr = bufnr, name = 'clangd' })[1] - if not clangd_client or not clangd_client.supports_method 'textDocument/symbolInfo' then +local function symbol_info(bufnr, client) + local method_name = 'textDocument/symbolInfo' + ---@diagnostic disable-next-line:param-type-mismatch + if not client or not client:supports_method(method_name) then return vim.notify('Clangd client not found', vim.log.levels.ERROR) end local win = vim.api.nvim_get_current_win() - local params = vim.lsp.util.make_position_params(win, clangd_client.offset_encoding) - clangd_client.request('textDocument/symbolInfo', params, function(err, res) + local params = vim.lsp.util.make_position_params(win, client.offset_encoding) + ---@diagnostic disable-next-line:param-type-mismatch + client:request(method_name, params, function(err, res) if err or #res == 0 then - -- Clangd always returns an error, there is not reason to parse it + -- Clangd always returns an error, there is no reason to parse it return end local container = string.format('container: %s', res[1].containerName) ---@type string @@ -51,7 +53,6 @@ local function symbol_info() width = math.max(string.len(name), string.len(container)), focusable = false, focus = false, - border = 'single', title = 'Symbol Info', }) end, bufnr) @@ -87,13 +88,15 @@ return { client.offset_encoding = init_result.offsetEncoding end end, - on_attach = function(_, bufnr) + ---@param client vim.lsp.Client + ---@param bufnr integer + on_attach = function(client, bufnr) vim.api.nvim_buf_create_user_command(bufnr, 'LspClangdSwitchSourceHeader', function() - switch_source_header(bufnr) + switch_source_header(bufnr, client) end, { desc = 'Switch between source/header' }) vim.api.nvim_buf_create_user_command(bufnr, 'LspClangdShowSymbolInfo', function() - symbol_info() + symbol_info(bufnr, client) end, { desc = 'Show symbol info' }) end, } |
