Configuración del servidor LSP de OpenCode
OpenCode se integra profundamente con el Protocolo de Servidor de Lenguaje (LSP, Language Server Protocol), proporcionando retroalimentación en tiempo real, como diagnósticos de código y avisos de errores, al LLM a través del servidor LSP, lo que ayuda a la IA a comprender y manipular tu base de código con mayor precisión.
En términos simples, el servidor LSP es el componente que le da a OpenCode la capacidad de "entender el código", similar a los complementos de VS Code que ofrecen autocompletado y avisos de errores. Cuando ocurren errores de sintaxis o desajustes de tipos en un archivo, el servidor LSP retroalimenta esa información de diagnóstico al LLM, permitiéndole realizar modificaciones más precisas.
Cómo funciona
La integración de LSP en OpenCode es totalmente automática, sin necesidad de intervención manual. Cuando OpenCode abre un archivo, se ejecuta el siguiente proceso en orden:
打开文件 │ ▼ 读取文件扩展名(如 .ts、.py、.go) │ ▼ 与所有已启用的 LSP 服务器进行匹配 │ ├── 匹配成功且服务器已运行 → 直接使用 │ └── 匹配成功但服务器未运行 → 自动启动对应 LSP 服务器
Todo el proceso se completa silenciosamente en segundo plano. Una vez iniciado, el servidor LSP proporciona continuamente información de diagnóstico para la sesión actual.
Servidores LSP integrados
OpenCode incluye soporte integrado para servidores LSP de los principales lenguajes,cuando se detecta la extensión de archivo correspondiente y se cumplen los requisitos pertinentes, el servidor LSP se habilita automáticamente, y en la mayoría de los casos no se requiere configuración alguna.
| Servidor LSP | Extensiones de archivo admitidas | Requisitos de habilitación |
|---|---|---|
astro |
.astro |
Se instala automáticamente para proyectos de Astro |
bash |
.sh, .bash, .zsh, .ksh |
Instala automáticamente bash-language-server |
clangd |
.c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ |
Se instala automáticamente para proyectos de C/C++ |
csharp |
.cs |
Requiere .NET SDK instalado |
clojure-lsp |
.clj, .cljs, .cljc, .edn |
Requiereclojure-lspque el comando esté disponible |
dart |
.dart |
Requieredartque el comando esté disponible |
deno |
.ts, .tsx, .js, .jsx, .mjs |
Requieredenoque el comando esté disponible y que exista en el proyectodeno.jsonodeno.jsonc(detección automática) |
elixir-ls |
.ex, .exs |
Requiereelixirque el comando esté disponible |
eslint |
.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue |
Se requiere instalar en el proyectoeslintdependencias |
fsharp |
.fs, .fsi, .fsx, .fsscript |
Requiere .NET SDK instalado |
gleam |
.gleam |
Requieregleamque el comando esté disponible |
gopls |
.go |
Requieregoque el comando esté disponible |
hls |
.hs, .lhs |
Requierehaskell-language-server-wrapperque el comando esté disponible |
jdtls |
.java |
Requiere Java SDK instalado (versión 21 o superior) |
julials |
.jl |
Requiere instalarjuliayLanguageServer.jlPaquete |
kotlin-ls |
.kt, .kts |
Se instala automáticamente para proyectos de Kotlin |
lua-ls |
.lua |
Se instala automáticamente para proyectos de Lua |
nixd |
.nix |
Requierenixdque el comando esté disponible |
ocaml-lsp |
.ml, .mli |
Requiereocamllspque el comando esté disponible |
oxlint |
.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte |
Se requiere instalar en el proyectooxlintdependencias |
php intelephense |
.php |
Se instala automáticamente para proyectos de PHP |
prisma |
.prisma |
Requiereprismaque el comando esté disponible |
pyright |
.py, .pyi |
Requiere tener instaladopyrightdependencias |
ruby-lsp |
.rb, .rake, .gemspec, .ru |
Requiererubyygemque el comando esté disponible |
rust |
.rs |
Requiererust-analyzerque el comando esté disponible |
sourcekit-lsp |
.swift, .objc, .objcpp |
Requiere Swift instalado (instalado a través de Xcode en macOS) |
svelte |
.svelte |
Se instala automáticamente para proyectos de Svelte |
terraform |
.tf, .tfvars |
Se instala automáticamente desde GitHub Releases |
tinymist |
.typ, .typc |
Se instala automáticamente desde GitHub Releases |
typescript |
.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts |
Se requiere instalar en el proyectotypescriptdependencias |
vue |
.vue |
Se instala automáticamente para proyectos de Vue |
yaml-ls |
.yaml, .yml |
Instala automáticamente Red Hat yaml-language-server |
zls |
.zig, .zon |
Requierezigque el comando esté disponible |
Si no deseas que OpenCode descargue automáticamente el servidor LSP, puedes configurar la variable de entornoOPENCODE_DISABLE_LSP_DOWNLOADestableciéndola entruepara deshabilitar la descarga automática. Consulta las notas al final para más detalles.
Configurar el servidor LSP
La configuración relacionada con LSP se escribe en el campoopencode.jsondelsp. En la mayoría de los casos no se necesita configuración, LSP se habilita automáticamente; pero cuando se requiere personalizar el comportamiento, cada servidor LSP admite los siguientes elementos de configuración:
| Propiedad | Tipo | Descripción |
|---|---|---|
disabled |
boolean |
Establecer entruepuede deshabilitar este servidor LSP |
command |
string[] |
Comando para iniciar el servidor LSP (en forma de arreglo; el primer elemento es el nombre del ejecutable, el resto son argumentos) |
extensions |
string[] |
Lista de extensiones de archivo que este servidor LSP se encarga de procesar |
env |
object |
Variables de entorno inyectadas al iniciar el servidor; la clave es el nombre de la variable y el valor es el valor de la variable |
initialization |
object |
En la negociación (handshake) de LSP,initializelas opciones de inicialización enviadas al servidor durante la fase de handshake; el contenido varía según el servidor. |
1. Establecer variables de entorno (env)
Usaenvla propiedad para inyectar variables de entorno al iniciar el servidor LSP. Se usa a menudo para activar registros de depuración o especificar rutas requeridas en tiempo de ejecución:
Ejemplo
"$schema": "https://opencode.ai/config.json",
"lsp": {
"rust": {
"env": {
"RUST_LOG": "debug" // Activa los registros de nivel debug para rust-analyzer, facilitando la depuración de problemas de LSP
}
}
}
}
2. Establecer opciones de inicialización (initialization)
initializationSe utiliza para transmitir configuraciones específicas del servidor al servidor LSP. Estas opciones se envían de una sola vez durante la negociación (handshake) de LSP (initializesolicitud) y afectan todo el comportamiento posterior de ese servidor:
Ejemplo
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"initialization": {
"preferences": {
"importModuleSpecifierPreference": "relative"
// Indica al LSP de TypeScript que prefiera importaciones con rutas relativas (p. ej., ./utils)
// en lugar de rutas absolutas (p. ej., /src/utils) o alias de ruta configurados en tsconfig.json
}
}
}
}
}
Las opciones de inicialización varían según el servidor LSP. Por ejemplo,typescriptlas opciones de un servidor y otrogoplsson completamente diferentes. Antes de usarlas, consulta la documentación oficial del servidor LSP correspondiente para evitar enviar configuraciones no válidas.
Deshabilitar el servidor LSP
1. Deshabilitar todos los servidores LSP
Si no necesitas la funcionalidad de LSP en absoluto, puedes establecerlspglobalmente comofalse, lo que desactiva todos los servidores LSP de una sola vez:
Ejemplo
"$schema": "https://opencode.ai/config.json",
"lsp": false // Deshabilita globalmente todos los servidores LSP, adecuado para entornos que no necesitan diagnóstico de código o con restricciones de red/recursos
}
2. Deshabilitar un servidor LSP específico
Si solo deseas desactivar un servidor LSP específico y conservar los demás, establece individualmente para ese servidordisabled: true:
Ejemplo
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"disabled": true // Solo deshabilita el LSP de TypeScript; los servidores LSP de otros lenguajes no se ven afectados
}
}
}
Agregar un servidor LSP personalizado
Si el lenguaje que usas no está en la lista de soporte integrado, puedes especificarcommandyextensionspara agregar manualmente cualquier servidor LSP, siempre que ese servidor siga el protocolo LSP estándar y admita el--stdiomodo (comunicación a través de la entrada/salida estándar) es suficiente:
Ejemplo
"$schema": "https://opencode.ai/config.json",
"lsp": {
"custom-lsp": { // Nombre de clave personalizado; se puede nombrar libremente, se usa para identificar este servidor en la configuración
"command": ["custom-lsp-server", "--stdio"], // Comando de inicio: el primer elemento es el nombre del ejecutable,
// los demás elementos son los argumentos de inicio que se le pasan
// --stdio indica que se comunica con OpenCode a través de la entrada/salida estándar
"extensions": [".custom"] // Especifica qué extensiones de archivo procesa este servidor LSP
}
}
}
También puedes configurar variables de entorno y opciones de inicialización para el servidor LSP personalizado, exactamente de la misma manera que con los servidores integrados:
Ejemplo
"$schema": "https://opencode.ai/config.json",
"lsp": {
"my-lang-server": {
"command": ["my-lang-server", "--stdio", "--log-level", "warn"],
"extensions": [".mylang", ".ml2"], // Admite vincular múltiples extensiones de archivo a la vez
"env": {
"MY_LSP_HOME": "/usr/local/my-lang" // Inyecta las variables de entorno necesarias para el proceso del servidor
},
"initialization": {
"formatOnSave": true // Transmite las opciones de inicialización definidas en la documentación del servidor.
}
}
}
}
Notas adicionales
Licencia de PHP Intelephense
PHP Intelephense ofrece una versión gratuita y una versión premium de pago. La versión premium se desbloquea mediante una clave de licencia e incluye funciones mejoradas como organización de importaciones, plegado de código, visualización de jerarquía de llamadas, etc. Si ha comprado una licencia, simplemente escriba la clave en un archivo de texto en la siguiente ruta para activarla automáticamente, sin necesidad de configuración adicional:
| Sistema operativo | Ruta del archivo de licencia |
|---|---|
| macOS / Linux | $HOME/intelephense/license.txt |
| Windows | %USERPROFILE%/intelephense/license.txt |
El archivo de licencia solo debe contener la clave de licencia en sí. No agregue ningún otro contenido (incluidos espacios o saltos de línea adicionales), de lo contrario la activación puede fallar.
Deshabilitar la descarga automática
De forma predeterminada, OpenCode descarga automáticamente el servidor LSP necesario desde la red cuando detecta la extensión de archivo correspondiente. Si se encuentra en un entorno con restricciones de red o prefiere gestionar las herramientas LSP completamente de forma manual, puede deshabilitar la descarga automática configurando las siguientes variables de entorno:
# Linux / macOS:临时禁用(仅当前终端会话有效) export OPENCODE_DISABLE_LSP_DOWNLOAD=true # Linux / macOS:永久禁用(写入 shell 配置文件) echo 'export OPENCODE_DISABLE_LSP_DOWNLOAD=true' >> ~/.bashrc source ~/.bashrc # Windows(PowerShell:仅当前会话) $env:OPENCODE_DISABLE_LSP_DOWNLOAD = "true"
Una vez deshabilitado, OpenCode ya no descargará automáticamente ningún servidor LSP, pero las herramientas LSP preinstaladas en el sistema aún pueden detectarse y utilizarse con normalidad.
Otras extensiones