跳至内容

格式化程序

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

OpenCode 在文件写入或编辑后,会自动使用特定语言的格式化工具进行格式化。这确保了生成的代码符合您项目的代码风格。


内置

OpenCode 内置了多种针对流行语言和框架的格式化工具。下面列出了这些格式化工具、支持的文件扩展名以及所需的命令或配置选项。

格式化工具扩展要求
air.Rair 命令可用
biome.js、.jsx、.ts、.tsx、.html、.css、.md、.json、.yaml,以及更多biome.json(c) 配置文件
cargofmt.rscargo fmt 命令可用
clang-format.c、.cpp、.h、.hpp、.ino,以及更多.clang-format 配置文件
cljfmt.clj、.cljs、.cljc、.edncljfmt 命令可用
dart.dartdart 命令可用
dfmt.ddfmt 命令可用
gleam.gleamgleam 命令可用
gofmt.gogofmt 命令可用
htmlbeautifier.erb、.html.erbhtmlbeautifier 命令可用
ktlint.kt、.ktsktlint 命令可用
mix.ex、.exs、.eex、.heex、.leex、.neex、.sfacemix 命令可用
nixfmt.nixnixfmt 命令可用
ocamlformat.ml、.mliocamlformat 命令可用且存在 .ocamlformat 配置文件
ormolu.hsormolu 命令可用
oxfmt (实验性).js、.jsx、.ts、.tsxpackage.json 中存在 oxfmt 依赖,且存在实验性环境变量标志
pint.phpcomposer.json 中存在 laravel/pint 依赖
prettier.js、.jsx、.ts、.tsx、.html、.css、.md、.json、.yaml,以及更多package.json 中存在 prettier 依赖
rubocop.rb、.rake、.gemspec、.rurubocop 命令可用
ruff.py、.pyi带配置的 ruff 命令可用
rustfmt.rsrustfmt 命令可用
shfmt.sh、.bashshfmt 命令可用
standardrb.rb、.rake、.gemspec、.rustandardrb 命令可用
terraform.tf、.tfvarsterraform 命令可用
uv.py、.pyiuv 命令可用
zig.zig、.zonzig 命令可用

因此,如果您的项目中 package.json 包含 prettier,OpenCode 将自动使用它。


工作原理

当 OpenCode 写入或编辑文件时,它会执行以下操作:

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

此过程在后台进行,确保您的代码风格无需任何手动操作即可保持一致。


配置

您可以通过 OpenCode 配置中的 formatter 部分自定义格式化工具。

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

每个格式化工具配置都支持以下属性:

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

让我们看一些示例。


禁用格式化工具

要全局禁用所有格式化工具,请将 formatter 设置为 false

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

要禁用特定的格式化工具,请将 disabled 设置为 true

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

自定义格式化工具

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

opencode.json
{
"$schema": "https://opencode.ac.cn/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 占位符将被替换为正在格式化的文件的路径。