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:

  1. Die Dateiendung der geschriebenen oder bearbeiteten Datei ermitteln (z. B..ts、.py、.gousw.)
  2. Die Endung mit allen aktivierten Formatierungswerkzeugen abgleichen
  3. Den passenden Formatierungsbefehl für diese Datei ausführen
  4. 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"]
    }
  }
}
Weitere Erweiterungen