summaryrefslogtreecommitdiff
path: root/dot_config/nvim_new/lsp/ccls.lua
diff options
context:
space:
mode:
authorIbrahim Muftee <ibrahim@muftee.net>2025-08-04 07:45:42 -0500
committerIbrahim Muftee <ibrahim@muftee.net>2026-07-01 00:23:31 -0400
commit23d53b5d7bc2f31eed672c0a8d26dc608fb6d0ba (patch)
tree7b23cd20340dd0984bb1a9616744ef81c69d3b4c /dot_config/nvim_new/lsp/ccls.lua
parent1227ae992f4494d6a3d82d70d0bb9cb01dd50847 (diff)
feat(nvim) slim down new config
Diffstat (limited to 'dot_config/nvim_new/lsp/ccls.lua')
-rw-r--r--dot_config/nvim_new/lsp/ccls.lua52
1 files changed, 52 insertions, 0 deletions
diff --git a/dot_config/nvim_new/lsp/ccls.lua b/dot_config/nvim_new/lsp/ccls.lua
new file mode 100644
index 0000000..0b72d6d
--- /dev/null
+++ b/dot_config/nvim_new/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, bufnr)
+ vim.api.nvim_buf_create_user_command(bufnr, 'LspCclsSwitchSourceHeader', function()
+ switch_source_header(client, bufnr)
+ end, { desc = 'Switch between source/header' })
+ end,
+}