用途
Review Duplication 是一个在代码审查期间使用的技能,用于主动调查代码库,识别重复的逻辑、重复造出的工具函数,以及错失复用既有模式的机会。通过执行该工作流,可以确保新代码与现有项目架构无缝集成。
主要能力
该技能围绕一套结构化的调查流程展开,包含以下步骤:
1. 提取核心逻辑
分析新代码,识别其中引入的核心算法、工具函数、通用数据结构或 UI 组件。要透过具体业务逻辑看到底层机制。
2. 推测既有位置并追踪依赖
思考这类代码如果已存在于项目中会放在哪里,并提供从仓库根目录出发的绝对路径以消除歧义。资料中给出的参考位置包括:
- 工具函数:packages/core/src/utils/、packages/cli/src/utils/
- UI 组件:packages/cli/src/ui/components/、packages/cli/src/ui/
- 服务:packages/core/src/services/、packages/cli/src/services/
- 配置:packages/core/src/config/、packages/cli/src/config/
- 核心逻辑:若功能并非 React UI 专属,应指向 packages/core/
追踪第三方依赖:如果 PR 引入了新的工具库导入(例如 lodash.merge、date-fns),要追踪项目当前在何处、如何使用该库,通常已存在封装或共享工具。
检查包文件:在标记某个复杂算法为自定义实现之前,先检查 package.json,看是否已安装提供该功能的标准库(如 lodash 或 uuid)。
3. 调查代码库(子代理委派)
将代码库调查的重活委派给专门的子代理。它们经过优化,可执行深度搜索和语义映射,而不会使会话历史膨胀。
为确保审查全面,必须为子代理制定高度具体的目标,并提供在第 1 步中发现的“线索”。
- Codebase Investigator:作为主要研究者。委派时,制定目标,提出针对代码库的具体调查问题,并明确包含以下搜索向量:
- 结构相似性:询问现有代码是否使用相同的底层 API(例如“是否有现有代码出于类似目的使用 Intl.DateTimeFormat 或 setTimeout?”)。
- 命名约定:询问是否存在命名模式相似的现有符号(例如“是否存在命名模式类似 Format 或 Debounce 的现有符号?”)。
- 注释与文档:询问 PR 注释或 JSDoc 中的关键词是否在其他地方描述过类似行为。
- 架构契合度:询问这类逻辑当前集中在哪里(例如“集中式日期格式化逻辑位于何处?”)。
- 重构指导:关键是要让子代理说明,如何重构新代码以使用它找到的任何现有逻辑。
- Generalist Agent:用于详细的、多轮次的比较。例如:“审查 PR 中 MyNewComponent 的实现,并将其与 packages/ui/src 中的所有组件进行语义比较。是否有可扩展或可替代使用的现有组件?”
保留简单搜索的快速路径:对于极其简单、无歧义的检查(例如“package.json 是否包含 lodash?”),直接搜索以节省时间。对于任何开放式的“调查”,默认使用委派。
4. 评估最佳实践
检查新代码是否符合项目既定约定:
- 错误处理:是否使用项目标准的错误类或日志机制?
- 状态管理:是否绕过了既有的 store 或 context?
- 样式:是否硬编码颜色或间距,而非使用主题变量?
如果 PR 引入了新模式,将其与文档化标准进行比较,并明确确认是否本应使用现有项目模式。
5. 形成建设性反馈
如果发现 PR 重复了现有功能或忽略了最佳实践:
- 提供清晰的审查评论。
- 指明来源:明确提及应复用的绝对路径或项目相对路径,以及具体符号(函数、组件、类)。
- 实现指导:提供简短代码片段或清晰说明,展示如何集成现有代码以满足任务需求。
- 说明价值:简要解释复用现有代码的好处(例如可维护性、一致性、内置边界情况处理)。
示例评论:
“看起来这个 PR 引入了一个新的 formatDate 工具函数。我们在 src/utils/dateHelpers.ts 中已经有一个健壮且经过测试的 formatDate 函数。
你可以像这样导入它来替换你的实现:
import { formatDate } from '../utils/dateHelpers';
// 然后在这里使用: const displayDate = formatDate(userDate, 'MMM Do, YYYY');
复用它可以确保日期格式化与应用程序其余部分保持一致,并正确处理时区转换。”
使用方式
在代码审查过程中,在最终确定审查意见之前执行上述工作流。将代码库调查工作委派给 codebase_investigator 或 generalist 子代理,并为它们提供具体的调查目标与搜索线索。对于简单无歧义的检查可直接搜索。
适用场景
- 代码审查中排查重复实现的功能。
- 识别重复造轮子的工具函数或组件。
- 发现未复用既有模式、封装或共享工具的情况。
- 确保新代码符合项目架构与最佳实践。
限制
资料中未提供关于该技能的具体平台限制、收费、价格或效果保证等信息。