Capitulo 3: LSP y Soporte de Lenguajes en Zed
Capitulo 3: LSP y Soporte de Lenguajes
Zed combina Tree-sitter para resaltado de sintaxis con Language Server Protocol (LSP) para funcionalidades semanticas. Aprende a configurar ambos para tu stack tecnologico.
Anterior: Capitulo 2: Atajos y Navegacion | Siguiente: Capitulo 4: Integracion con IA
Arquitectura de Lenguajes
Zed usa dos tecnologias complementarias:
- Tree-sitter: Resaltado de sintaxis, folding de codigo, outline del archivo y seleccion estructural. Es incremental y funciona sin conexion a un servidor.
- LSP (Language Server Protocol): Autocompletado, diagnosticos, ir a definicion, refactoring y formateo. Requiere un servidor de lenguaje ejecutandose en segundo plano.
Cuando abres un archivo, Zed detecta el lenguaje automaticamente y descarga el Language Server correspondiente si no esta instalado.
Lenguajes con Soporte Nativo
Zed incluye soporte integrado para estos lenguajes sin necesidad de extensiones:
| Lenguaje | Language Server | Funcionalidades |
|---|---|---|
| Rust | rust-analyzer | Completado, diagnosticos, inlay hints |
| TypeScript/JavaScript | typescript-language-server | Completado, diagnosticos, refactoring |
| Python | pyright | Tipos, completado, diagnosticos |
| Go | gopls | Completado, formateo, diagnosticos |
| C/C++ | clangd | Completado, diagnosticos, formateo |
| HTML | vscode-html-languageserver | Completado, cierre de tags |
| CSS | vscode-css-languageserver | Completado, colores, diagnosticos |
| JSON | vscode-json-languageserver | Validacion, completado con schemas |
| Markdown | - | Resaltado, preview |
Extensiones de Lenguajes
Para lenguajes no incluidos, instala extensiones desde el panel (Cmd+Shift+X / Ctrl+Shift+X):
Extensiones populares:
- Elixir - ElixirLS
- Ruby - Solargraph / Ruby LSP
- PHP - Intelephense
- Java - Eclipse JDTLS
- Kotlin - kotlin-language-server
- Swift - SourceKit-LSP
- Zig - zls
- Lua - lua-language-server
- TOML - taplo
- YAML - yaml-language-server
- Dockerfile - dockerfile-language-server
Configuracion de Language Servers
Configuracion Global
En tu settings.json, usa la clave lsp para configurar cualquier Language Server:
{
"lsp": {
"rust-analyzer": {
"initialization_options": {
"check": {
"command": "clippy"
},
"cargo": {
"allFeatures": true
},
"inlayHints": {
"lifetimeElisionHints": {
"enable": "always"
}
}
}
}
}
}
Configuracion de Python
{
"lsp": {
"pyright": {
"settings": {
"python": {
"pythonPath": ".venv/bin/python",
"analysis": {
"typeCheckingMode": "basic",
"autoImportCompletions": true
}
}
}
}
}
}
Configuracion de TypeScript
{
"lsp": {
"typescript-language-server": {
"initialization_options": {
"preferences": {
"importModuleSpecifierPreference": "relative",
"includeCompletionsForImportStatements": true
}
}
}
}
}
Configuracion de Go
{
"lsp": {
"gopls": {
"initialization_options": {
"hints": {
"assignVariableTypes": true,
"compositeLiteralFields": true,
"constantValues": true,
"parameterNames": true
}
}
}
}
}
Configuracion por Lenguaje
Define comportamiento especifico para cada lenguaje en settings.json:
{
"languages": {
"Rust": {
"tab_size": 4,
"format_on_save": "on",
"formatter": "language_server",
"enable_language_server": true
},
"Python": {
"tab_size": 4,
"formatter": {
"external": {
"command": "ruff",
"arguments": ["format", "-"]
}
},
"format_on_save": "on"
},
"JavaScript": {
"tab_size": 2,
"formatter": {
"external": {
"command": "prettier",
"arguments": ["--stdin-filepath", "{buffer_path}"]
}
}
},
"Go": {
"tab_size": 4,
"hard_tabs": true,
"formatter": "language_server",
"code_actions_on_format": {
"source.organizeImports": true
}
}
}
}
Multiples Language Servers
Algunos lenguajes permiten multiples servidores. Por ejemplo, para JavaScript puedes tener:
- typescript-language-server para completado y diagnosticos
- eslint para reglas de linting
- prettier como formateador externo
Si tienes servidores con capacidades superpuestas, puedes desactivar uno:
{
"languages": {
"JavaScript": {
"language_servers": ["typescript-language-server", "eslint"]
}
}
}
Formateadores
Formateador del Language Server
El mas simple: usa el formateador integrado del LSP:
{
"formatter": "language_server"
}
Formateador Externo
Ejecuta un comando externo como prettier, black o gofmt:
{
"formatter": {
"external": {
"command": "prettier",
"arguments": ["--stdin-filepath", "{buffer_path}"]
}
}
}
Formateo al Guardar
Activa el formateo automatico al guardar:
{
"format_on_save": "on"
}
Inlay Hints
Los inlay hints muestran informacion adicional inline: tipos inferidos, nombres de parametros y lifetimes.
{
"inlay_hints": {
"enabled": true,
"show_type_hints": true,
"show_parameter_hints": true
}
}
Son especialmente utiles en Rust y TypeScript donde el compilador infiere muchos tipos.
Diagnosticos
Zed muestra diagnosticos del Language Server de varias formas:
- Inline: Subrayado en el codigo con tooltip al pasar el cursor
- Panel de diagnosticos:
Cmd+Shift+M/Ctrl+Shift+Mpara ver todos los errores - Navegacion:
F8yShift+F8para saltar entre errores - Quick fix:
Cmd+./Ctrl+.para aplicar correcciones sugeridas
Solucion de Problemas
Si un Language Server no funciona correctamente:
- Reiniciar el servidor: Paleta de comandos > “lsp: restart language server”
- Ver logs: Paleta de comandos > “zed: open log” para diagnosticos detallados
- Verificar la instalacion: Asegurate de que el binario del servidor esta en tu
PATH - Revisar configuracion: Un error en
settings.jsonpuede impedir la conexion
Anterior: Capitulo 2: Atajos y Navegacion | Siguiente: Capitulo 4: Integracion con IA