diff options
| author | Elvis Claros Castro <elvis@claros.ar> | 2025-08-30 19:21:25 -0300 |
|---|---|---|
| committer | Elvis Claros Castro <elvis@claros.ar> | 2025-08-30 19:21:25 -0300 |
| commit | ec011dd9c8d4372f4f8566b87981ecc178675adf (patch) | |
| tree | 671b6be58f94528f790f05422bc75a1c3f988172 /lua/pi/lsp/init.lua | |
| parent | bcb5775dabf2b9144d8a87721d0095d087827f3e (diff) | |
| download | nvim-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.lua | 45 |
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 |