用途
Semgrep + CodeRabbit Review 用于在提交(commit)或 PR 合并之前审查代码变更。它把代码审查拆成两个阶段:先做快速、确定性的模式检测,再做语义化的 AI 分析,并强调这个顺序不可协商。
主要能力
该技能覆盖工具执行顺序、发现问题的严重性优先级、修复顺序策略以及冲突解决。
执行顺序分为三个阶段:
- 阶段 1:Semgrep(10-20 秒)。失败则修复全部违规并重跑,直到通过;通过则进入阶段 2。
- 阶段 2:CodeRabbit(5-30 分钟)。按优先级评估发现:CRITICAL 与 HIGH 在合并前修复,MEDIUM 视合理性考虑,LOW 为可选。
- 阶段 3:验证。修复后重跑两个工具,确认没有引入新问题。
优先级参考:
- CRITICAL(阻塞):硬编码密钥、认证绕过、SQL 注入、XSS、数据泄露,必须在合并前修复。
- HIGH(架构):缺失认证守卫、schema 不匹配、破坏性变更、竞态条件,合并前修复。
- MEDIUM(质量):弱加密、错误处理不佳、类型安全违规、重复代码,视合理性修复。
- LOW(打磨):建议、优化机会、风格,可选考虑。
各工具能捕获的非显而易见问题:
- Semgrep:硬编码密钥/API key、路由缺失认证守卫、弱加密(MD5/SHA1)、生产环境调试语句、不安全的 any 类型、SQL 注入模式。
- CodeRabbit:N+1 查询模式、多租户隔离缺口、服务间 API 契约漂移、行为变更上的测试覆盖缺口——这些需要语义理解代码库。
使用方式
命令示例:
# Stage 1 — run on each changed file (loop required for Semgrep 1.146.0+)
for f in $(git diff --name-only HEAD); do
semgrep scan --config auto --json "$f" 2>/dev/null
done
# Stage 2
coderabbit review --diff uncommitted
# Verify after fixes (repeat both)
semgrep scan --config auto <changed-files>
coderabbit review --diff uncommitted
如果项目有 .semgrep.yaml,使用 --config .semgrep.yaml 代替 --config auto。
模式选择:
- 提交前快速检查:--semgrep-only(10-20 秒)。
- 创建 PR 前:空参数,完整两阶段。
- 审查特定近期提交:--since HEAD~3。
- 仅暂存文件(部分工作):--staged。
- CodeRabbit 未安装/不可用:--semgrep-only + 手动清单。
修复策略与冲突解决
按类型而非按文件批量修复:先修所有密钥问题,再修所有认证问题,再修所有注入问题。每批之后运行单元测试。CRITICAL 修复优先——安全与认证绕过问题必须先于其他一切解决,属于不可协商的阻塞项。3 轮规则:如果审查-修复-复验循环超过 3 次,说明 PR 范围过大,应拆分。
当 Semgrep 与 CodeRabbit 对同一行给出冲突反馈时:信任 Semgrep。其规则是确定性且明确的。在采纳 CodeRabbit 的关切前,先用上下文验证。
限制与禁止事项
- 绝不在 Semgrep 通过前运行 CodeRabbit——Semgrep 失败是阻塞项,不是建议。
- 绝不在修复后跳过重跑两个工具——修复可能引入新问题。
- 绝不把 LOW 发现当作阻塞项——它们是可选打磨。
- 绝不对同一 PR 做超过 3 轮审查——若 3 轮后仍失败,把 PR 拆成更小的部分。
- 绝不在修复中途切换问题类型——把相似问题批量处理。
适用场景
适用于提交或 PR 合并前的代码变更审查,尤其是需要兼顾确定性规则检测与语义化 AI 分析的团队工作流。