summaryrefslogtreecommitdiffstats
path: root/.config
diff options
context:
space:
mode:
authorjoe <rbo@gmx.us>2025-10-17 11:05:25 +0200
committerjoe <rbo@gmx.us>2025-10-17 11:05:25 +0200
commit78ffcc22d0bdef531e07a398373085cc1c037a48 (patch)
tree45d05939b38a5f848689b36c4176778778e8e851 /.config
parentup (diff)
downloaddotfiles-bsd-78ffcc22d0bdef531e07a398373085cc1c037a48.tar.gz
dotfiles-bsd-78ffcc22d0bdef531e07a398373085cc1c037a48.tar.bz2
dotfiles-bsd-78ffcc22d0bdef531e07a398373085cc1c037a48.tar.xz
dotfiles-bsd-78ffcc22d0bdef531e07a398373085cc1c037a48.tar.zst
dotfiles-bsd-78ffcc22d0bdef531e07a398373085cc1c037a48.zip
up
Diffstat (limited to '.config')
-rw-r--r--.config/nvim/lua/lsp/ccls.lua30
1 files changed, 30 insertions, 0 deletions
diff --git a/.config/nvim/lua/lsp/ccls.lua b/.config/nvim/lua/lsp/ccls.lua
new file mode 100644
index 0000000..431d547
--- /dev/null
+++ b/.config/nvim/lua/lsp/ccls.lua
@@ -0,0 +1,30 @@
+local function switch_source_header(client, bufnr)
+ local method_name = 'textDocument/switchSourceHeader'
+ local params = vim.lsp.util.make_text_document_params(bufnr)
+ client:request(method_name, params, function(err, result)
+ if err then
+ error(tostring(err))
+ end
+ if not result then
+ vim.notify('corresponding file cannot be determined')
+ return
+ end
+ vim.cmd.edit(vim.uri_to_fname(result))
+ end, bufnr)
+end
+
+vim.lsp.config('ccls', {
+ cmd = { 'ccls' },
+ filetypes = { 'c', 'cpp', 'objc', 'objcpp', 'cuda' },
+ root_markers = { 'compile_commands.json', '.ccls', '.git' },
+ offset_encoding = 'utf-32',
+ -- ccls does not support sending a null root directory
+ workspace_required = true,
+ on_attach = function(client, bufnr)
+ vim.api.nvim_buf_create_user_command(bufnr, 'LspCclsSwitchSourceHeader', function()
+ switch_source_header(client, bufnr)
+ end, { desc = 'Switch between source/header' })
+ end,
+})
+
+vim.lsp.enable('ccls')