diff options
author | awy <awy@awy.one> | 2025-10-14 18:27:29 +0300 |
---|---|---|
committer | awy <awy@awy.one> | 2025-10-14 18:27:29 +0300 |
commit | de009fd679e10d053fdcc10785f91ad5317449ea (patch) | |
tree | 60918a488b579588596cf4d509fde298dccbf15d /.config/nvim/lsp/ccls.lua | |
parent | 9ea6cf81adb5d6abc59843de1db45913210f9320 (diff) | |
download | hyprdots-de009fd679e10d053fdcc10785f91ad5317449ea.tar.gz |
nvim revamp
Diffstat (limited to '.config/nvim/lsp/ccls.lua')
-rw-r--r-- | .config/nvim/lsp/ccls.lua | 53 |
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, +} |