aboutsummaryrefslogtreecommitdiff
path: root/.config/nvim/lsp/ccls.lua
diff options
context:
space:
mode:
authorawy <awy@awy.one>2025-10-20 20:55:26 +0300
committerawy <awy@awy.one>2025-10-20 20:55:26 +0300
commit662dafc52b2c8a9426bb2197ab9246a8cda318e4 (patch)
treef9d1f20e3864360bf941fd6bc02848ed77b037a8 /.config/nvim/lsp/ccls.lua
parent8131d9f2898b991a2d2c7a2ac601ce9e07cc9c9f (diff)
downloadhyprdots-662dafc52b2c8a9426bb2197ab9246a8cda318e4.tar.gz
nvqw
Diffstat (limited to '.config/nvim/lsp/ccls.lua')
-rw-r--r--.config/nvim/lsp/ccls.lua53
1 files changed, 53 insertions, 0 deletions
diff --git a/.config/nvim/lsp/ccls.lua b/.config/nvim/lsp/ccls.lua
new file mode 100644
index 0000000..44268df
--- /dev/null
+++ b/.config/nvim/lsp/ccls.lua
@@ -0,0 +1,53 @@
+---@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
+
+---@type vim.lsp.Config
+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, bufnr)
+ vim.api.nvim_buf_create_user_command(bufnr, 'LspCclsSwitchSourceHeader', function()
+ switch_source_header(client, bufnr)
+ end, { desc = 'Switch between source/header' })
+ end,
+}