OpenCode 会在文件被写入或编辑后,自动使用语言特定的 formatter(格式化器)对文件进行格式化。这可以确保生成的代码符合你项目的 code style(代码风格)。


Built-in(内置格式化器)

OpenCode 内置了多种常见语言和框架的 formatter。下面列出了 formatter 名称、支持的文件扩展名(file extensions),以及所需的命令或配置要求。

Formatter Extensions Requirements
gofmt .go 系统中可用 gofmt command
mix .ex, .exs, .eex, .heex, .leex, .neex, .sface 系统中可用 mix command
prettier .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml,以及 more package.json 中存在 prettier dependency
biome .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml,以及 more 存在 biome.json(c) config file
zig .zig, .zon 系统中可用 zig command
clang-format .c, .cpp, .h, .hpp, .ino,以及 more 存在 .clang-format config file
ktlint .kt, .kts 系统中可用 ktlint command
ruff .py, .pyi 系统中可用 ruff command 并且带有 config
rustfmt .rs 系统中可用 rustfmt command
cargofmt .rs 系统中可用 cargo fmt command
uv .py, .pyi 系统中可用 uv command
rubocop .rb, .rake, .gemspec, .ru 系统中可用 rubocop command
standardrb .rb, .rake, .gemspec, .ru 系统中可用 standardrb command
htmlbeautifier .erb, .html.erb 系统中可用 htmlbeautifier command
air .R 系统中可用 air command
dart .dart 系统中可用 dart command
ocamlformat .ml, .mli 系统中可用 ocamlformat command 且存在 .ocamlformat config file
terraform .tf, .tfvars 系统中可用 terraform command
gleam .gleam 系统中可用 gleam command
nixfmt .nix 系统中可用 nixfmt command
shfmt .sh, .bash 系统中可用 shfmt command
oxfmt(Experimental) .js, .jsx, .ts, .tsx package.json 中存在 oxfmt dependency,并且启用了 experimental env variable flag

因此,如果你的项目在 package.json 中包含 prettier,OpenCode 就会自动使用它。


How it works(工作原理)

当 OpenCode 写入或编辑一个文件时,会执行以下流程:

  1. 根据文件扩展名(file extension),检查所有已启用的 formatters。
  2. 对匹配的 formatter 执行对应的 command。
  3. 自动应用格式化后的修改。

整个过程会在后台完成,无需任何手动操作,即可保证代码风格的一致性。


Configure(配置)

你可以通过 OpenCode config 中的 formatter 配置段来自定义 formatter。

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

每个 formatter 配置支持以下字段:

Property Type Description
disabled boolean 设置为 true 时禁用该 formatter
command string[] 执行格式化的 command
environment object 运行 formatter 时设置的环境变量
extensions string[] 该 formatter 需要处理的文件扩展名

下面来看几个示例。


Disabling formatters(禁用格式化器)

如果你想 全局禁用所有 formatter,可以将 formatter 设置为 false

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

如果你只想禁用 某一个 formatter,可以将其 disabled 设置为 true

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


Custom formatters(自定义格式化器)

你可以通过指定 command、environment variables(环境变量)以及 file extensions,来覆盖内置 formatter 或新增 formatter:

{ “$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”] } } }

其中,command 中的 $FILE 占位符(placeholder) 会在运行时被替换为当前正在格式化的文件路径(path)。