nvim/lua/plugins/lsp.lua

231 lines
6.2 KiB
Lua
Raw Normal View History

2023-02-26 13:20:49 +01:00
local opts = { noremap = true, silent = true }
vim.keymap.set('n', '<space>e', vim.diagnostic.open_float, opts)
vim.keymap.set('n', ',d', vim.diagnostic.goto_prev, opts)
vim.keymap.set('n', '.d', vim.diagnostic.goto_next, opts)
local lsp_attach = function(client, buf)
vim.api.nvim_buf_set_option(buf, "formatexpr", "v:lua.vim.lsp.formatexpr()")
vim.api.nvim_buf_set_option(buf, "omnifunc", "v:lua.vim.lsp.omnifunc")
vim.api.nvim_buf_set_option(buf, "tagfunc", "v:lua.vim.lsp.tagfunc")
local bufopts = { noremap = true, silent = true, buffer = buf }
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts)
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts)
vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts)
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts)
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, bufopts)
vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, bufopts)
vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, bufopts)
vim.keymap.set('n', '<space>ca', vim.lsp.buf.code_action, bufopts)
vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts)
end
2023-04-03 12:40:26 +02:00
local mason_path = vim.fn.glob(vim.fn.stdpath "data" .. "/mason/packages/codelldb/extension/")
local codelldb_path = mason_path .. "adapter/codelldb"
local liblldb_path = mason_path .. "lldb/lib/liblldb.so"
if vim.fn.has "mac" == 1 then
liblldb_path = mason_path .. "lldb/lib/liblldb.dylib"
end
return {
-- lsp
2023-02-26 13:20:49 +01:00
{
'williamboman/mason.nvim',
config = true
},
{
'williamboman/mason-lspconfig.nvim',
config = true
},
{
'neovim/nvim-lspconfig',
config = function()
local capabilities = require('cmp_nvim_lsp').default_capabilities()
local lspconfig = require('lspconfig')
lspconfig.lua_ls.setup {
capabilities = capabilities,
root_dir = lspconfig.util.root_pattern('.git'),
2023-02-26 13:20:49 +01:00
settings = {
Lua = {
runtime = {
-- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim)
version = 'LuaJIT',
},
2023-02-26 13:20:49 +01:00
diagnostics = {
-- Get the language server to recognize the `vim` global
2023-02-26 13:20:49 +01:00
globals = { 'vim' }
},
workspace = {
-- Make the server aware of Neovim runtime files
library = vim.api.nvim_get_runtime_file("", true),
2023-04-03 12:40:26 +02:00
checkThirdParty = false,
},
2023-02-26 13:20:49 +01:00
}
},
on_attach = lsp_attach
}
lspconfig.tsserver.setup {
capabilities = capabilities,
on_attach = lsp_attach
}
lspconfig.gopls.setup {
capabilities = capabilities,
on_attach = lsp_attach
}
--lspconfig.rust_analyzer.setup {
-- capabilities = capabilities,
-- on_attach = lsp_attach
--}
require("rust-tools").setup({
server = {
capabilities = capabilities,
on_attach = lsp_attach,
2023-09-23 14:54:20 +02:00
standalone = false,
settings = {
["rust-analyzer"] = {
rustfmt = {
extraArgs = { "+nightly" },
},
cargo = {
features = {}
}
}
}
2023-04-03 12:40:26 +02:00
},
dap = {
adapter = require('rust-tools.dap').get_codelldb_adapter(
codelldb_path, liblldb_path)
2023-02-26 13:20:49 +01:00
}
})
lspconfig.bashls.setup {
capabilities = capabilities,
on_attach = lsp_attach
}
lspconfig.sqlls.setup({
capabilities = capabilities,
on_attach = lsp_attach
})
lspconfig.html.setup({
capabilities = capabilities,
on_attach = lsp_attach
})
lspconfig.cssls.setup({
capabilities = capabilities,
on_attach = lsp_attach
})
lspconfig.tailwindcss.setup({
capabilities = capabilities,
2023-04-03 12:40:26 +02:00
on_attach = lsp_attach
})
lspconfig.phpactor.setup({
capabilities = capabilities,
2023-02-26 13:20:49 +01:00
on_attach = lsp_attach
})
capabilities.textDocument.completion.completionItem.snippetSupport = true
lspconfig.emmet_ls.setup({
capabilities = capabilities,
on_attach = lsp_attach
})
end
},
{ 'simrat39/rust-tools.nvim' },
{ 'onsails/lspkind-nvim' }, -- pictograms replace (?) with lspsaga
2023-02-26 13:34:44 +01:00
{
'j-hui/fidget.nvim',
config = true
}, -- show lsp status
-- completion
{
'hrsh7th/nvim-cmp',
2023-02-26 13:34:44 +01:00
config = function()
2023-02-26 13:20:49 +01:00
local cmp = require('cmp')
local lspkind = require('lspkind')
vim.opt.shortmess:append 'c'
cmp.setup({
snippet = {
expand = function(args)
require('luasnip').lsp_expand(args.body)
end,
},
mapping = cmp.mapping.preset.insert({
["<C-n>"] = cmp.mapping.select_next_item { behavior = cmp.SelectBehavior.Insert },
["<C-p>"] = cmp.mapping.select_prev_item { behavior = cmp.SelectBehavior.Insert },
2023-09-23 14:54:20 +02:00
['<C-b>'] = cmp.mapping(cmp.mapping.scroll_docs(-4), { 'i', 'c' }),
2023-02-26 13:20:49 +01:00
['<C-f>'] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c' }),
['<C-s>'] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }),
['<C-y>'] = cmp.mapping.confirm({
behavior = cmp.ConfirmBehavior.Insert,
select = true
}),
['<C-e>'] = cmp.mapping({
i = cmp.mapping.abort(),
c = cmp.mapping.close(),
}),
['<CR>'] = cmp.mapping.confirm({ select = true }),
}),
sources = cmp.config.sources({
{ name = 'nvim_lua' },
{ name = 'nvim_lsp' },
{ name = 'path' },
{ name = 'luasnip' },
{ name = 'nvim_lsp_signature_help' },
2023-02-26 13:34:44 +01:00
}, {
{ name = 'buffer', keyword_length = 5 },
2023-02-26 13:20:49 +01:00
}),
formatting = {
format = lspkind.cmp_format {
with_text = true,
menu = {
buffer = "[buf]",
nvim_lsp = "[LSP]",
nvim_lua = "[api]",
path = "[path]",
luasnip = "[snip]",
}
}
}
})
-- Use buffer source for `/` (basically search words in buffer)
cmp.setup.cmdline('/', {
sources = {
{ name = 'buffer' }
}
})
-- Use cmdline & path source for ':'
cmp.setup.cmdline(':', {
sources = cmp.config.sources({
{ name = 'path' }
2023-02-26 13:34:44 +01:00
}, {
{ name = 'cmdline' }
2023-02-26 13:20:49 +01:00
})
})
end,
event = 'InsertEnter',
dependencies = {
'hrsh7th/cmp-nvim-lsp',
'hrsh7th/cmp-nvim-lsp-signature-help',
'hrsh7th/cmp-buffer',
'hrsh7th/cmp-path',
'hrsh7th/cmp-nvim-lua',
'hrsh7th/cmp-cmdline',
'saadparwaiz1/cmp_luasnip',
}
2023-02-26 13:20:49 +01:00
},
{
'L3MON4D3/LuaSnip',
config = function()
require("luasnip.loaders.from_lua").load({ paths = "~/.config/nvim/snippets/" })
end
},
{
'windwp/nvim-autopairs',
config = true
},
}