代码格式化

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

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

内置格式化工具

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

格式化工具 文件扩展名 要求
gofmt .go gofmt 命令可用
mix .ex, .exs, .eex, .heex, .leex, .neex, .sface mix 命令可用
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, .zon zig 命令可用
clang-format .c, .cpp, .h, .hpp, .ino 等 .clang-format 配置文件
ktlint .kt, .kts ktlint 命令可用
ruff .py, .pyi ruff 命令可用且已配置
uv .py, .pyi uv 命令可用
rubocop .rb, .rake, .gemspec, .ru rubocop 命令可用
standardrb .rb, .rake, .gemspec, .ru standardrb 命令可用
htmlbeautifier .erb, .html.erb htmlbeautifier 命令可用
air .R air 命令可用

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

工作原理

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

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

此过程在后台进行,确保您的代码样式得到维护,而无需任何手动步骤。

配置

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

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

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

属性 类型 描述
disabled boolean 将此设置为 true 以禁用格式化工具
command string[] 用于格式化的命令
environment object 运行格式化工具时设置的环境变量
extensions string[] 此格式化工具应处理的文件扩展名

让我们看一些示例。

禁用格式化工具

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

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

自定义格式化工具

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

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