代码生成只是第一步,持续保障代码质量才是长期价值。本章讲解如何使用 Codex 自动化代码审查、系统化重构和智能调试,让 AI 成为你的"代码质量守门人"。
# 单文件审查 codex "对 src/services/OrderService.ts 进行全面审查:\n 1. 安全漏洞(注入、越权、敏感信息泄露)\n 2. 性能问题(N+1查询、不必要的循环、内存泄漏)\n 3. 错误处理缺失\n 4. 代码味道(过长函数、重复代码、高耦合)\n 5. TypeScript 类型安全\n 输出分级报告:🔴 严重 🟡 建议 🟢 表扬"
#!/bin/bash # review-pr.sh PR_NUMBER=$1 gh pr diff $PR_NUMBER | codex exec \ "审查此 PR,关注以下维度: 🔒 安全:是否有注入风险、权限漏洞 ⚡ 性能:是否有不必要的计算、阻塞操作 📐 架构:是否遵循项目分层规范 🧪 测试:是否覆盖了关键路径 📖 可读性:命名是否清晰、逻辑是否易懂 每个问题请标注严重程度和具体行号。"
在 AGENTS.md 中预定义审查规则:
## 代码审查自动检查规则 ### JavaScript/TypeScript - [ ] 所有 async 函数有 try-catch 或 .catch() - [ ] useEffect 有 cleanup 函数 - [ ] 数组 map 后无副作用的直接改为 forEach - [ ] 不存在 Object.assign 应改为展开运算符 - [ ] setTimeout 时间使用命名常量而非魔法数字 ### Python - [ ] 不使用可变默认参数 - [ ] 上下文管理器使用 with 语句 - [ ] 字符串拼接使用 f-string ### 通用 - [ ] 无硬编码密钥/密码 - [ ] 无 console.log / print 调试语句 - [ ] 文件操作使用绝对路径或相对于项目根
让 Codex 输出结构化的审查报告:
git diff main...feature-branch | codex exec \ "生成 Markdown 格式的代码审查报告: ### 🔴 阻塞问题 ### 🟡 改进建议 ### 🟢 亮点 ### 📊 统计 - 文件变更数 - 新增行/删除行 - 复杂度变化"
Codex 能做的不只是重命名变量。告诉它"为什么重构"比"怎么重构"更重要:
# ✅ 好的重构提示词 codex "UserService 目前承担了太多职责。请按单一职责原则拆分: - 认证逻辑 → AuthService - 用户 CRUD → UserRepository - 权限检查 → PermissionGuard UserService 仅保留编排逻辑。 保持 API 兼容,分批重构,每批验证后继续。" # ❌ 差的重构提示词 codex "重构 UserService"
codex "扫描 src/services/ 目录,寻找代码坏味道: - 超过 200 行的函数 - 超过 5 个参数的函数 - 重复超过 10 行的代码块 - 深度嵌套(> 4 层)的 if/for - 根据文件名/注释/目录结构还能发现的坏味道 输出:文件路径 + 行号 + 问题类型 + 建议重构方式"
先备份(通过 pre_edit Hooks 自动完成)
先写测试(如果现有测试覆盖不足)
小步重构(一次一个改进)
验证(每次重构后运行测试)
提交(确认无误后原子提交)
# 在 Hooks 中配置自动备份
hooks:
pre_edit:
- mkdir -p .codex/backups/$(date +%Y%m%d)
- cp "{{.file}}" ".codex/backups/$(date +%Y%m%d)/$(basename {{.file}}).bak"
codex "UserService 中有大量的 if-else 判断用户类型来处理不同逻辑。\n 请使用策略模式重构: - 定义 UserStrategy 接口 - 每种用户类型实现一个策略类 - UserService 根据用户类型委托给对应策略"
Codex 能理解设计模式并在具体上下文中正确应用。
对于跨多文件的重构:
codex "将所有 API 响应从 { code, data, message } 格式统一迁移为 { success, data, error } 格式:
1. 先列出所有需要修改的文件
2. 逐个文件修改,保持编译通过
3. 同步更新对应的测试"
将错误信息直接传给 Codex:
# 运行时错误 npm run dev 2>&1 | codex exec "分析错误堆栈,定位根因并给出修复代码" # 编译错误 npx tsc --noEmit 2>&1 | codex exec "逐个分析 TypeScript 编译错误,给出修复方案" # 测试失败 npm test 2>&1 | codex exec "分析失败的测试用例,判断是测试问题还是源码问题,修复源码"
# 从几万行日志中提取关键信息 codex exec < prod.log "分析生产环境日志,寻找: 1. 高频错误及其频率 2. 异常的性能退化点 3. 可疑的操作序列 按影响程度排序,给出修复优先级"
# 分析性能瓶颈 codex "分析 src/services/ReportService.ts 的 generateReport 方法: 1. 识别时间复杂度 2. 找出数据库查询次数 3. 给出优化的 SQL 和代码 4. 估算优化后的性能提升"
codex "审查这个 React 组件,检查内存泄漏风险: - 未清理的 useEffect - 未移除的事件监听器 - 闭包引用导致的对象保留 - 全局变量污染"
> 这段代码运行后 results 数组为空,但数据库里应该有数据 Codex: 让我检查... findByUserId 的查询条件中 status 字段可能不匹配。 数据库中 status 是 'active',但查询条件是 Status.ACTIVE(枚举值为 1)。 建议统一使用枚举值。 > 修复它 Codex: [修改代码] 已将 status: 'active' 改为 status: UserStatus.ACTIVE
在 CI/CD 中集成 Codex 作为质量门禁:
# .github/workflows/codex-quality.yml
name: Codex Quality Gate
on: [pull_request]
jobs:
quality:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Codex Review
run: |
gh pr diff ${{ github.event.pull_request.number }} | \
codex exec --yes \
"审查代码变更。如果发现阻塞问题,以非零退出码退出并列出问题。"
| 领域 | Do | Don't |
|------|-----|-------|
| 审查 | 定义明确的审查标准 | 笼统地说"检查一下" |
| 重构 | 先让 AI 列出重构计划再动手 | 一次性大改所有文件 |
| 调试 | 提供完整的错误堆栈和上下文 | 只说"修一下" |
| 自动化 | 将审查规则写入 AGENTS.md | 每次手动输入规则 |
| 安全 | 审查结果人工确认后再合并 | 完全依赖 AI 的审查结果 |
AI 不会替代代码审查,但它能让你在审查之前就把 80% 的常见问题消灭掉。重构时它帮你做机械的重命名和移动,让你专注于架构决策。调试时它比你更快地扫描堆栈跟踪,定位问题根源。用好这些能力,你花在"找问题"上的时间大幅减少,把精力集中在"设计好方案"上。