跳到內容

格式化程序

opencode 使用特定於語言的格式化程序。

使用特定於語言的格式化程序編寫或編輯文件後,opencode 會自動格式化文件。這可確保生成的程式碼遵循項目的程式碼風格。


內建

opencode 附帶了多個適用於流行語言和框架的內置格式化程序。下面是格式化程序、支持的文件擴展名以及所需的命令或配置選項的列表。

格式化程序擴展要求
gofmt.gogofmt 命令可用
mix.ex, .exs, .eex, .heex, .leex, .neex, .sfacemix 命令可用
prettier.js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, 和 更多prettier 中有 package.json 依賴
biome.js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, 和 更多biome.json(c) 配置文件
zig.zig, .zonzig 命令可用
clang-format.c, .cpp, .h, .hpp, .ino, 和 更多.clang-format 配置文件
ktlint.kt, .ktsktlint 命令可用
ruff.py, .pyiruff 命令可用并配置完成
rustfmt.rsrustfmt 命令可用
cargofmt.rscargo fmt 命令可用
uv.py, .pyiuv 命令可用
rubocop.rb, .rake, .gemspec, .rurubocop 命令可用
standardrb.rb, .rake, .gemspec, .rustandardrb 命令可用
htmlbeautifier.erb, .html.erbhtmlbeautifier 命令可用
air.Rair 命令可用
dart.dartdart 命令可用
ocamlformat.ml, .mliocamlformat 命令可用,且存在 .ocamlformat 配置文件
terraform.tf, .tfvarsterraform 命令可用
gleam.gleamgleam 命令可用
nixfmt.nixnixfmt 命令可用
shfmt.sh, .bashshfmt 命令可用
pint.phplaravel/pint 中有 composer.json 依賴
oxfmt (Experimental).js, .jsx, .ts, .tsxoxfmt 中有 package.json 依賴且啟用實驗環境變量旗標
ormolu.hsormolu 命令可用

因此,如果您的項目的prettier中有package.json,opencode將自動使用它。


它是如何運作的

當 opencode 寫入或編輯文件時,它:

  1. 根據所有啟用的格式化程序檢查文件擴展名。
  2. 對文件運行適當的格式化程序命令。
  3. 自動應用格式更改。

此過程在後台進行,確保無需任何手動步驟即可維護您的程式碼樣式。


配置

您可以通過 opencode 配置中的 formatter 部分自定義格式化程序。

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"formatter": {}
}

每個格式化程序配置支持以下內容:

物業類型描述
disabled布爾將其設置為 true 以禁用格式化程序
command字符串[]格式化運行的命令
environment對象運行格式化程序時要設置的環境變量
extensions字符串[]此格式化程序應處理的文件擴展名

讓我們看一些例子。


禁用格式化程序

要全局禁用所有格式化程序,請將formatter設置為false

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"formatter": false
}

要禁用特定格式化程序,請將disabled設置為true

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"disabled": true
}
}
}

自定義格式化程序

您可以覆蓋內置格式化程序或通過指定命令、環境變量和文件擴展名添加新格式化程序:

opencode.json
{
"$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"]
}
}
}

命令中的 $FILE 佔位符 將替換為正在格式化的文件的路徑。