Español
Documentación
Servidores LSP

Servidores LSP

OpenCode se integra con tus servidores LSP.

OpenCode puede integrarse con tu Language Server Protocol (LSP) para ayudar al LLM a interactuar con tu base de código. Usa los diagnósticos para proporcionar retroalimentación al LLM.


Integrados

OpenCode incluye varios servidores LSP integrados para lenguajes populares:

Servidor LSPExtensionesRequisitos
astro.astroSe instala automáticamente para proyectos Astro
bash.sh, .bash, .zsh, .kshInstala automáticamente bash-language-server
clangd.c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++Se instala automáticamente para proyectos C/C++
csharp.cs, .csx.NET SDK instalado
clojure-lsp.clj, .cljs, .cljc, .ednComando clojure-lsp disponible
dart.dartComando dart disponible
deno.ts, .tsx, .js, .jsx, .mjsComando deno disponible (detecta automáticamente deno.json/deno.jsonc)
elixir-ls.ex, .exsComando elixir disponible
eslint.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vueDependencia eslint en el proyecto
fsharp.fs, .fsi, .fsx, .fsscript.NET SDK instalado
gleam.gleamComando gleam disponible
gopls.goComando go disponible
hls.hs, .lhsComando haskell-language-server-wrapper disponible
jdtls.javaJava SDK (version 21+) instalado
julials.jljulia y LanguageServer.jl instalados
kotlin-ls.kt, .ktsSe instala automáticamente para proyectos Kotlin
lua-ls.luaSe instala automáticamente para proyectos Lua
nixd.nixComando nixd disponible
ocaml-lsp.ml, .mliComando ocamllsp disponible
oxlint.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelteDependencia oxlint en el proyecto
php intelephense.phpSe instala automáticamente para proyectos PHP
prisma.prismaComando prisma disponible
pyright.py, .pyiDependencia pyright instalada
razor.razor, .cshtml.NET SDK y la extensión de C# de VS Code instalados
ruby-lsp (rubocop).rb, .rake, .gemspec, .ruComandos ruby y gem disponibles
rust.rsComando rust-analyzer disponible
sourcekit-lsp.swift, .objc, .objcppswift instalado (xcode en macOS)
svelte.svelteSe instala automáticamente para proyectos Svelte
terraform.tf, .tfvarsSe instala automáticamente desde GitHub releases
tinymist.typ, .typcSe instala automáticamente desde GitHub releases
typescript.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .ctsDependencia typescript en el proyecto
vue.vueSe instala automáticamente para proyectos Vue
yaml-ls.yaml, .ymlInstala automáticamente el yaml-language-server de Red Hat
zls.zig, .zonComando zig disponible

Cuando LSP está habilitado, los servidores se inician cuando se detecta una de las extensiones de archivo anteriores y se cumplen los requisitos.

Nota: Puedes deshabilitar las descargas automáticas de servidores LSP estableciendo la variable de entorno OPENCODE_DISABLE_LSP_DOWNLOAD en true.


Cómo funciona

Cuando LSP está habilitado y opencode abre un archivo:

  1. Comprueba la extensión del archivo contra todos los servidores LSP habilitados.
  2. Inicia el servidor LSP apropiado si no se está ejecutando ya.

Configuración

Puedes habilitar y personalizar los servidores LSP mediante la sección lsp en tu configuración de opencode.

Para habilitar todos los servidores LSP integrados, establece lsp en true.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "lsp": true
}

Usa un objeto para mantener los integrados habilitados mientras configuras anulaciones o servidores personalizados.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "lsp": {}
}

Cada entrada de servidor LSP configurada admite lo siguiente:

Las entradas de servidor necesitan command a menos que solo deshabiliten un servidor.

PropiedadTipoDescripción
disabledbooleanEstablécelo en true para deshabilitar el servidor LSP
commandstring[]El comando para iniciar el servidor LSP
extensionsstring[]Las extensiones de archivo que este servidor LSP debe manejar
envobjectVariables de entorno que se establecen al iniciar el servidor
initializationobjectOpciones de inicialización que se envían al servidor LSP

Veamos algunos ejemplos.


Variables de entorno

Usa la propiedad env para establecer variables de entorno al iniciar el servidor LSP:

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "lsp": {
    "rust": {
      "command": ["rust-analyzer"],
      "env": {
        "RUST_LOG": "debug"
      }
    }
  }
}

Opciones de inicialización

Usa la propiedad initialization para pasar opciones de inicialización al servidor LSP. Estos son ajustes específicos del servidor que se envían durante la solicitud initialize de LSP:

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "lsp": {
    "custom-lsp": {
      "command": ["custom-lsp-server", "--stdio"],
      "extensions": [".custom"],
      "initialization": {
        "preferences": {
          "importModuleSpecifierPreference": "relative"
        }
      }
    }
  }
}

Nota: Las opciones de inicialización varían según el servidor LSP. Consulta la documentación de tu servidor LSP para conocer las opciones disponibles.


Deshabilitar servidores LSP

Si se omite lsp, todos los servidores LSP están deshabilitados. Para deshabilitar todos los servidores LSP después de que otra configuración los haya habilitado, establece lsp en false:

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "lsp": false
}

Para deshabilitar un servidor LSP específico, establece disabled en true:

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "lsp": {
    "typescript": {
      "disabled": true
    }
  }
}

Servidores LSP personalizados

Puedes agregar servidores LSP personalizados especificando el comando y las extensiones de archivo:

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "lsp": {
    "custom-lsp": {
      "command": ["custom-lsp-server", "--stdio"],
      "extensions": [".custom"]
    }
  }
}

Información adicional

PHP Intelephense

PHP Intelephense ofrece funciones premium mediante una clave de licencia. Puedes proporcionar una clave de licencia colocando (solo) la clave en un archivo de texto en:

  • En macOS/Linux: $HOME/intelephense/license.txt
  • En Windows: %USERPROFILE%/intelephense/license.txt

El archivo debe contener únicamente la clave de licencia, sin contenido adicional.