写代码的速度由 AI 决定,代码质量的底线由工具决定。OpenCode 的 Formatters 和 Code Review 系统让质量保障自动化——每次 AI 生成代码后,自动格式化、自动检查、自动修复。
// opencode.json
{
"formatters": {
"typescript": {
"command": "prettier",
"args": ["--write", "$FILE"]
},
"python": {
"command": "black",
"args": ["$FILE"]
},
"go": {
"command": "gofmt",
"args": ["-w", "$FILE"]
},
"rust": {
"command": "rustfmt",
"args": ["$FILE"]
}
}
}
$FILE 是 OpenCode 自动替换为被修改文件路径的变量。
配置后,AI 每次修改文件,OpenCode 自动运行对应的格式化工具:
AI 修改了 UserService.ts
↓
OpenCode 自动执行: prettier --write UserService.ts
↓
格式已统一,无需人工介入
{
"formatters": {
"typescript": [
{ "command": "prettier", "args": ["--write", "$FILE"] },
{ "command": "eslint", "args": ["--fix", "$FILE"] }
]
}
}
Prettier 处理格式(缩进、引号、分号),ESLint 处理逻辑问题(未使用变量、代码风格)。两者互补。
{
"formatters": {
"typescript": { "command": "prettier", "args": ["--write", "$FILE"], "patterns": ["*.ts", "*.tsx"] },
"json": { "command": "prettier", "args": ["--write", "$FILE"], "patterns": ["*.json", "*.yaml"] },
"markdown": { "command": "prettier", "args": ["--write", "$FILE"], "patterns": ["*.md"] }
}
}
{
"formatters": {
"enabled": true,
"on_save": true,
"on_ai_edit": true,
"skip_patterns": ["*.generated.*", "package-lock.json"]
}
}
// opencode.json
{
"code_review": {
"enabled": true,
"check_on_pr": true,
"check_on_commit": false,
"rules": {
"no_secrets": { "enabled": true, "severity": "error" },
"no_console_log": { "enabled": true, "severity": "warn" },
"type_safety": { "enabled": true, "severity": "error" },
"function_length": { "enabled": true, "max_lines": 80, "severity": "warn" },
"complexity": { "enabled": true, "max_cyclomatic": 15, "severity": "warn" }
}
}
}
| 规则 | 说明 | 严重度建议 |
|------|------|-----------|
| no_secrets | 检测硬编码的 API Key、密码 | error |
| no_console_log | 检测调试打印语句 | warn |
| type_safety | 检测 any 类型、缺少类型守卫 | error |
| function_length | 函数行数超过阈值 | warn |
| complexity | 圈复杂度超过阈值 | warn |
| no_dead_code | 未使用的变量/导入 | warn |
| error_handling | 未处理的 Promise、空 catch | error |
| security_patterns | SQL注入、XSS、路径穿越 | error |
规则可以用正则表达式或语义分析:
{
"code_review": {
"rules": {
"custom_naming": {
"pattern": "interface +[A-Z][a-zA-Z]*",
"message": "接口名必须以大写字母开头",
"severity": "warn"
},
"no_nested_ternary": {
"pattern": "\\? .* \\? .* :",
"message": "禁止嵌套三元表达式",
"severity": "error"
}
}
}
}
Code Review 输出结构化的 Markdown 报告:
| 文件 | 行号 | 问题 | 建议 |
|------|------|------|------|
| auth.ts | 42 | API Key 硬编码 | 使用环境变量 |
| 文件 | 行号 | 问题 | 建议 |
|------|------|------|------|
| user.ts | 156 | 函数超过 80 行 | 拆分为 3 个函数 |
## Code Review 标准 本项目采用以下审查标准: - 所有 API 路由必须有输入验证(zod schema) - 错误不能空 catch,必须记录日志 - 数据库查询必须有分页(limit) - 敏感操作必须有审计日志 - 测试覆盖率新代码不低于 85% 违反以上任何一条,标记为 🔴 阻塞。
将 Formatters + Code Review 串联成自动质量门禁:
AI 修改代码
↓
Formatters 自动格式化
↓
LSP 检查编译错误
↓
Code Review 检查规范
↓
全部通过 → 允许提交
在 Hooks 中集成:
{
"hooks": {
"post_edit": [
{ "run": "formatter", "if": "formatters.enabled" },
{ "run": "code_review", "if": "code_review.enabled" },
{
"command": "echo '✅ 质量门禁通过: {{.file}}'"
}
]
}
}
格式化器消除了"代码风格不一致"的烦恼,代码审查系统堵住了"常见错误混入代码库"的漏洞。两者结合,AI 生成的代码在写入文件的那一刻就被格式化和审查——质量从源头得到保障。