config: nvim: add LSP support together with mason package manager

This commit is contained in:
Thomas Preisner 2022-10-16 22:38:02 +02:00
parent ab5cceddab
commit c058fa22ea
4 changed files with 71 additions and 0 deletions

View file

@ -43,6 +43,38 @@ return require('packer').startup({
config = function() require('colorizer').setup() end,
}
--------------------
-- Package Manager
--------------------
use { -- portable package manager
'williamboman/mason.nvim',
config = load_config('mason'),
}
use { -- update helper for mason
'WhoIsSethDaniel/mason-tool-installer.nvim',
after = { 'mason.nvim' },
config = function() require('mason-tool-installer').setup({}) end,
}
--------------------
-- LSP Setup
--------------------
use { -- compatibility layer between mason and lspconfig + autoinstaller
'williamboman/mason-lspconfig.nvim',
after = { 'mason.nvim' },
requires = {
'neovim/nvim-lspconfig',
},
}
use { -- configuration layer for neovim LSP client
'neovim/nvim-lspconfig',
after = {
'mason-lspconfig.nvim',
'cmp-nvim-lsp',
},
config = load_config('lspconfig'),
}
--------------------
-- Snippets
--------------------
@ -62,6 +94,10 @@ return require('packer').startup({
--------------------
-- Completion
--------------------
use { -- nvim-cmp source for nvim-lsp
'hrsh7th/cmp-nvim-lsp',
requires = { 'hrsh7th/nvim-cmp' },
}
use { -- nvim-cmp source for LuaSnip
'saadparwaiz1/cmp_luasnip',
requires = { 'hrsh7th/nvim-cmp' },
@ -82,6 +118,7 @@ return require('packer').startup({
use { -- completion engine
'hrsh7th/nvim-cmp',
after = {
'cmp-nvim-lsp',
'cmp-buffer',
'cmp-path',
'cmp-cmdline',

View file

@ -0,0 +1,24 @@
local map = require('utils').map -- import map
require('mason-lspconfig').setup()
require('mason-lspconfig').setup_handlers({
function(server_name) -- default handler
-- prepare nvim-cmp source
local capabilities = require('cmp_nvim_lsp').default_capabilities()
require('lspconfig')[server_name].setup({
-- announce nvim-cmp-lsp capabilities to each lsp server
capabilities = capabilities
})
end
})
-- lsp keybindings
map('n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>')
map('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>')
map('n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>')
map('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>')
map('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>')
map('n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>')
map('n', '<leader>rn', '<cmd>lua vim.lsp.buf.rename()<CR>')
map('n', '<leader>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>')
map('n', '<leader>f', '<cmd>lua vim.lsp.buf.type_definition({ async = true })<CR>')

View file

@ -0,0 +1,9 @@
require('mason').setup({
ui = {
icons = {
package_installed = '',
package_pending = '',
package_uninstalled = '',
},
},
})

View file

@ -10,6 +10,7 @@ cmp.setup({
formatting = {
format = function(entry, vim_item)
vim_item.menu = ({
nvim_lsp = '[LSP]',
buffer = '[Buffer]',
luasnip = '[Snippet]',
})[entry.source.name]