跳转到内容

格式化器 Formatters

OpenCode 使用特定语言的格式化器。

OpenCode 在文件写入或编辑后,会使用特定于语言的格式化器自动格式化文件。这确保生成的代码遵循你项目的代码风格。


内置 Built-in

OpenCode 为流行语言和框架提供了几种内置格式化器。以下是格式化器、支持的文件扩展名以及它所需的命令或配置选项的列表。

格式化器 Formatter扩展名 Extensions要求 Requirements
gofmt.gogofmt 命令可用
mix.ex, .exs, .eex, .heex, .leex, .neex, .sfacemix 命令可用
prettier.js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, 和 更多package.json 中的 prettier 依赖
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.phpcomposer.json 中的 laravel/pint 依赖
oxfmt (Experimental).js, .jsx, .ts, .tsxpackage.json 中的 oxfmt 依赖和 实验性环境变量标志

因此,如果你的项目在 package.json 中有 prettier,OpenCode 将自动使用它。


工作原理 How it works

当 OpenCode 写入或编辑文件时,它会:

  1. 根据所有启用的格式化器检查文件扩展名。
  2. 对文件运行适当的格式化命令。
  3. 自动应用格式化更改。

这个过程在后台发生,确保你的代码风格无需任何手动步骤即可保持。


配置 Configure

你可以通过 OpenCode 配置中的 formatter 部分自定义格式化器。

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

每个格式化器配置支持以下内容:

属性 Property类型 Type描述 Description
disabledboolean将此设置为 true 以禁用格式化器
commandstring[]运行格式化的命令
environmentobject运行格式化器时要设置的环境变量
extensionsstring[]此格式化器应处理的文件扩展名

让我们看一些例子。


禁用格式化器 Disabling formatters

要在全局范围内禁用 所有 格式化器,请将 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
}
}
}

自定义格式化器 Custom formatters

你可以通过指定命令、环境变量和文件扩展名来覆盖内置格式化器或添加新格式化器:

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 占位符 将被替换为正在格式化的文件的路径。