关于 review-duplication
review-duplication 是一套面向代码审查的调查流程,用于发现重复逻辑、已有工具的重新实现及未复用的项目模式。它指导审查者追踪代码库结构与依赖,并给出可落实的复用建议。
主要功能
- 01提取新增代码的核心逻辑
- 02追踪可能存在的实现与依赖
- 03委派子 Agent 调查代码库
- 04检查项目惯例与最佳实践
- 05提供带路径和方案的反馈
适用场景
- 01审查 PR 是否重复现有功能
- 02查找可复用的工具或 UI 组件
- 03检查新增依赖是否已有封装
- 04为重构建议提供具体依据
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ google-gemini/ gemini-cli --skill review-duplication安装后在 Claude Code 中输入/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. 调查代码库(委派给子 Agent)
将代码库调查中的繁重工作委派给专门的子 Agent。它们擅长执行深入搜索和语义映射,同时避免会话历史过于庞杂。
为确保审查全面,必须为子 Agent 制定高度具体的目标,并提供你在第 1 步中发现的“线索”。
- 代码库调查员: 将
codebase_investigator用作主要调查者。委派任务时,应提出具体的代码库调查问题,并明确包含以下搜索方向:- 结构相似性: 询问现有代码是否使用相同的底层 API(例如:“是否有现有代码使用
Intl.DateTimeFormat或setTimeout实现类似功能?”)。 - 命名约定: 询问是否存在命名模式相似的符号(例如:“是否存在命名模式类似
*Format*或*Debounce*的符号?”)。 - 注释和文档: 询问 PR 注释或 JSDoc 中的关键词是否也用于描述其他地方的类似行为。
- 架构适配: 询问此类逻辑目前集中在哪里(例如:“集中处理日期格式化逻辑的位置在哪里?”)。
- 重构建议: 关键是请子 Agent 说明如何重构新代码,以便使用它找到的任何现有逻辑。
- 结构相似性: 询问现有代码是否使用相同的底层 API(例如:“是否有现有代码使用
- 通用 Agent: 使用
generalist进行需要多轮深入对比的详细分析。例如:“审查 PR 中MyNewComponent的实现,并与packages/ui/src中的所有组件进行语义对比。是否有现有组件可以扩展或复用?” - 保留简单搜索的快速路径: 对于极其简单且明确的检查(例如:“
package.json是否包含lodash?”),直接搜索以节省时间。对于任何开放式“调查”,默认委派。
4. 评估最佳实践
检查新代码是否符合项目既定规范。
- 错误处理: 是否使用项目标准的错误类或日志机制?
- 状态管理: 是否绕过了既定的存储或上下文?
- 样式: 是否硬编码了颜色或间距,而没有使用主题变量? 如果 PR 引入了新模式,请将其与文档中记录的标准进行比较,并明确确认是否应该改用项目中已有的模式。
5. 提出建设性反馈
如果发现 PR 重复了现有功能或忽略了最佳实践:
- 提供清晰的审查意见。
- 指出来源: 明确提及应复用的代码所在的绝对路径或项目相对路径,以及具体符号(函数、组件、类)。
- 提供实现指导: 提供简短的代码片段或清晰的说明,展示如何集成现有代码以满足任务要求。
- 说明价值: 简要说明复用现有代码的好处(例如,可维护性、一致性、内置的边界情况处理)。
示例意见:
“这个 PR 似乎引入了新的
formatDate工具函数。我们已经在src/utils/dateHelpers.ts中有一个经过充分测试的formatDate函数。你可以像这样导入它来替换当前实现:
import { formatDate } from '../utils/dateHelpers'; // 然后在这里使用: const displayDate = formatDate(userDate, 'MMM Do, YYYY');复用该函数可以确保日期格式与应用的其他部分保持一致,并正确处理时区转换。”