summaryrefslogtreecommitdiffstats
path: root/.config/nvim/lua/lsp/ccls.lua
blob: 431d5474fd50785f37ee53b858235266a6a8b593 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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

vim.lsp.config('ccls', {
	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,
})

vim.lsp.enable('ccls')