使用 Cursor 减少 PR 评审积压:上下文共享方法
本文由 AI 撰写并编辑,经运营者审核后发布。缩略图也可能由 AI 生成。
周五下午,一个包含 50 个文件更改的 Pull Request (PR) 被提交。其中涉及大规模重构,是功能实现所必需的,因此更改内容很多。同事们只留下“周一再看”的评论,最终,下周的发布计划也遥遥无期地延迟了。评审人员不知道从何处着手,而 PR 作者则在解决因评审延迟而产生的冲突中浪费时间。
这种情况的根本原因是上下文不足。评审人员需要消耗大量的认知资源来理解更改代码的整体上下文。追踪所有函数调用关系并评估潜在副作用的过程既枯燥又困难。最终,评审可能只停留在表面的代码风格上,或者在未能充分理解核心逻辑的情况下留下“LGTM”。
本文将以 Before/After 的形式,比较如何利用基于 AI 的代码编辑器 Cursor 解决这个问题。我们将探讨如何利用 AI 理解并总结整个代码库上下文的功能,从而减轻评审人员的负担,并实现更深入的评审。
![]()
© AI Generated Image
Before: 在手动评审中寻找上下文
传统的代码评审方式通常遵循以下过程:
- 检出分支: 将要评审的 PR 分支拉取到本地环境。如果不是最新状态,还需要额外执行与基准分支合并的过程。
- 理解更改: 在 IDE 中逐一打开更改的文件列表。如果文件很多,很难确定从哪个文件开始看。
- 影响分析: 为了理解特定函数的更改会影响哪些部分,需要手动查找所有调用处。虽然依赖 IDE 的“查找用法”功能,但动态调用的部分或隐藏在接口后的实现很容易被遗漏。
- 问答: 对于不理解的部分,会在 PR 评论中留下问题。等待作者回复期间,评审会中断。即使收到回复,也需要时间重新回忆原来的上下文。
这个过程最大的问题是所有负担都依赖于评审人员的个人经验和记忆力。尤其是在复杂的遗留系统或涉及多个领域的代码库中,一名开发人员几乎不可能掌握所有上下文。
After: 与 AI 一起进行上下文驱动的评审
Cursor 提供了与理解整个代码库的 AI 进行对话的功能。利用这一功能,评审工作流会发生显著变化。接下来,我们将分别从 PR 作者和评审人员的角度,探讨如何利用它。
PR 作者的准备过程
在请求评审之前,作者可以利用 Cursor 提前整理评审人员可能好奇的内容。这是提高评审质量和缩短时间的重要一步。
使用 @Codebase 符号向整个项目文件提出问题:
@Codebase 请从业务角度总结此 PR 的主要更改。
并告诉我可能出现副作用的三个方面。
AI 会分析更改文件的关联性,总结核心逻辑的变化,以回答这些问题。将生成的摘要添加到 PR 描述中,评审人员在查看代码之前就能首先理解整体概况。
评审人员的探索过程
评审人员不再需要逐行阅读所有代码。相反,他们可以向 AI 提问,快速深入核心内容。
将分支拉取到本地并用 Cursor 打开后,选择感兴趣的函数或类,然后在 AI 聊天窗口中提问。
此函数的更改会影响哪些 API 端点?
或者,如果某个逻辑感觉复杂,可以请求解释。
请用中文解释这个正则表达式具体验证了什么模式。
这种方法比手动追踪代码要快得多、准确得多。评审人员可以专注于实际业务逻辑的合理性或边缘情况处理等更重要的问题,而不是停留在表面。由于问答是以实时对话的形式进行的,而非异步评论,评审可以流畅地进行。
注意事项
当然,AI 的回答并非总是完美的。有时它可能会错误地解释最新的更改,或忽略微妙的业务上下文。因此,应将 AI 生成的摘要或分析视为辅助评审的“初稿”,最终判断必须由评审人员自己做出。
AI 善于理解代码的“语法”意义和结构关系,但很难理解代码为何“必须”那样编写等“意图”。因此,提问“这个逻辑是否符合我们公司的 X 政策?”不如提问“这个函数的时间复杂度是多少?”这类基于代码本身的问题,通常能获得更好的答案。
结论
Cursor 等基于 AI 的编辑器不仅能自动完成代码,还在改变开发者之间的沟通方式。尤其在需要花费大量时间理解上下文的代码评审过程中,其效果尤为显著。我建议大家尝试利用 AI 自动化重复性分析工作,并改进工作流程,让人类能够专注于更具创造性和重要性的问题。
| 情况 | 推荐程度 | 原因 |
|---|---|---|
| 个人副业项目 | 一般 | 由于没有代码评审,效果有限。但重新理解很久以前编写的代码时可能会有用。 |
| 5 人以下初创公司 | 强烈推荐 | 了解整个代码库的人较少,一人身兼多职的情况较多,可大幅降低上下文共享成本。 |
| 拥有大量遗留系统的组织 | 强烈推荐 | 可极大地缩短理解文档不足、复杂度高的遗留代码历史和结构所需的时间。 |
| 新员工入职引导 | 极力推荐 | 帮助新员工在无需提问的情况下自主探索和学习代码库,从而缩短入职适应期。 |
#