aboutsummaryrefslogtreecommitdiffstats
path: root/lua/pi/lsp/default.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/default.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/default.lua')
-rw-r--r--lua/pi/lsp/default.lua71
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)