Capitulo 17: LSP y Formatters

Por: Artiko
opencodeailspformatterscode-intelligence

Capitulo 17: LSP y Formatters

< Volver al Indice del Tutorial

OpenCode puede conectarse a Language Servers y ejecutar formatters automaticamente. Esto permite que el agente reciba diagnosticos del codigo en tiempo real y que todo el codigo generado siga las reglas de formato del proyecto.

LSP Integration (Experimental)

La integracion con Language Server Protocol le da a OpenCode la misma inteligencia de codigo que tu IDE: errores de tipo, warnings, autocompletado y mas. Los diagnosticos del LSP se pasan directamente al LLM como contexto adicional.

Como Funciona

  1. OpenCode detecta los Language Servers configurados
  2. Al editar o crear archivos, consulta al LSP por diagnosticos
  3. Los errores y warnings se incluyen automaticamente en el contexto del agente
  4. El LLM puede corregir problemas basandose en los diagnosticos reales del compilador

Lenguajes Soportados

La integracion funciona con cualquier Language Server que implemente el protocolo LSP:

LenguajeLanguage ServerPaquete
TypeScript/JavaScripttypescript-language-servertypescript-language-server
Pythonpylsppython-lsp-server
Gogoplsgolang.org/x/tools/gopls
Rustrust-analyzerrust-analyzer
JavajdtlsEclipse JDT Language Server
JuliaLanguageServer.jlLanguageServer
C/C++clangdclangd

Configuracion

Agrega los Language Servers en tu archivo de configuracion opencode.json:

{
  "lsp": {
    "typescript": {
      "command": "typescript-language-server",
      "args": ["--stdio"]
    },
    "python": {
      "command": "pylsp"
    },
    "go": {
      "command": "gopls",
      "args": ["serve"]
    }
  }
}

Herramienta LSP

El agente tiene acceso a una herramienta lsp que le permite interactuar directamente con el Language Server. Puede:

Esto significa que el agente no solo recibe errores pasivamente, sino que puede consultar activamente al Language Server para tomar mejores decisiones.

Formatters

OpenCode puede ejecutar formatters automaticamente despues de editar archivos. Esto garantiza que el codigo generado por el agente respete las mismas reglas de formato que el resto del proyecto.

Configuracion

Configura los formatters por extension de archivo en opencode.json bajo la clave "formatter":

{
  "formatter": {
    ".ts": ["prettier", "--write"],
    ".tsx": ["prettier", "--write"],
    ".js": ["prettier", "--write"],
    ".css": ["prettier", "--write"],
    ".py": ["black"],
    ".go": ["gofmt", "-w"],
    ".rs": ["rustfmt"]
  }
}

Cada entrada mapea una extension de archivo a un array con el comando y sus argumentos. El primer elemento es el ejecutable y los siguientes son los flags.

Formatters Populares

FormatterLenguajesComando
PrettierJS, TS, CSS, HTML, JSON, MD["prettier", "--write"]
BiomeJS, TS, JSON["biome", "format", "--write"]
BlackPython["black"]
gofmtGo["gofmt", "-w"]
rustfmtRust["rustfmt"]
dfmtD["dfmt"]
clang-formatC, C++["clang-format", "-i"]

Nota: el soporte para dfmt fue agregado en la version v1.2.6.

Flujo de Trabajo

Cuando el agente edita un archivo:

  1. Escribe los cambios en el archivo
  2. Detecta la extension del archivo modificado
  3. Busca un formatter configurado para esa extension
  4. Ejecuta el formatter sobre el archivo
  5. El resultado final es codigo correcto y bien formateado

Combinando LSP y Formatters

La combinacion de ambas features crea un ciclo poderoso:

  1. El agente genera codigo
  2. El formatter lo formatea automaticamente
  3. El LSP reporta errores de tipo o logica
  4. El agente corrige los errores basandose en los diagnosticos
  5. Se repite hasta que no hay errores

Esto replica el flujo de trabajo que tendrias manualmente en un IDE, pero de forma completamente automatica.

Beneficios


Siguiente: Capitulo 18: IDE y ACP —>