Reconfigure lsp

This commit is contained in:
Marcelo Canaparro 2024-01-06 14:58:15 +00:00
parent 84bd738041
commit 0ebf26b49c
6 changed files with 204 additions and 168 deletions

View File

@ -1,47 +1,47 @@
-- [[ Configure nvim-cmp ]] -- [[ Configure nvim-cmp ]]
-- See `:help cmp` -- See `:help cmp`
local cmp = require 'cmp' -- local cmp = require 'cmp'
local luasnip = require 'luasnip' -- local luasnip = require 'luasnip'
require('luasnip.loaders.from_vscode').lazy_load() -- require('luasnip.loaders.from_vscode').lazy_load()
luasnip.config.setup {} -- luasnip.config.setup {}
--
cmp.setup { -- cmp.setup {
snippet = { -- snippet = {
expand = function(args) -- expand = function(args)
luasnip.lsp_expand(args.body) -- luasnip.lsp_expand(args.body)
end, -- end,
}, -- },
mapping = cmp.mapping.preset.insert { -- mapping = cmp.mapping.preset.insert {
['<C-n>'] = cmp.mapping.select_next_item(), -- ['<C-n>'] = cmp.mapping.select_next_item(),
['<C-p>'] = cmp.mapping.select_prev_item(), -- ['<C-p>'] = cmp.mapping.select_prev_item(),
['<C-d>'] = cmp.mapping.scroll_docs(-4), -- ['<C-d>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4), -- ['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete {}, -- ['<C-Space>'] = cmp.mapping.complete {},
['<CR>'] = cmp.mapping.confirm { -- ['<CR>'] = cmp.mapping.confirm {
behavior = cmp.ConfirmBehavior.Replace, -- behavior = cmp.ConfirmBehavior.Replace,
select = true, -- select = true,
}, -- },
['<Tab>'] = cmp.mapping(function(fallback) -- ['<Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then -- if cmp.visible() then
cmp.select_next_item() -- cmp.select_next_item()
elseif luasnip.expand_or_locally_jumpable() then -- elseif luasnip.expand_or_locally_jumpable() then
luasnip.expand_or_jump() -- luasnip.expand_or_jump()
else -- else
fallback() -- fallback()
end -- end
end, { 'i', 's' }), -- end, { 'i', 's' }),
['<S-Tab>'] = cmp.mapping(function(fallback) -- ['<S-Tab>'] = cmp.mapping(function(fallback)
if cmp.visible() then -- if cmp.visible() then
cmp.select_prev_item() -- cmp.select_prev_item()
elseif luasnip.locally_jumpable(-1) then -- elseif luasnip.locally_jumpable(-1) then
luasnip.jump(-1) -- luasnip.jump(-1)
else -- else
fallback() -- fallback()
end -- end
end, { 'i', 's' }), -- end, { 'i', 's' }),
}, -- },
sources = { -- sources = {
{ name = 'nvim_lsp' }, -- { name = 'nvim_lsp' },
{ name = 'luasnip' }, -- { name = 'luasnip' },
}, -- },
} -- }

View File

@ -1,93 +1,93 @@
-- [[ Configure LSP ]] -- -- [[ Configure LSP ]]
-- This function gets run when an LSP connects to a particular buffer. -- -- This function gets run when an LSP connects to a particular buffer.
local on_attach = function(_, bufnr) -- local on_attach = function(_, bufnr)
-- NOTE: Remember that lua is a real programming language, and as such it is possible -- -- NOTE: Remember that lua is a real programming language, and as such it is possible
-- to define small helper and utility functions so you don't have to repeat yourself -- -- to define small helper and utility functions so you don't have to repeat yourself
-- many times. -- -- many times.
-- --
-- -- In this case, we create a function that lets us more easily define mappings specific
-- -- for LSP related items. It sets the mode, buffer and description for us each time.
-- local nmap = function(keys, func, desc)
-- if desc then
-- desc = 'LSP: ' .. desc
-- end
-- --
-- In this case, we create a function that lets us more easily define mappings specific -- vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc })
-- for LSP related items. It sets the mode, buffer and description for us each time. -- end
local nmap = function(keys, func, desc)
if desc then
desc = 'LSP: ' .. desc
end
vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc })
end
nmap('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame')
nmap('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction')
nmap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition')
nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences')
nmap('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation')
nmap('<leader>D', vim.lsp.buf.type_definition, 'Type [D]efinition')
nmap('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols')
nmap('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols')
-- See `:help K` for why this keymap
nmap('K', vim.lsp.buf.hover, 'Hover Documentation')
nmap('<C-k>', vim.lsp.buf.signature_help, 'Signature Documentation')
-- Lesser used LSP functionality
nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')
nmap('<leader>wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder')
nmap('<leader>wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder')
nmap('<leader>wl', function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end, '[W]orkspace [L]ist Folders')
-- Create a command `:Format` local to the LSP buffer
vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_)
vim.lsp.buf.format()
end, { desc = 'Format current buffer with LSP' })
end
-- Enable the following language servers
-- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
-- --
-- Add any additional override configuration in the following tables. They will be passed to -- nmap('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame')
-- the `settings` field of the server config. You must look up that documentation yourself. -- nmap('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction')
-- --
-- If you want to override the default filetypes that your language server will attach to you can -- nmap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition')
-- define the property 'filetypes' to the map in question. -- nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences')
local servers = { -- nmap('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation')
-- clangd = {}, -- nmap('<leader>D', vim.lsp.buf.type_definition, 'Type [D]efinition')
-- gopls = {}, -- nmap('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols')
-- pyright = {}, -- nmap('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols')
-- rust_analyzer = {}, --
-- tsserver = {}, -- -- See `:help K` for why this keymap
-- html = { filetypes = { 'html', 'twig', 'hbs'} }, -- nmap('K', vim.lsp.buf.hover, 'Hover Documentation')
-- nmap('<C-k>', vim.lsp.buf.signature_help, 'Signature Documentation')
lua_ls = { --
Lua = { -- -- Lesser used LSP functionality
workspace = { checkThirdParty = false }, -- nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')
telemetry = { enable = false }, -- nmap('<leader>wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder')
}, -- nmap('<leader>wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder')
}, -- nmap('<leader>wl', function()
} -- print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
-- end, '[W]orkspace [L]ist Folders')
-- Setup neovim lua configuration --
require('neodev').setup() -- -- Create a command `:Format` local to the LSP buffer
-- vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_)
-- nvim-cmp supports additional completion capabilities, so broadcast that to servers -- vim.lsp.buf.format()
local capabilities = vim.lsp.protocol.make_client_capabilities() -- end, { desc = 'Format current buffer with LSP' })
capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) -- end
--
-- Ensure the servers above are installed -- -- Enable the following language servers
local mason_lspconfig = require 'mason-lspconfig' -- -- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
-- --
mason_lspconfig.setup { -- -- Add any additional override configuration in the following tables. They will be passed to
ensure_installed = vim.tbl_keys(servers), -- -- the `settings` field of the server config. You must look up that documentation yourself.
} -- --
-- -- If you want to override the default filetypes that your language server will attach to you can
mason_lspconfig.setup_handlers { -- -- define the property 'filetypes' to the map in question.
function(server_name) -- local servers = {
require('lspconfig')[server_name].setup { -- -- clangd = {},
capabilities = capabilities, -- -- gopls = {},
on_attach = on_attach, -- -- pyright = {},
settings = servers[server_name], -- -- rust_analyzer = {},
filetypes = (servers[server_name] or {}).filetypes, -- -- tsserver = {},
} -- -- html = { filetypes = { 'html', 'twig', 'hbs'} },
end --
} -- lua_ls = {
-- Lua = {
-- workspace = { checkThirdParty = false },
-- telemetry = { enable = false },
-- },
-- },
-- }
--
-- -- Setup neovim lua configuration
-- require('neodev').setup()
--
-- -- nvim-cmp supports additional completion capabilities, so broadcast that to servers
-- local capabilities = vim.lsp.protocol.make_client_capabilities()
-- capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities)
--
-- -- Ensure the servers above are installed
-- local mason_lspconfig = require 'mason-lspconfig'
--
-- mason_lspconfig.setup {
-- ensure_installed = vim.tbl_keys(servers),
-- }
--
-- mason_lspconfig.setup_handlers {
-- function(server_name)
-- require('lspconfig')[server_name].setup {
-- capabilities = capabilities,
-- on_attach = on_attach,
-- settings = servers[server_name],
-- filetypes = (servers[server_name] or {}).filetypes,
-- }
-- end
-- }

View File

@ -1 +1,15 @@
require('neo-tree').setup({
event_handlers = {
{
-- On opening a file this event listener closes the Neotree window
event = "file_opened",
handler = function()
vim.cmd("Neotree toggle")
end,
id = "file_opened_event_handler"
}
}
})
vim.keymap.set('n', '<C-n>', ':Neotree filesystem reveal left toggle<CR>', { desc = 'Toggles explorer tab'}) vim.keymap.set('n', '<C-n>', ':Neotree filesystem reveal left toggle<CR>', { desc = 'Toggles explorer tab'})
vim.keymap.set('n', '<leader>gs', ':Neotree float git_status<cr>', { desc = 'Shows git status' })
--vim.keymap.set('n', '<leader>b', ':Neotree toggle show buffers right<cr>')

View File

@ -0,0 +1,23 @@
return {
{
"williamboman/mason.nvim",
config = function ()
require('mason').setup()
end
},
{
'williamboman/mason-lspconfig.nvim',
config = function()
require("mason-lspconfig").setup {
ensure_installed = { "lua_ls", "pyright" },
}
end
},
{
"neovim/nvim-lspconfig",
config = function()
local lspconfig = require('lspconfig')
lspconfig.lua_ls.setup({})
end
}
}

View File

@ -3,7 +3,6 @@
-- --
-- See the kickstart.nvim README for more information -- See the kickstart.nvim README for more information
return { return {
{ {
"nvim-neo-tree/neo-tree.nvim", "nvim-neo-tree/neo-tree.nvim",
branch = "v3.x", branch = "v3.x",

View File

@ -11,38 +11,38 @@ return { -- NOTE: First, some plugins that don't require any configuration
-- NOTE: This is where your plugins related to LSP can be installed. -- NOTE: This is where your plugins related to LSP can be installed.
-- The configuration is done below. Search for lspconfig to find it below. -- The configuration is done below. Search for lspconfig to find it below.
{ -- {
-- LSP Configuration & Plugins -- -- LSP Configuration & Plugins
'neovim/nvim-lspconfig', -- 'neovim/nvim-lspconfig',
dependencies = { -- dependencies = {
-- Automatically install LSPs to stdpath for neovim -- -- Automatically install LSPs to stdpath for neovim
{ 'williamboman/mason.nvim', config = true }, -- { 'williamboman/mason.nvim', config = true },
'williamboman/mason-lspconfig.nvim', -- 'williamboman/mason-lspconfig.nvim',
--
-- -- Useful status updates for LSP
-- -- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})`
-- { 'j-hui/fidget.nvim', tag = 'legacy', opts = {} },
--
-- -- Additional lua configuration, makes nvim stuff amazing!
-- 'folke/neodev.nvim',
-- },
-- },
-- Useful status updates for LSP -- {
-- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})` -- -- Autocompletion
{ 'j-hui/fidget.nvim', tag = 'legacy', opts = {} }, -- 'hrsh7th/nvim-cmp',
-- dependencies = {
-- Additional lua configuration, makes nvim stuff amazing! -- -- Snippet Engine & its associated nvim-cmp source
'folke/neodev.nvim', -- 'L3MON4D3/LuaSnip',
}, -- 'saadparwaiz1/cmp_luasnip',
}, --
-- -- Adds LSP completion capabilities
{ -- 'hrsh7th/cmp-nvim-lsp',
-- Autocompletion --
'hrsh7th/nvim-cmp', -- -- Adds a number of user-friendly snippets
dependencies = { -- 'rafamadriz/friendly-snippets',
-- Snippet Engine & its associated nvim-cmp source -- },
'L3MON4D3/LuaSnip', -- },
'saadparwaiz1/cmp_luasnip',
-- Adds LSP completion capabilities
'hrsh7th/cmp-nvim-lsp',
-- Adds a number of user-friendly snippets
'rafamadriz/friendly-snippets',
},
},
-- Useful plugin to show you pending keybinds. -- Useful plugin to show you pending keybinds.
{ 'folke/which-key.nvim', opts = {} }, { 'folke/which-key.nvim', opts = {} },