OpenCode-Formatierungswerkzeuge
OpenCode wird nach jedem Schreiben oder Bearbeiten einer Dateiautomatisch das Formatierungswerkzeug der entsprechenden Spracheverwenden, um sie zu formatieren, wodurch sichergestellt wird, dass der generierte Code immer dem Codestil Ihres Projekts entspricht. Der gesamte Prozess wird still im Hintergrund abgeschlossen, ohne manuellen Eingriff.
Funktionsweise
Wenn OpenCode eine Datei schreibt oder bearbeitet, führt es automatisch eine Formatierung in den folgenden Schritten durch:
- Die Dateiendung der geschriebenen oder bearbeiteten Datei ermitteln (z. B.
.ts、.py、.gousw.) - Die Endung mit allen aktivierten Formatierungswerkzeugen abgleichen
- Den passenden Formatierungsbefehl für diese Datei ausführen
- Das Formatierungsergebnis automatisch zurück in die Datei schreiben
Zum Beispiel, wenn Ihr Projektpackage.jsonenthältprettierAbhängigkeit, OpenCode erkennt sie automatisch und nach jeder Bearbeitung von.js、.ts、.csssolchen Dateien ruft es prettier zur Formatierung auf, ohne zusätzliche Konfiguration.
Integrierte Formatierungswerkzeuge
OpenCode bietet integrierte Unterstützung für Formatierungswerkzeuge, die gängige Sprachen und Frameworks abdecken, unterteilt in zwei Kategorien:
- Aktiviert, wenn der Befehl verfügbar ist: Installieren Sie einfach den entsprechenden Befehl im System, und OpenCode erkennt und verwendet ihn automatisch
- Erfordert Projektkonfigurationsdatei oder Abhängigkeiten: Das Projekt muss eine bestimmte Konfigurationsdatei oder ein bestimmtes Abhängigkeitspaket enthalten
| Formatierungswerkzeug | Unterstützte Dateiendungen | Aktivierungsvoraussetzung |
|---|---|---|
air |
.R |
airBefehl verfügbar |
biome |
.js .jsx .ts .tsx .html .css .md .json .yamlund mehr |
Das Projekt enthält einebiome.jsonoderbiome.jsoncKonfigurationsdatei |
cargofmt |
.rs |
cargo fmtBefehl verfügbar |
clang-format |
.c .cpp .h .hpp .inound mehr |
Das Projekt enthält eine.clang-formatKonfigurationsdatei |
cljfmt |
.clj .cljs .cljc .edn |
cljfmtBefehl verfügbar |
dart |
.dart |
dartBefehl verfügbar |
dfmt |
.d |
dfmtBefehl verfügbar |
gleam |
.gleam |
gleamBefehl verfügbar |
gofmt |
.go |
gofmtBefehl verfügbar |
htmlbeautifier |
.erb .html.erb |
htmlbeautifierBefehl verfügbar |
ktlint |
.kt .kts |
ktlintBefehl verfügbar |
mix |
.ex .exs .eex .heex .leex .neex .sface |
mixBefehl verfügbar |
nixfmt |
.nix |
nixfmtBefehl verfügbar |
ocamlformat |
.ml .mli |
ocamlformatBefehl verfügbar, und das Projekt enthält eine.ocamlformatKonfigurationsdatei |
ormolu |
.hs |
ormoluBefehl verfügbar |
oxfmt(Experimentell) |
.js .jsx .ts .tsx |
package.jsonDas Projekt enthältoxfmtAbhängigkeit, und das entsprechende experimentelle Umgebungsvariablen-Flag ist gesetzt |
pint |
.php |
composer.jsonDas Projekt enthältlaravel/pintAbhängigkeit |
prettier |
.js .jsx .ts .tsx .html .css .md .json .yamlund mehr |
package.jsonDas Projekt enthältprettierAbhängigkeit |
rubocop |
.rb .rake .gemspec .ru |
rubocopBefehl verfügbar |
ruff |
.py .pyi |
ruffBefehl verfügbar und die entsprechende Konfiguration existiert |
rustfmt |
.rs |
rustfmtBefehl verfügbar |
shfmt |
.sh .bash |
shfmtBefehl verfügbar |
standardrb |
.rb .rake .gemspec .ru |
standardrbBefehl verfügbar |
terraform |
.tf .tfvars |
terraformBefehl verfügbar |
uv |
.py .pyi |
uvBefehl verfügbar |
zig |
.zig .zon |
zigBefehl verfügbar |
Wenn mehrere Formatierungswerkzeuge dieselbe Erweiterung unterstützen (z. B.
.rswird ebenfalls unterstützt voncargofmtundrustfmt,.rbwird ebenfalls unterstützt vonrubocopundstandardrb), wird OpenCode automatisch basierend auf den im Projekt installierten Werkzeugen auswählen. Wenn Sie explizit angeben müssen, können Sie unerwünschte Formatierungswerkzeuge mit der folgenden Konfiguration deaktivieren.
Struktur der Konfigurationsdatei
Benutzerdefinierte Konfiguration für Formatierungswerkzeuge wird unter demopencode.jsonvonformatterFeld geschrieben, wobei der Schlüssel der Name des Formatierungswerkzeugs ist (übereinstimmend mit dem Namen in der integrierten Tabelle) und der Wert das Konfigurationsobjekt für dieses Werkzeug ist:
Beispiel
"$schema": "https://opencode.ai/config.json",
"formatter": {
// Name des Formatierungswerkzeugs: Konfigurationsobjekt
"prettier": {
// Hier die Konfigurationsoptionen von prettier eintragen
}
}
}
Jedes Formatierungswerkzeug unterstützt die folgenden Konfigurationsoptionen:
| Konfigurationsoption | Type | Beschreibung |
|---|---|---|
disabled |
boolean |
Setzen auftrueum das Formatierungswerkzeug zu deaktivieren; die übrigen Konfigurationsoptionen werden ignoriert |
command |
string[] |
Das Befehlsarray zum Ausführen der Formatierung. Sie können den$FILEPlatzhalter im Befehl verwenden; zur Laufzeit wird er durch den vollständigen Pfad der zu formatierenden Datei ersetzt |
environment |
object |
Umgebungsvariablen, die beim Ausführen des Formatierungswerkzeugs injiziert werden, in Form von Schlüssel-Wert-Paaren |
extensions |
string[] |
Die Liste der von diesem Formatierungswerkzeug verarbeiteten Dateiendungen (einschließlich des., e.g.".ts") |
Formatierungswerkzeuge deaktivieren
1. Alle Formatierungswerkzeuge deaktivieren
Wenn du nicht möchtest, dass OpenCode Dateien automatisch formatiert, kannst duformatterdirekt auffalse:
Beispiel
"$schema": "https://opencode.ai/config.json",
"formatter": false // Deaktiviert global alle Formatierungswerkzeuge; nach dem Schreiben von Dateien wird keine Formatierung durchgeführt
}
2. Ein bestimmtes Formatierungswerkzeug deaktivieren
Wenn du nur ein Formatierungswerkzeug deaktivieren möchtest, setze im Konfigurationsobjekt des entsprechenden Werkzeugsdisabledauftrue, und andere Formatierungswerkzeuge werden nicht beeinflusst:
Beispiel
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"disabled": true // Deaktiviert nur prettier; andere Formatierungswerkzeuge (wie ruff, gofmt) funktionieren weiterhin normal
}
}
}
Benutzerdefinierte Formatierungswerkzeuge
Durch diecommand、environmentundextensionsMit der Konfigurationsoption kannst du das Standardverhalten integrierter Formatierungswerkzeuge überschreiben oder Formatierungswerkzeuge hinzufügen, die noch nicht in OpenCode integriert sind.
1. Integrierte Befehle für Formatierungswerkzeuge überschreiben
Geben Sie zum Beispiel bestimmte Argumente für prettier an und beschränken Sie es darauf, nur bestimmte Erweiterungen zu verarbeiten:
Beispiel
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"command": ["npx", "prettier", "--write", "$FILE"],
// $FILE im Befehlsarray ist ein Platzhalter; zur Laufzeit wird es durch den vollständigen Pfad der zu formatierenden Datei ersetzt
// Zum Beispiel ist die tatsächliche Ausführung: npx prettier --write /your/project/src/index.ts
"environment": {
"NODE_ENV": "development" // Umgebungsvariablen, die beim Ausführen von prettier injiziert werden
},
"extensions": [".js", ".ts", ".jsx", ".tsx"]
// Standarderweiterungen überschreiben: prettier nur für diese vier Dateitypen ausführen und .html, .css usw. nicht verarbeiten.
}
}
}
2. Benutzerdefinierte Formatierungswerkzeuge hinzufügen
Wenn das von Ihnen verwendete Formatierungswerkzeug nicht in der integrierten Liste enthalten ist, können Sie es hinzufügen, indem Sie einen beliebigen Namen angeben. Sie müssen nur den Startbefehl und die zu verarbeitenden Dateierweiterungen angeben:
Beispiel
"$schema": "https://opencode.ai/config.json",
"formatter": {
"custom-markdown-formatter": { // Benutzerdefinierter Name (Sie können ihn beliebig benennen, solange er nicht mit integrierten Tools in Konflikt gerät)
"command": ["deno", "fmt", "$FILE"],
// Verwenden Sie deno fmt zum Formatieren von Dateien; $FILE wird durch den tatsächlichen Dateipfad ersetzt
"extensions": [".md"] // Führen Sie dieses Formatierungstool nur für .md-Dateien aus
}
}
}
3. Mehrere Formatierungstools gleichzeitig konfigurieren
Beispiel
"$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 wird im Projekt nicht verwendet, daher deaktivieren
},
"custom-markdown-formatter": {
"command": ["deno", "fmt", "$FILE"],
"extensions": [".md"]
}
}
}