summaryrefslogtreecommitdiff
path: root/start/lspconfig-0.1.3/lua/lspconfig/server_configurations/clangd.lua
diff options
context:
space:
mode:
Diffstat (limited to 'start/lspconfig-0.1.3/lua/lspconfig/server_configurations/clangd.lua')
-rw-r--r--start/lspconfig-0.1.3/lua/lspconfig/server_configurations/clangd.lua87
1 files changed, 87 insertions, 0 deletions
diff --git a/start/lspconfig-0.1.3/lua/lspconfig/server_configurations/clangd.lua b/start/lspconfig-0.1.3/lua/lspconfig/server_configurations/clangd.lua
new file mode 100644
index 0000000..4e0f2d7
--- /dev/null
+++ b/start/lspconfig-0.1.3/lua/lspconfig/server_configurations/clangd.lua
@@ -0,0 +1,87 @@
+local util = require 'lspconfig.util'
+
+-- https://clangd.llvm.org/extensions.html#switch-between-sourceheader
+local function switch_source_header(bufnr)
+ bufnr = util.validate_bufnr(bufnr)
+ local clangd_client = util.get_active_client_by_name(bufnr, 'clangd')
+ local params = { uri = vim.uri_from_bufnr(bufnr) }
+ if clangd_client then
+ clangd_client.request('textDocument/switchSourceHeader', params, function(err, result)
+ if err then
+ error(tostring(err))
+ end
+ if not result then
+ print 'Corresponding file cannot be determined'
+ return
+ end
+ vim.api.nvim_command('edit ' .. vim.uri_to_fname(result))
+ end, bufnr)
+ else
+ print 'method textDocument/switchSourceHeader is not supported by any servers active on the current buffer'
+ end
+end
+
+local root_files = {
+ '.clangd',
+ '.clang-tidy',
+ '.clang-format',
+ 'compile_commands.json',
+ 'compile_flags.txt',
+ 'configure.ac', -- AutoTools
+}
+
+local default_capabilities = vim.tbl_deep_extend(
+ 'force',
+ util.default_config.capabilities or vim.lsp.protocol.make_client_capabilities(),
+ {
+ textDocument = {
+ completion = {
+ editsNearCursor = true,
+ },
+ },
+ offsetEncoding = { 'utf-8', 'utf-16' },
+ }
+)
+
+return {
+ default_config = {
+ cmd = { 'clangd' },
+ filetypes = { 'c', 'cpp', 'objc', 'objcpp' },
+ root_dir = function(fname)
+ return util.root_pattern(unpack(root_files))(fname) or util.find_git_ancestor(fname)
+ end,
+ single_file_support = true,
+ capabilities = default_capabilities,
+ },
+ commands = {
+ ClangdSwitchSourceHeader = {
+ function()
+ switch_source_header(0)
+ end,
+ description = 'Switch between source/header',
+ },
+ },
+ docs = {
+ description = [[
+https://clangd.llvm.org/installation.html
+
+**NOTE:** Clang >= 11 is recommended! See [this issue for more](https://github.com/neovim/nvim-lsp/issues/23).
+
+clangd relies on a [JSON compilation database](https://clang.llvm.org/docs/JSONCompilationDatabase.html) specified as compile_commands.json, see https://clangd.llvm.org/installation#compile_commandsjson
+]],
+ default_config = {
+ root_dir = [[
+ root_pattern(
+ '.clangd',
+ '.clang-tidy',
+ '.clang-format',
+ 'compile_commands.json',
+ 'compile_flags.txt',
+ 'configure.ac',
+ '.git'
+ )
+ ]],
+ capabilities = [[default capabilities, with offsetEncoding utf-8]],
+ },
+ },
+}