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 :

  1. Détecter l'extension du fichier écrit ou modifié (par ex..ts、.py、.goetc.)
  2. Faire correspondre l'extension à tous les outils de formatage activés
  3. Exécuter la commande de formatage correspondante sur ce fichier
  4. 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"]
    }
  }
}
Autres extensions