Skip to content

Instantly share code, notes, and snippets.

@mjlbach
Created January 6, 2022 15:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save mjlbach/af3760b56249fedaaa22080ab8f7589f to your computer and use it in GitHub Desktop.
Save mjlbach/af3760b56249fedaaa22080ab8f7589f to your computer and use it in GitHub Desktop.
project.lua
local function common_keymaps(bufnr)
vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
-- Mappings.
local opts = { noremap = true, silent = true }
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gD', '<Cmd>lua vim.lsp.buf.declaration()<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gd', '<Cmd>lua vim.lsp.buf.definition()<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', '<Cmd>lua vim.lsp.buf.hover()<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<C-s>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gr', [[<cmd>lua require('telescope.builtin').lsp_references()<cr>]], opts)
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>car', '<Esc><cmd>lua vim.lsp.buf.range_code_action()<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>e', '<cmd>lua vim.diagnostic.open_float()<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, 'n', '[d', '<cmd>lua vim.diagnostic.goto_prev()<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, 'n', ']d', '<cmd>lua vim.diagnostic.goto_next()<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>q', '<cmd>lua vim.diagnostic.setloclist()<CR>', opts)
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<leader>Q', '<cmd>lua vim.diagnostic.setqflist()<CR>', opts)
FormatRange = function()
local start_pos = vim.api.nvim_buf_get_mark(0, '<')
local end_pos = vim.api.nvim_buf_get_mark(0, '>')
vim.lsp.buf.range_formatting({}, start_pos, end_pos)
end
vim.cmd [[
command! -range FormatRange execute 'lua FormatRange()'
]]
vim.cmd [[
command! Format execute 'lua vim.lsp.buf.formatting()'
]]
-- vim.cmd [[ autocmd BufWritePre * lua vim.lsp.buf.formatting({save = true}) ]]
end
local Project = require('project')
local c_project = Project.new {
priority = 10,
project_folders = {'/home/michael/Repositories/neovim/neovim'},
-- resolve_project = function()
-- end,
on_creation = function(self)
local clangd_configuration = require('lspconfig.server_configurations.clangd').default_config
local lua_configuration = require('lspconfig.server_configurations.sumneko_lua').default_config
clangd_configuration.root_dir = nil
lua_configuration.root_dir = nil
self.clangd_id = vim.lsp.start_client(clangd_configuration)
self.lua_id = vim.lsp.start_client(lua_configuration)
self.clangd_client = vim.lsp.get_client_by_id(self.clangd_id)
self.lua_client = vim.lsp.get_client_by_id(self.lua_id)
end,
on_open = function(self, bufnr)
vim.lsp.buf_attach_client(bufnr, self.clangd_id)
vim.lsp.buf_attach_client(bufnr, self.lua_id)
common_keymaps(bufnr)
end,
on_close = function(self, bufnr)
vim.lsp.buf_detach_client(bufnr, self.clangd_id)
vim.lsp.buf_detach_client(bufnr, self.lua_id)
end,
on_termination = function(self)
self.clangd_client.close()
self.lua_client.close()
end,
}
vim.projects.watch({c_project})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment