Outils de formatage OpenCode
OpenCode, après chaque écriture ou modification de fichier, utilisera,automatiquement, l'outil de formatage du langage correspondant pour le formater, garantissant que le code généré est toujours conforme au style de code de votre projet. L'ensemble du processus s'effectue silencieusement en arrière-plan, sans aucune opération manuelle.
Fonctionnement
Lorsqu'OpenCode écrit ou modifie un fichier, il effectue automatiquement le formatage selon les étapes suivantes :
- Détecter l'extension du fichier écrit ou modifié (par ex.
.ts、.py、.goetc.) - Faire correspondre l'extension à tous les outils de formatage activés
- Exécuter la commande de formatage correspondante sur ce fichier
- Réécrire automatiquement le résultat du formatage dans le fichier
Par exemple, si votre projetpackage.jsoncontainsprettierdépendance, OpenCode le détectera automatiquement et après chaque modification de.js、.ts、.cssces fichiers, il appelle prettier pour le formatage, sans aucune configuration supplémentaire.
Outils de formatage intégrés
OpenCode dispose d'une prise en charge intégrée des outils de formatage couvrant les langages et frameworks courants, répartis en deux catégories :
- Activé lorsque la commande est disponible: Il suffit d'installer la commande correspondante dans le système, et OpenCode la détectera et l'utilisera automatiquement
- Nécessite un fichier de configuration de projet ou des dépendances: Le projet doit inclure un fichier de configuration spécifique ou un paquet de dépendances
| Outil de formatage | Extensions de fichiers prises en charge | Condition d'activation |
|---|---|---|
air |
.R |
airCommande disponible |
biome |
.js .jsx .ts .tsx .html .css .md .json .yamlet plus encore |
Le projet contient unebiome.jsonoubiome.jsoncfichier de configuration |
cargofmt |
.rs |
cargo fmtCommande disponible |
clang-format |
.c .cpp .h .hpp .inoet plus encore |
Le projet contient une.clang-formatfichier de configuration |
cljfmt |
.clj .cljs .cljc .edn |
cljfmtCommande disponible |
dart |
.dart |
dartCommande disponible |
dfmt |
.d |
dfmtCommande disponible |
gleam |
.gleam |
gleamCommande disponible |
gofmt |
.go |
gofmtCommande disponible |
htmlbeautifier |
.erb .html.erb |
htmlbeautifierCommande disponible |
ktlint |
.kt .kts |
ktlintCommande disponible |
mix |
.ex .exs .eex .heex .leex .neex .sface |
mixCommande disponible |
nixfmt |
.nix |
nixfmtCommande disponible |
ocamlformat |
.ml .mli |
ocamlformatCommande disponible, et le projet contient une.ocamlformatfichier de configuration |
ormolu |
.hs |
ormoluCommande disponible |
oxfmt(Expérimental) |
.js .jsx .ts .tsx |
package.jsonLe projet contientoxfmtdépendance, et l'indicateur de variable d'environnement expérimentale correspondant est défini |
pint |
.php |
composer.jsonLe projet contientlaravel/pintdépendance |
prettier |
.js .jsx .ts .tsx .html .css .md .json .yamlet plus encore |
package.jsonLe projet contientprettierdépendance |
rubocop |
.rb .rake .gemspec .ru |
rubocopCommande disponible |
ruff |
.py .pyi |
ruffCommande disponible et la configuration correspondante existe |
rustfmt |
.rs |
rustfmtCommande disponible |
shfmt |
.sh .bash |
shfmtCommande disponible |
standardrb |
.rb .rake .gemspec .ru |
standardrbCommande disponible |
terraform |
.tf .tfvars |
terraformCommande disponible |
uv |
.py .pyi |
uvCommande disponible |
zig |
.zig .zon |
zigCommande disponible |
Lorsque plusieurs outils de formatage prennent en charge la même extension (par ex.
.rsest également pris en charge parcargofmtetrustfmt,.rbest également pris en charge parrubocopetstandardrb), OpenCode choisira automatiquement en fonction des outils installés dans le projet. Si vous devez spécifier explicitement, vous pouvez désactiver les outils de formatage indésirables à l'aide de la configuration ci-dessous.
Structure du fichier de configuration
La configuration personnalisée des outils de formatage est écrite sous leopencode.jsondeformatterchamp, la clé étant le nom de l'outil de formatage (cohérent avec le nom dans le tableau intégré) et la valeur étant l'objet de configuration de cet outil :
Exemple
"$schema": "https://opencode.ai/config.json",
"formatter": {
// Nom de l'outil de formatage : objet de configuration
"prettier": {
// Renseignez ici les options de configuration de prettier
}
}
}
Chaque outil de formatage prend en charge les options de configuration suivantes :
| Option de configuration | Type | Description |
|---|---|---|
disabled |
boolean |
Défini àtruepour désactiver l'outil de formatage ; les autres options de configuration seront ignorées |
command |
string[] |
Le tableau de commandes pour effectuer le formatage. Vous pouvez utiliser le$FILEparamètre fictif dans la commande ; à l'exécution, il sera remplacé par le chemin complet du fichier à formater |
environment |
object |
Variables d'environnement injectées lors de l'exécution de l'outil de formatage, sous forme de paires clé-valeur |
extensions |
string[] |
La liste des extensions de fichiers traitées par cet outil de formatage (y compris le., e.g.".ts") |
Désactivation des outils de formatage
1. Désactiver tous les outils de formatage
Si vous ne voulez pas qu'OpenCode formate automatiquement des fichiers, vous pouvez définirformatterdirectement àfalse:
Exemple
"$schema": "https://opencode.ai/config.json",
"formatter": false // Désactive globalement tous les outils de formatage ; aucun formatage ne sera effectué après l'écriture des fichiers
}
2. Désactiver un outil de formatage spécifique
Si vous ne devez désactiver qu'un seul outil de formatage, dans l'objet de configuration de l'outil correspondant, définissezdisabledàtrue, et les autres outils de formatage ne seront pas affectés :
Exemple
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"disabled": true // Désactive uniquement prettier ; les autres outils de formatage (tels que ruff, gofmt) fonctionnent toujours normalement
}
}
}
Outils de formatage personnalisés
Grâce à lacommand、environmentetextensionsoption de configuration, vous pouvez remplacer le comportement par défaut des outils de formatage intégrés, ou ajouter des outils de formatage qui ne sont pas encore intégrés à OpenCode.
1. Surcharger les commandes des outils de formatage intégrés
Par exemple, spécifiez des arguments particuliers pour prettier et limitez-le à ne traiter que des extensions spécifiques :
Exemple
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"command": ["npx", "prettier", "--write", "$FILE"],
// $FILE dans le tableau de commande est un espace réservé ; à l'exécution, il sera remplacé par le chemin complet du fichier à formater
// Par exemple, l'exécution réelle est : npx prettier --write /your/project/src/index.ts
"environment": {
"NODE_ENV": "development" // Variables d'environnement injectées lors de l'exécution de prettier
},
"extensions": [".js", ".ts", ".jsx", ".tsx"]
// Surcharger les extensions par défaut : exécuter prettier uniquement sur ces quatre types de fichiers et ne pas traiter .html, .css, etc.
}
}
}
2. Ajouter des outils de formatage personnalisés
Si l'outil de formatage que vous utilisez ne figure pas dans la liste intégrée, vous pouvez l'ajouter en spécifiant n'importe quel nom. Il vous suffit de fournir la commande de lancement et les extensions de fichier à traiter :
Exemple
"$schema": "https://opencode.ai/config.json",
"formatter": {
"custom-markdown-formatter": { // Nom personnalisé (vous pouvez le nommer comme vous voulez tant qu'il n'entre pas en conflit avec les outils intégrés)
"command": ["deno", "fmt", "$FILE"],
// Utilisez deno fmt pour formater les fichiers ; $FILE sera remplacé par le chemin de fichier réel
"extensions": [".md"] // Exécuter cet outil de formatage uniquement sur les fichiers .md
}
}
}
3. Configurer plusieurs outils de formatage simultanément
Exemple
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"command": ["npx", "prettier", "--write", "$FILE"],
"environment": {
"NODE_ENV": "development"
},
"extensions": [".js", ".ts", ".jsx", ".tsx"]
},
"ruff": {
"disabled": true // ruff n'est pas utilisé dans le projet, donc désactivez-le
},
"custom-markdown-formatter": {
"command": ["deno", "fmt", "$FILE"],
"extensions": [".md"]
}
}
}