Capitulo 17: LSP y Formatters
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
- OpenCode detecta los Language Servers configurados
- Al editar o crear archivos, consulta al LSP por diagnosticos
- Los errores y warnings se incluyen automaticamente en el contexto del agente
- 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:
| Lenguaje | Language Server | Paquete |
|---|---|---|
| TypeScript/JavaScript | typescript-language-server | typescript-language-server |
| Python | pylsp | python-lsp-server |
| Go | gopls | golang.org/x/tools/gopls |
| Rust | rust-analyzer | rust-analyzer |
| Java | jdtls | Eclipse JDT Language Server |
| Julia | LanguageServer.jl | LanguageServer |
| C/C++ | clangd | clangd |
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:
- Obtener diagnosticos de un archivo especifico
- Consultar definiciones y referencias
- Pedir informacion de hover sobre simbolos
- Solicitar code actions sugeridas por el LSP
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
| Formatter | Lenguajes | Comando |
|---|---|---|
| Prettier | JS, TS, CSS, HTML, JSON, MD | ["prettier", "--write"] |
| Biome | JS, TS, JSON | ["biome", "format", "--write"] |
| Black | Python | ["black"] |
| gofmt | Go | ["gofmt", "-w"] |
| rustfmt | Rust | ["rustfmt"] |
| dfmt | D | ["dfmt"] |
| clang-format | C, C++ | ["clang-format", "-i"] |
Nota: el soporte para
dfmtfue agregado en la version v1.2.6.
Flujo de Trabajo
Cuando el agente edita un archivo:
- Escribe los cambios en el archivo
- Detecta la extension del archivo modificado
- Busca un formatter configurado para esa extension
- Ejecuta el formatter sobre el archivo
- El resultado final es codigo correcto y bien formateado
Combinando LSP y Formatters
La combinacion de ambas features crea un ciclo poderoso:
- El agente genera codigo
- El formatter lo formatea automaticamente
- El LSP reporta errores de tipo o logica
- El agente corrige los errores basandose en los diagnosticos
- 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
- Consistencia: el codigo generado por AI sigue las mismas reglas del proyecto
- Menos revisiones: no necesitas corregir indentacion o estilo manualmente
- Diagnosticos reales: el agente trabaja con errores del compilador, no con suposiciones
- Multi-lenguaje: funciona con cualquier lenguaje que tenga LSP y formatter
Siguiente: Capitulo 18: IDE y ACP —>