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