Formateadores
OpenCode usa formateadores especificos de lenguaje.
OpenCode formatea automaticamente los archivos despues de escribirlos o editarlos usando formateadores especificos de lenguaje. Esto asegura que el codigo generado siga los estilos de codigo de tu proyecto.
Formateadores integrados
OpenCode viene con varios formateadores integrados para lenguajes y frameworks populares. A continuacion se muestra una lista de los formateadores, extensiones de archivo soportadas y comandos u opciones de configuracion necesarios.
| Formateador | Extensiones | Requisitos |
|---|---|---|
| gofmt | .go | Comando gofmt disponible |
| mix | .ex, .exs, .eex, .heex, .leex, .neex, .sface | Comando mix disponible |
| prettier | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml y mas (opens in a new tab) | Dependencia prettier en package.json |
| biome | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml y mas (opens in a new tab) | Archivo de configuracion biome.json(c) |
| zig | .zig, .zon | Comando zig disponible |
| clang-format | .c, .cpp, .h, .hpp, .ino y mas (opens in a new tab) | Archivo de configuracion .clang-format |
| ktlint | .kt, .kts | Comando ktlint disponible |
| ruff | .py, .pyi | Comando ruff disponible con configuracion |
| rustfmt | .rs | Comando rustfmt disponible |
| cargofmt | .rs | Comando cargo fmt disponible |
| uv | .py, .pyi | Comando uv disponible |
| rubocop | .rb, .rake, .gemspec, .ru | Comando rubocop disponible |
| standardrb | .rb, .rake, .gemspec, .ru | Comando standardrb disponible |
| htmlbeautifier | .erb, .html.erb | Comando htmlbeautifier disponible |
| air | .R | Comando air disponible |
| dart | .dart | Comando dart disponible |
| ocamlformat | .ml, .mli | Comando ocamlformat disponible y archivo de configuracion .ocamlformat |
| terraform | .tf, .tfvars | Comando terraform disponible |
| gleam | .gleam | Comando gleam disponible |
| nixfmt | .nix | Comando nixfmt disponible |
| shfmt | .sh, .bash | Comando shfmt disponible |
| pint | .php | Dependencia laravel/pint en composer.json |
| oxfmt (Experimental) | .js, .jsx, .ts, .tsx | Dependencia oxfmt en package.json y una variable de entorno experimental |
| ormolu | .hs | Comando ormolu disponible |
Entonces, si tu proyecto tiene prettier en tu package.json, OpenCode lo usara automaticamente.
Como funciona
Cuando OpenCode escribe o edita un archivo:
- Verifica la extension del archivo contra todos los formateadores habilitados.
- Ejecuta el comando del formateador apropiado en el archivo.
- Aplica los cambios de formateo automaticamente.
Este proceso ocurre en segundo plano, asegurando que tus estilos de codigo se mantengan sin ningun paso manual.
Configurar
Puedes personalizar los formateadores a traves de la seccion formatter en tu configuracion de OpenCode.
{
"$schema": "https://opencode.ai/config.json",
"formatter": {}
}Cada configuracion de formateador soporta lo siguiente:
| Propiedad | Tipo | Descripcion |
|---|---|---|
disabled | boolean | Establecer en true para deshabilitar el formateador |
command | string[] | El comando a ejecutar para formatear |
environment | object | Variables de entorno a establecer al ejecutar el formateador |
extensions | string[] | Extensiones de archivo que este formateador debe manejar |
Veamos algunos ejemplos.
Deshabilitar formateadores
Para deshabilitar todos los formateadores globalmente, establece formatter en false:
{
"$schema": "https://opencode.ai/config.json",
"formatter": false
}Para deshabilitar un formateador especifico, establece disabled en true:
{
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"disabled": true
}
}
}Formateadores personalizados
Puedes anular los formateadores integrados o agregar nuevos especificando el comando, variables de entorno y extensiones de archivo:
{
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"command": ["npx", "prettier", "--write", "$FILE"],
"environment": {
"NODE_ENV": "development"
},
"extensions": [".js", ".ts", ".jsx", ".tsx"]
},
"custom-markdown-formatter": {
"command": ["deno", "fmt", "$FILE"],
"extensions": [".md"]
}
}
}El marcador $FILE en el comando sera reemplazado por la ruta del archivo que se esta formateando.