summaryrefslogtreecommitdiff
path: root/after/plugin/lsp.lua
diff options
context:
space:
mode:
authorGravatar Matthew Wozniak <sirtomato999@gmail.com> 2023-12-29 19:39:37 -0500
committerGravatar Matthew Wozniak <sirtomato999@gmail.com> 2023-12-29 19:39:37 -0500
commit047ea7318b352692b0c2cb49590d75ea1588c148 (patch)
tree069acb3e7045025f4b6ace8752617251d4ca0a2b /after/plugin/lsp.lua
parent256937593ad354a82c520b3c0968f0bb17e86768 (diff)
downloadnvim-047ea7318b352692b0c2cb49590d75ea1588c148.tar.gz
nvim-047ea7318b352692b0c2cb49590d75ea1588c148.zip
new config
Diffstat (limited to 'after/plugin/lsp.lua')
-rw-r--r--after/plugin/lsp.lua120
1 files changed, 71 insertions, 49 deletions
diff --git a/after/plugin/lsp.lua b/after/plugin/lsp.lua
index cfb10e8..7722c1e 100644
--- a/after/plugin/lsp.lua
+++ b/after/plugin/lsp.lua
@@ -1,59 +1,81 @@
-local lsp = require("lsp-zero")
+-- Setup autocomplete/LSP clients
+local lspconfig = require('lspconfig')
+local lsp_capabilities = require('cmp_nvim_lsp').default_capabilities()
-lsp.preset("recommended")
+local servers = {"clangd", "zls", "rust_analyzer", "lua_ls"}
+ for _, lsp in pairs(servers) do
+ lspconfig[lsp].setup {
+ capabilities = lsp_capabilities,
+ on_attach = onattach,
+ flags = {debounce_text_changes = 500}
+ }
+end
-lsp.setup_servers({
- 'clangd',
- 'rust_analyzer',
- 'lua_ls',
-})
+vim.api.nvim_create_autocmd('LspAttach', {
+ desc = 'LSP actions',
+ callback = function()
+ local bufmap = function(mode, lhs, rhs)
+ local opts = {buffer = true}
+ vim.keymap.set(mode, lhs, rhs, opts)
+ end
--- Fix Undefined global 'vim'
-lsp.nvim_workspace()
+ bufmap('n', 'K', '<cmd>lua vim.lsp.buf.hover()<cr>')
+ bufmap('n', 'gd', '<cmd>lua vim.lsp.buf.definition()<cr>')
+ bufmap('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<cr>')
+ bufmap('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<cr>')
+ bufmap('n', 'go', '<cmd>lua vim.lsp.buf.type_definition()<cr>')
+ bufmap('n', 'gr', '<cmd>lua vim.lsp.buf.references()<cr>')
+ bufmap('n', 'gs', '<cmd>lua vim.lsp.buf.signature_help()<cr>')
+ bufmap('n', '<F2>', '<cmd>lua vim.lsp.buf.rename()<cr>')
+ bufmap('n', '<F4>', '<cmd>lua vim.lsp.buf.code_action()<cr>')
+ bufmap('n', 'gl', '<cmd>lua vim.diagnostic.open_float()<cr>')
+ bufmap('n', '[d', '<cmd>lua vim.diagnostic.goto_prev()<cr>')
+ bufmap('n', ']d', '<cmd>lua vim.diagnostic.goto_next()<cr>')
+ end
+})
+require('luasnip.loaders.from_vscode').lazy_load()
local cmp = require('cmp')
-local cmp_select = {behavior = cmp.SelectBehavior.Select}
-local cmp_mappings = lsp.defaults.cmp_mappings({
- ['<C-p>'] = cmp.mapping.select_prev_item(cmp_select),
- ['<C-n>'] = cmp.mapping.select_next_item(cmp_select),
- ['<C-y>'] = cmp.mapping.confirm({ select = true }),
- ["<C-Space>"] = cmp.mapping.complete(),
-})
+local luasnip = require('luasnip')
-cmp_mappings['<Tab>'] = nil
-cmp_mappings['<S-Tab>'] = nil
+local select_opts = {behavior = cmp.SelectBehavior.Select}
+cmp.setup({
+ formatting = {
+ fields = {'menu', 'abbr', 'kind'},
+ format = function(entry, item)
+ local menu_icon = {
+ nvim_lsp = 'λ',
+ luasnip = '⋗',
+ buffer = 'Ω',
+ path = '🖫',
+ }
+ item.menu = menu_icon[entry.source.name]
+ return item
+ end,
+ },
+ snippet = {
+ expand = function(args)
+ luasnip.lsp_expand(args.body)
+ end
+ },
+ sources = {
+ {name = 'path'},
+ {name = 'nvim_lsp', keyword_length = 1},
+ {name = 'buffer', keyword_length = 3},
+ {name = 'luasnip', keyword_length = 2},
+ },
+ mapping = {
+ ['<Up>'] = cmp.mapping.select_prev_item(select_opts),
+ ['<Down>'] = cmp.mapping.select_next_item(select_opts),
-lsp.setup_nvim_cmp({
- mapping = cmp_mappings
-})
+ ['<C-p>'] = cmp.mapping.select_prev_item(select_opts),
+ ['<C-n>'] = cmp.mapping.select_next_item(select_opts),
-lsp.set_preferences({
- suggest_lsp_servers = false,
- sign_icons = {
- error = 'E',
- warn = 'W',
- hint = 'H',
- info = 'I'
- }
-})
+ ['<C-u>'] = cmp.mapping.scroll_docs(-4),
+ ['<C-d>'] = cmp.mapping.scroll_docs(4),
-lsp.on_attach(function(client, bufnr)
- local opts = {buffer = bufnr, remap = false}
-
- vim.keymap.set("n", "gd", function() vim.lsp.buf.definition() end, opts)
- vim.keymap.set("n", "K", function() vim.lsp.buf.hover() end, opts)
- vim.keymap.set("n", "<leader>vws", function() vim.lsp.buf.workspace_symbol() end, opts)
- vim.keymap.set("n", "<leader>vd", function() vim.diagnostic.open_float() end, opts)
- vim.keymap.set("n", "[d", function() vim.diagnostic.goto_next() end, opts)
- vim.keymap.set("n", "]d", function() vim.diagnostic.goto_prev() end, opts)
- vim.keymap.set("n", "<leader>vca", function() vim.lsp.buf.code_action() end, opts)
- vim.keymap.set("n", "<leader>vrr", function() vim.lsp.buf.references() end, opts)
- vim.keymap.set("n", "<leader>vrn", function() vim.lsp.buf.rename() end, opts)
- vim.keymap.set("i", "<C-h>", function() vim.lsp.buf.signature_help() end, opts)
-end)
-
-lsp.setup()
-
-vim.diagnostic.config({
- virtual_text = true
+ ['<C-e>'] = cmp.mapping.abort(),
+ ['<C-y>'] = cmp.mapping.confirm({select = true}),
+ ['<CR>'] = cmp.mapping.confirm({select = false}),
+ },
})