aboutsummaryrefslogtreecommitdiffstats
path: root/lsp/clangd.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lsp/clangd.lua')
-rw-r--r--lsp/clangd.lua33
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,
}