aboutsummaryrefslogtreecommitdiffstats
path: root/lua/pi/lsp/init.lua
diff options
context:
space:
mode:
authorElvis Claros Castro <elvis@claros.ar>2025-08-30 19:21:25 -0300
committerElvis Claros Castro <elvis@claros.ar>2025-08-30 19:21:25 -0300
commitec011dd9c8d4372f4f8566b87981ecc178675adf (patch)
tree671b6be58f94528f790f05422bc75a1c3f988172 /lua/pi/lsp/init.lua
parentbcb5775dabf2b9144d8a87721d0095d087827f3e (diff)
downloadnvim-conf-ec011dd9c8d4372f4f8566b87981ecc178675adf.tar.gz
nvim-conf-ec011dd9c8d4372f4f8566b87981ecc178675adf.zip
feat(lsp): migración a configuración nativa de LSP en Neovim y mejora de servidores
- Refactoriza la configuración de LSP para usar vim.lsp.start/autocmd nativo, eliminando la dependencia de lspconfig en la mayoría de los servidores. - Añade funciones auxiliares para detección de directorio raíz y configuración de comandos de servidores. - Asegura que todos los servidores LSP tengan filetypes y capabilities explícitos para mejor integración. - Actualiza dependencias de plugins y eventos para soportar el nuevo flujo nativo de LSP. - Mejora el soporte de inlay hints y agrega un mapeo de teclas para alternar inlay hints. - Reemplaza el uso de lspconfig.util por vim.fs.find nativo para detección de raíz. - Marca la integración legacy de mason como obsoleta, favoreciendo la verificación nativa de ejecutables. - Limpia y estandariza los archivos de configuración de servidores para mayor consistencia. - Elimina el archivo no utilizado MIGRACION_BLINK.md. Esta migración permite mejor compatibilidad con Neovim 0.11+, simplifica la gestión de LSP y mejora el rendimiento y la fiabilidad.
Diffstat (limited to 'lua/pi/lsp/init.lua')
-rw-r--r--lua/pi/lsp/init.lua45
1 files changed, 42 insertions, 3 deletions
diff --git a/lua/pi/lsp/init.lua b/lua/pi/lsp/init.lua
index 64d09b7..31b5161 100644
--- a/lua/pi/lsp/init.lua
+++ b/lua/pi/lsp/init.lua
@@ -2,8 +2,14 @@ return {
setup = function(ops)
ops = vim.tbl_deep_extend("force", require "pi.lsp.default", ops)
- local lspconfig = require "lspconfig"
- require('lspconfig.ui.windows').default_options.border = 'single'
+ -- Configure LSP border for native LSP
+ vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, {
+ border = "single",
+ })
+ vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, {
+ border = "single",
+ })
+
local mason_servers = {}
for server, options in pairs(ops.servers) do
if options.enable == true then
@@ -14,7 +20,40 @@ return {
else
server_options = definition(options)
end
- lspconfig[server].setup(server_options)
+
+ -- Setup the server with native LSP
+ local client_config = vim.tbl_extend("force", {
+ name = server,
+ cmd = server_options.cmd or ops.get_server_cmd(server),
+ root_dir = server_options.root_dir or ops.get_default_root_dir(),
+ settings = server_options.settings,
+ init_options = server_options.init_options,
+ on_attach = server_options.on_attach,
+ capabilities = server_options.capabilities,
+ filetypes = server_options.filetypes,
+ }, server_options)
+
+ -- Auto-start LSP for appropriate filetypes
+ if client_config.filetypes then
+ vim.api.nvim_create_autocmd("FileType", {
+ pattern = client_config.filetypes,
+ callback = function(ev)
+ -- Only start if no client of this type is already attached
+ local clients = vim.lsp.get_clients({ bufnr = ev.buf, name = server })
+ if #clients == 0 then
+ -- Create a copy of config for this buffer
+ local buf_config = vim.deepcopy(client_config)
+ if buf_config.root_dir and type(buf_config.root_dir) == "function" then
+ buf_config.root_dir = buf_config.root_dir(vim.api.nvim_buf_get_name(ev.buf))
+ end
+ vim.lsp.start(buf_config, {
+ bufnr = ev.buf,
+ })
+ end
+ end,
+ })
+ end
+
table.insert(mason_servers, server)
end
end