dotfiles/private_dot_config/nvim/lua/plugins/nvim-lspconfig/settings.lua
2024-04-05 02:25:01 +02:00

110 lines
3.8 KiB
Lua

--[[
Settings for main nvim-lspconfg plugin
--]]
-- Setup language servers.
local lspconfig = require('lspconfig')
local luasnip = require('luasnip')
lspconfig.pyright.setup {}
lspconfig.tsserver.setup {}
lspconfig.rust_analyzer.setup {
-- Server-specific settings. See `:help lspconfig-setup`
settings = {
['rust-analyzer'] = {},
},
}
-- Global mappings.
-- See `:help vim.diagnostic.*` for documentation on any of the below functions
vim.keymap.set('n', '<Leader>ple', vim.diagnostic.open_float)
vim.keymap.set('n', '<Leader>pln', vim.diagnostic.goto_prev)
vim.keymap.set('n', '<Leader>pl?', vim.diagnostic.goto_next)
vim.keymap.set('n', '<Leader>plq', vim.diagnostic.setloclist)
-- Use LspAttach autocommand to only map the following keys
-- after the language server attaches to the current buffer
vim.api.nvim_create_autocmd('LspAttach', {
group = vim.api.nvim_create_augroup('UserLspConfig', {}),
callback = function(ev)
-- Enable completion triggered by <c-x><c-o>
vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc'
-- Buffer local mappings.
-- See `:help vim.lsp.*` for documentation on any of the below functions
local opts = { buffer = ev.buf }
vim.keymap.set('n', '<Leader>plD', vim.lsp.buf.declaration, opts)
vim.keymap.set('n', '<Leader>pld', vim.lsp.buf.definition, opts)
vim.keymap.set('n', '<Leader>plh', vim.lsp.buf.hover, opts)
vim.keymap.set('n', '<Leader>pli', vim.lsp.buf.implementation, opts)
vim.keymap.set('n', '<Leader>pls', vim.lsp.buf.signature_help, opts)
vim.keymap.set('n', '<Leader>plwa', vim.lsp.buf.add_workspace_folder, opts)
vim.keymap.set('n', '<Leader>plwr', vim.lsp.buf.remove_workspace_folder, opts)
vim.keymap.set('n', '<Leader>plwl', function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end, opts)
vim.keymap.set('n', '<Leader>plt', vim.lsp.buf.type_definition, opts)
vim.keymap.set('n', '<Leader>plr', vim.lsp.buf.rename, opts)
vim.keymap.set({ 'n', 'v' }, '<Leader>plca', vim.lsp.buf.code_action, opts)
vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts)
vim.keymap.set('n', '<Leader>pll', function()
vim.lsp.buf.format { async = true }
end, opts)
end,
})
-- Add additional capabilities supported by nvim-cmp
local capabilities = require("cmp_nvim_lsp").default_capabilities()
local lspconfig = require('lspconfig')
-- Enable some language servers with the additional completion capabilities offered by nvim-cmp
local servers = { 'rust_analyzer', 'tsserver' }
for _, lsp in ipairs(servers) do
lspconfig[lsp].setup {
-- on_attach = my_custom_on_attach,
capabilities = capabilities,
}
end
-- nvim-cmp setup
local cmp = require 'cmp'
cmp.setup {
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
mapping = cmp.mapping.preset.insert({
['<C-u>'] = cmp.mapping.scroll_docs(-4), -- Up
['<C-d>'] = cmp.mapping.scroll_docs(4), -- Down
-- C-b (back) C-f (forward) for snippet placeholder navigation.
['<C-Space>'] = cmp.mapping.complete(),
['<CR>'] = cmp.mapping.confirm {
behavior = cmp.ConfirmBehavior.Replace,
select = true,
},
['<Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
else
fallback()
end
end, { 'i', 's' }),
['<S-Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, { 'i', 's' }),
}),
sources = {
{ name = 'nvim_lsp' },
{ name = 'luasnip' },
},
}