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/default.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/default.lua')
| -rw-r--r-- | lua/pi/lsp/default.lua | 71 |
1 files changed, 56 insertions, 15 deletions
diff --git a/lua/pi/lsp/default.lua b/lua/pi/lsp/default.lua index 01e4d73..f7fa455 100644 --- a/lua/pi/lsp/default.lua +++ b/lua/pi/lsp/default.lua @@ -1,8 +1,49 @@ +-- Helper function to find root directory patterns +local function root_pattern(...) + local patterns = { ... } + return function(fname) + for _, pattern in ipairs(patterns) do + local found = vim.fs.find(pattern, { + path = fname, + upward = true, + })[1] + if found then + return vim.fs.dirname(found) + end + end + end +end + +-- Server command configurations +local server_commands = { + emmet_ls = { "emmet-ls", "--stdio" }, + gopls = { "gopls" }, + html = { "vscode-html-language-server", "--stdio" }, + jsonls = { "vscode-json-language-server", "--stdio" }, + lua_ls = { "lua-language-server" }, + phpactor = { "phpactor", "language-server" }, + svelte = { "svelteserver", "--stdio" }, + tailwindcss = { "tailwindcss-language-server", "--stdio" }, + ts_ls = { "typescript-language-server", "--stdio" }, + volar = { "vue-language-server", "--stdio" }, + texlab = { "texlab" }, + pyright = { "pyright-langserver", "--stdio" }, + kotlin_language_server = { "kotlin-language-server" }, + smarty_ls = { "smarty-language-server", "--stdio" }, + clangd = { "clangd" }, +} + return { mason = { enable = true, auto_install = false, }, + get_server_cmd = function(server) + return server_commands[server] or { server } + end, + get_default_root_dir = function() + return root_pattern(".git", "package.json", "Cargo.toml", "composer.json")(vim.api.nvim_buf_get_name(0)) + end, servers = { emmet_ls = { enable = true }, gopls = { enable = true }, @@ -10,33 +51,33 @@ return { jsonls = { enable = true }, lua_ls = { enable = true, neodev = true }, -- nil_ls = { enable = true }, - phpactor = {enable = true }, + phpactor = { enable = true }, -- rust_analyzer = { enable = true }, svelte = { enable = true }, - tailwindcss = { enable = true, filetypes = {"blade", "html", "svelte"} }, + tailwindcss = { enable = true, filetypes = { "blade", "html", "svelte" } }, ts_ls = { enable = true }, volar = { enable = true }, - texlab = { enable = true, filetypes = {"tex", "bib"} }, - pyright = { enable = true, filetypes = {"python"} }, - kotlin_language_server = { enable = true, filetypes = {"kotlin"}, root_dir = require("lspconfig.util").root_pattern( - "build.gradle.kts", - "pom.xml", - ".git" - ) }, + texlab = { enable = true, filetypes = { "tex", "bib" } }, + pyright = { enable = true, filetypes = { "python" } }, + kotlin_language_server = { + enable = true, + filetypes = { "kotlin" }, + root_dir = root_pattern("build.gradle.kts", "pom.xml", ".git"), + }, smarty_ls = { enable = true, - filetypes = {"smarty"}, - root_dir = require("lspconfig.util").root_pattern("composer.json", ".git"), + filetypes = { "smarty" }, + root_dir = root_pattern("composer.json", ".git"), }, clangd = { enable = true, - filetypes = {"c", "cpp", "objc", "objcpp", "cuda", "proto" }, - root_dir = require("lspconfig.util").root_pattern("compile_commands.json", ".git"), + filetypes = { "c", "cpp", "objc", "objcpp", "cuda", "proto" }, + root_dir = root_pattern("compile_commands.json", ".git"), }, }, - default_options = function (options) + default_options = function(options) return vim.tbl_deep_extend("force", { - on_attach = require"pi.lsp.attach", + on_attach = require "pi.lsp.attach", flags = require "pi.lsp.flags", capabilities = require("blink.cmp").get_lsp_capabilities(vim.lsp.protocol.make_client_capabilities()), }, options) |