跳转到内容

格式化器

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, .tsx需要 package.json 中有 oxfmt 依赖及实验性环境变量标志
pint.php需要 composer.json 中有 laravel/pint 依赖
prettier.js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml 等需要 package.json 中有 prettier 依赖
rubocop.rb, .rake, .gemspec, .rurubocop 命令可用
ruff.py, .pyiruff 命令可用(需配置)
rustfmt.rsrustfmt 命令可用
shfmt.sh, .bashshfmt 命令可用
standardrb.rb, .rake, .gemspec, .rustandardrb 命令可用
terraform.tf, .tfvarsterraform 命令可用
uv.py, .pyiuv 命令可用
zig.zig, .zonzig 命令可用

启用格式化器后,如果项目 package.json 中有 prettier,OpenCode 会使用 prettier 处理匹配的文件。


工作原理

当 OpenCode 写入或编辑文件且格式化器启用时,它会:

  1. 检查文件扩展名是否与所有已启用的格式化器匹配。
  2. 在该文件上运行相应的格式化命令。
  3. 应用格式化更改。

此过程在后台为已启用的格式化器运行。


配置

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

要启用所有内置格式化器,请将 formatter 设置为 true

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

使用对象可以在保持内置格式化器启用的同时配置覆盖项或自定义格式化器。

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

每个格式化器配置支持以下属性:

属性类型说明
disabledboolean设置为 true 可禁用该格式化器
commandstring[]运行格式化的命令。自定义格式化器必需,内置格式化器可选
environmentobject运行格式化器时设置的环境变量
extensionsstring[]该格式化器应处理的文件扩展名

以下是一些示例。


禁用格式化器

如果省略 formatter,所有格式化器都会被禁用。在其他配置启用后想禁用所有格式化器,请将 formatter 设置为 false

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

要禁用某个特定格式化器,请将 disabled 设置为 true

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

自定义格式化器

你可以使用 environmentextensions 等选项配置内置格式化器。要添加自定义格式化器,请指定 commandextensions

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