aboutsummaryrefslogtreecommitdiffstats
path: root/lsp/ccls.lua
diff options
context:
space:
mode:
authorJulian Grinblat <julian@dotcore.co.il>2025-04-30 22:17:01 +0900
committerGitHub <noreply@github.com>2025-04-30 06:17:01 -0700
commit91cba77951e0644cfea5f7d3101f7e84179673ff (patch)
treed599e4fee6ab3464dc8944953305214456b9f2fc /lsp/ccls.lua
parentperf: execute sanitize_cmd only on Windows to speed up WSL #3808 (diff)
downloadnvim-lspconfig-91cba77951e0644cfea5f7d3101f7e84179673ff.tar
nvim-lspconfig-91cba77951e0644cfea5f7d3101f7e84179673ff.tar.gz
nvim-lspconfig-91cba77951e0644cfea5f7d3101f7e84179673ff.tar.bz2
nvim-lspconfig-91cba77951e0644cfea5f7d3101f7e84179673ff.tar.lz
nvim-lspconfig-91cba77951e0644cfea5f7d3101f7e84179673ff.tar.xz
nvim-lspconfig-91cba77951e0644cfea5f7d3101f7e84179673ff.tar.zst
nvim-lspconfig-91cba77951e0644cfea5f7d3101f7e84179673ff.zip
feat(ccls): add vim.lsp.config support #3807
Diffstat (limited to 'lsp/ccls.lua')
-rw-r--r--lsp/ccls.lua52
1 files changed, 52 insertions, 0 deletions
diff --git a/lsp/ccls.lua b/lsp/ccls.lua
new file mode 100644
index 00000000..d449fc2d
--- /dev/null
+++ b/lsp/ccls.lua
@@ -0,0 +1,52 @@
+---@brief
+---
+--- https://github.com/MaskRay/ccls/wiki
+---
+--- ccls relies on a [JSON compilation database](https://clang.llvm.org/docs/JSONCompilationDatabase.html) specified
+--- as compile_commands.json or, for simpler projects, a .ccls.
+--- For details on how to automatically generate one using CMake look [here](https://cmake.org/cmake/help/latest/variable/CMAKE_EXPORT_COMPILE_COMMANDS.html). Alternatively, you can use [Bear](https://github.com/rizsotto/Bear).
+---
+--- Customization options are passed to ccls at initialization time via init_options, a list of available options can be found [here](https://github.com/MaskRay/ccls/wiki/Customization#initialization-options). For example:
+---
+--- ```lua
+--- vim.lsp.config("ccls", {
+--- init_options = {
+--- compilationDatabaseDirectory = "build";
+--- index = {
+--- threads = 0;
+--- };
+--- clang = {
+--- excludeArgs = { "-frounding-math"} ;
+--- };
+--- }
+--- })
+--- ```
+
+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
+
+return {
+ 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)
+ vim.api.nvim_buf_create_user_command(0, 'LspCclsSwitchSourceHeader', function()
+ switch_source_header(client, 0)
+ end, { desc = 'Switch between source/header' })
+ end,
+}