Cubox书签
43.8MB · 2025-11-24
近期在参与实现本地 AI Code Review 的事情,以下是一些思考输出。感兴趣的小伙伴可以在评论区一起讨论~
从 AI Code Review 的目的上看,我们更多的是需要增强代码的健壮性和稳定性,然后是代码的可读性及保证风格统一,持续推进项目标准化、规范化。
这样既能保证发布后的产品稳定,又能确保项目可以有节奏地、清晰地进行演进,还能让其他同学在 CR 过程中取长补短、查漏补缺,进行自我提升。
那有哪些问题是我们需要在 CR 中找出并必须让同学进行修改的?我认为有以下几种:
而 CR 本身也应该从两个维度进行:
在实际过程中,我们应该参考或者遵循以 Spec 驱动的方式来制定 CR 规范。比如通用的 CR 规则 + 项目编码规范和工作流程 + 团队内部知识库积累。
这里列举一些比较常规的 Spec:
既然要实现 Code Review,那么就需要知道 Code Review 的时机以及内容。
通常来说,我们一般只有在提交完代码,并发起一个 Merge Request (MR)的时候,才会触发 Code Review。而需要评审的内容:是自开发分支从指定分支(比如 master 或者 main)分叉以来的增量代码(避免把指定分支上最新的变更都算进来)。
可以认为是在本地以 merge-base 为基准的三点比较,这是与 PR/MR 最接近的 Diff 手段。同时还需要启用 -M(重命名检测)和 -C(复制检测),避免混入一些不必要的文件内容到 CR 当中。
对于本地 AI CR 来说,我们把 CR 时机放在 pre-commit 这一环节,那 CR 的内容就是「已提交的内容 + 暂存区」的内容,最简单的实现方式就是:
# 计算变更基线
BASE=$(git merge-base origin/master HEAD)
# 查看差异文件
git diff --name-only --cached "$BASE"
# 查看完整补丁
git diff --cached -M -C "$BASE"
用 merge-base 作为变更基线的什么意思呢?
要知道在做分支比较时,我们不会直接拿 master 的快照来当左侧基线,而是先找到 master 与当前分支的“共同祖先”(通常来说就是分支分叉点),使用它来作为对比起点。这样得到的差异就是——从分支创建以来你真正引入的改动,从而避免被 master 分支上后续 push 进去的代码提交所污染。
用 merge-base 就是获取该分叉点的主要手段,git diff master...HEAD (或者 git merge-base master HEAD) 只会展示——从分叉点到你当前分支头部的增量,在 PR/MR 中基本都采用这种三点(...)语义。
为什么要在 pre-commit 发起 AI CR?
综上,我们在 pre-commit 环节借助 AI CR,可以缩短整个评审周期和发布周期。既减少了 commit 次数,又能保证代码质量和功能稳定,还能减轻评审人的压力,何乐而不为?
我们直接使用 Shell 脚本的方式搭配 Claude Code 或者 iflow 来实现本地 AI Code Review。以 iflow 为例:
npm install -g iflow;.husky/pre-commit 文件中增加调用脚本
iflow -y -p "your_prompt" 的形势,触发 iflow 终端运行这个是扩展项,如果从知识库的角度来进行 Code Review,可以有效地提高准确率(预期)。