my_nvim_config/after/plugin/lsp.lua
2024-04-25 10:39:18 -04:00

90 lines
3.0 KiB
Lua

vim.api.nvim_create_autocmd('LspAttach', {
desc = 'LSP actions',
callback = function(event)
local bufmap = function(mode, lhs, rhs)
local opts = {buffer = event.buf}
vim.keymap.set(mode, lhs, rhs, opts)
end
-- Trigger code completion
bufmap('i', '<C-Space>', '<C-x><C-o>')
-- Display documentation of the symbol under the cursor
bufmap('n', 'K', '<cmd>lua vim.lsp.buf.hover()<cr>')
-- Jump to the definition
bufmap('n', 'gd', '<cmd>lua vim.lsp.buf.definition()<cr>')
-- Jump to declaration
bufmap('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<cr>')
-- Lists all the implementations for the symbol under the cursor
bufmap('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<cr>')
-- Jumps to the definition of the type symbol
bufmap('n', 'go', '<cmd>lua vim.lsp.buf.type_definition()<cr>')
-- Lists all the references
bufmap('n', 'gr', '<cmd>lua vim.lsp.buf.references()<cr>')
-- Displays a function's signature information
bufmap('n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<cr>')
-- Renames all references to the symbol under the cursor
bufmap('n', '<F2>', '<cmd>lua vim.lsp.buf.rename()<cr>')
-- Format current file
bufmap('n', '<F3>', '<cmd>lua vim.lsp.buf.format()<cr>')
-- Selects a code action available at the current cursor position
bufmap('n', '<F4>', '<cmd>lua vim.lsp.buf.code_action()<cr>')
end
})
local capabilities = require('cmp_nvim_lsp').default_capabilities()
require('mason').setup({})
require('mason-lspconfig').setup({
ensure_installed = {'lua_ls', 'jedi_language_server', 'rust_analyzer', 'clangd' },
handlers = {
require('lspconfig').clangd.setup({
filetypes = { "c", "cpp", "objc", "objcpp", "cuda", "proto","hpp"},
capabilities = capabilities,
}),
require('lspconfig').rust_analyzer.setup({
capabilities = capabilities,
cmd = {
"rustup", "run", "stable", "rust-analyzer",
}
}),
require('lspconfig').jedi_language_server.setup{
capabilities = capabilities,
},
require('lspconfig').lua_ls.setup{
capabilities = capabilities,
-- settings = {
-- workspace = {
-- environmentPath = "./venv/bin/python",
-- }
-- }
},
},
})
local cmp = require('cmp')
local cmp_select = {behavior = cmp.SelectBehavior.Select}
local luasnip= require('luasnip')
cmp.setup({
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end
},
sources = {
{name = 'path'},
{name = 'nvim_lsp'},
{name = 'nvim_lua'},
{name = 'luasnip'},
},
mapping = cmp.mapping.preset.insert({
['<C-p>'] = cmp.mapping.select_prev_item(cmp_select),
['<C-n>'] = cmp.mapping.select_next_item(cmp_select),
['<Tab>'] = cmp.mapping.confirm({ select = true }),
['<C-Space>'] = cmp.mapping.complete(),
}),
})