← Volver al listado de tecnologías

Capitulo 3: LSP y Soporte de Lenguajes en Zed

Por: SiempreListo
zededitorlsptree-sitterlenguajesextensiones

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:

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:

LenguajeLanguage ServerFuncionalidades
Rustrust-analyzerCompletado, diagnosticos, inlay hints
TypeScript/JavaScripttypescript-language-serverCompletado, diagnosticos, refactoring
PythonpyrightTipos, completado, diagnosticos
GogoplsCompletado, formateo, diagnosticos
C/C++clangdCompletado, diagnosticos, formateo
HTMLvscode-html-languageserverCompletado, cierre de tags
CSSvscode-css-languageserverCompletado, colores, diagnosticos
JSONvscode-json-languageserverValidacion, 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:

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:

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:

Solucion de Problemas

Si un Language Server no funciona correctamente:

  1. Reiniciar el servidor: Paleta de comandos > “lsp: restart language server”
  2. Ver logs: Paleta de comandos > “zed: open log” para diagnosticos detallados
  3. Verificar la instalacion: Asegurate de que el binario del servidor esta en tu PATH
  4. Revisar configuracion: Un error en settings.json puede impedir la conexion

Anterior: Capitulo 2: Atajos y Navegacion | Siguiente: Capitulo 4: Integracion con IA