SuperAPI AI 工具集

review-duplication

编程与开发

查看项目

更新于 10-15 14:37

技能介绍

用途

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 子代理,并为它们提供具体的调查目标与搜索线索。对于简单无歧义的检查可直接搜索。

适用场景

  • 代码审查中排查重复实现的功能。
  • 识别重复造轮子的工具函数或组件。
  • 发现未复用既有模式、封装或共享工具的情况。
  • 确保新代码符合项目架构与最佳实践。

限制

资料中未提供关于该技能的具体平台限制、收费、价格或效果保证等信息。