config: nvim: add LSP support together with mason package manager
This commit is contained in:
parent
ab5cceddab
commit
c058fa22ea
4 changed files with 71 additions and 0 deletions
|
|
@ -43,6 +43,38 @@ return require('packer').startup({
|
||||||
config = function() require('colorizer').setup() end,
|
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
|
-- Snippets
|
||||||
--------------------
|
--------------------
|
||||||
|
|
@ -62,6 +94,10 @@ return require('packer').startup({
|
||||||
--------------------
|
--------------------
|
||||||
-- Completion
|
-- Completion
|
||||||
--------------------
|
--------------------
|
||||||
|
use { -- nvim-cmp source for nvim-lsp
|
||||||
|
'hrsh7th/cmp-nvim-lsp',
|
||||||
|
requires = { 'hrsh7th/nvim-cmp' },
|
||||||
|
}
|
||||||
use { -- nvim-cmp source for LuaSnip
|
use { -- nvim-cmp source for LuaSnip
|
||||||
'saadparwaiz1/cmp_luasnip',
|
'saadparwaiz1/cmp_luasnip',
|
||||||
requires = { 'hrsh7th/nvim-cmp' },
|
requires = { 'hrsh7th/nvim-cmp' },
|
||||||
|
|
@ -82,6 +118,7 @@ return require('packer').startup({
|
||||||
use { -- completion engine
|
use { -- completion engine
|
||||||
'hrsh7th/nvim-cmp',
|
'hrsh7th/nvim-cmp',
|
||||||
after = {
|
after = {
|
||||||
|
'cmp-nvim-lsp',
|
||||||
'cmp-buffer',
|
'cmp-buffer',
|
||||||
'cmp-path',
|
'cmp-path',
|
||||||
'cmp-cmdline',
|
'cmp-cmdline',
|
||||||
|
|
|
||||||
24
config/nvim/lua/plugins/lspconfig.lua
Normal file
24
config/nvim/lua/plugins/lspconfig.lua
Normal 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>')
|
||||||
9
config/nvim/lua/plugins/mason.lua
Normal file
9
config/nvim/lua/plugins/mason.lua
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
require('mason').setup({
|
||||||
|
ui = {
|
||||||
|
icons = {
|
||||||
|
package_installed = '✓',
|
||||||
|
package_pending = '➜',
|
||||||
|
package_uninstalled = '✗',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
@ -10,6 +10,7 @@ cmp.setup({
|
||||||
formatting = {
|
formatting = {
|
||||||
format = function(entry, vim_item)
|
format = function(entry, vim_item)
|
||||||
vim_item.menu = ({
|
vim_item.menu = ({
|
||||||
|
nvim_lsp = '[LSP]',
|
||||||
buffer = '[Buffer]',
|
buffer = '[Buffer]',
|
||||||
luasnip = '[Snippet]',
|
luasnip = '[Snippet]',
|
||||||
})[entry.source.name]
|
})[entry.source.name]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue