~/content/formatters

Formatters

OpenCode uses language specific formatters.

last_updated: "2026-01-20"

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


内置

OpenCode 带有几个用于流行语言和框架的内置格式化程序。 以下是格式化程序、支持的文件扩展名以及它需要的命令或配置选项的列表。

格式化程序扩展名要求
gofmt.gogofmt 命令可用
mix.ex, .exs, .eex, .heex, .leex, .neex, .sfacemix 命令可用
prettier.js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, and moreprettier 依赖项在 package.json 中
biome.js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml, and morebiome.json(c) 配置文件
zig.zig, .zonzig 命令可用
clang-format.c, .cpp, .h, .hpp, .ino, and more.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 命令可用
oxfmt (实验性).js, .jsx, .ts, .tsxoxfmt 依赖项在 package.json 中,以及一个实验性环境变量标志

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


工作原理

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

  1. 针对所有已启用的格式化程序检查文件扩展名。
  2. 在文件上运行相应的格式化程序命令。
  3. 自动应用格式更改。

此过程在后台发生,确保您的代码风格得到维护,而无需任何手动步骤。


配置

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

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

每个格式化程序配置都支持以下内容:

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

让我们看一些例子。


禁用格式化程序

要全局禁用所有格式化程序,请将 formatter 设置为 false:

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

要禁用特定格式化程序,请将 disabled 设置为 true:

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

自定义格式化程序

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

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

Comments (Coming Soon)

Configure Giscus in environment variables to enable comments.