diff options
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, +}  |