mcpField
F
finding-duplicate-functions

finding-duplicate-functions

github.com/obra测试与质量434637 次安装21 周前更新
代码仓库

关于 finding-duplicate-functions

用于在代码库中发现意图相同、实现不同的函数,并生成按置信度排序的报告。它通过函数提取、领域分类和 LLM 分析,辅助团队在重构前识别可合并的实现。

主要功能

  1. 01提取函数目录并排除测试文件
  2. 02按领域分类函数
  3. 03分组分析语义重复
  4. 04生成带置信度的报告
  5. 05支持人工审核与后续测试

适用场景

  1. 01重构前盘点重复的工具函数
  2. 02处理 jscpd 未发现的语义重复
  3. 03检查多人或 LLM 共同开发的代码库

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/obra/superpowers-lab --skill finding-duplicate-functions

安装后在 Claude Code 中输入/finding-duplicate-functions确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

scripts/
categorize-prompt.md
extract-functions.sh
find-duplicates-prompt.md
generate-report.sh
prepare-category-analysis.sh

详细介绍

查找意图重复的函数

概述

由 LLM 生成的代码库会不断积累语义重复:多个函数用途相同,却是独立实现的。传统的复制粘贴检测工具(jscpd)可以找到语法重复,但无法发现“意图相同、实现不同”的情况。

此技能采用两阶段方法:先进行传统提取,再通过 LLM 对意图进行聚类。

适用场景

  • 代码库经过多个贡献者(人类或 LLM)的持续开发而逐渐扩展
  • 怀疑实用函数被重复实现多次
  • 在重大重构前,寻找整合机会
  • 已运行 jscpd 并处理完语法重复之后

快速参考

阶段工具模型输出
1. 提取scripts/extract-functions.sh-catalog.json
2. 分类scripts/categorize-prompt.mdhaikucategorized.json
3. 拆分scripts/prepare-category-analysis.sh-categories/*.json
4. 检测scripts/find-duplicates-prompt.mdopusduplicates/*.json
5. 报告scripts/generate-report.sh-report.md

流程

digraph duplicate_detection {
  rankdir=TB;
  node [shape=box];

  extract [label="1. Extract function catalog\n./scripts/extract-functions.sh"];
  categorize [label="2. Categorize by domain\n(haiku subagent)"];
  split [label="3. Split into categories\n./scripts/prepare-category-analysis.sh"];
  detect [label="4. Find duplicates per category\n(opus subagent per category)"];
  report [label="5. Generate report\n./scripts/generate-report.sh"];
  review [label="6. Human review & consolidate"];

  extract -> categorize -> split -> detect -> report -> review;
}
阶段 1:提取函数目录
./scripts/extract-functions.sh src/ -o catalog.json

选项:

  • -o FILE:输出文件(默认:标准输出)
  • -c N:要捕获的上下文行数(默认:15)
  • -t GLOB:文件类型(默认:*.ts,*.tsx,*.js,*.jsx)
  • --include-tests:包含测试文件(默认排除)

默认排除测试文件(*.test.*、*.spec.*、__tests__/**),因为测试工具函数不太可能成为整合对象。

阶段 2:按领域分类

使用 scripts/categorize-prompt.md 中的提示词,调度一个 haiku 子 Agent。

将 catalog.json 的内容插入提示词模板中指定的位置。将输出保存为 categorized.json。

阶段 3:拆分为类别
./scripts/prepare-category-analysis.sh categorized.json ./categories

每个类别会生成一个 JSON 文件。只有包含 3 个或更多函数的类别才值得分析。

阶段 4:查找重复项(按类别)

对 ./categories/ 中的每个类别文件,使用 scripts/find-duplicates-prompt.md 中的提示词,调度一个 opus 子 Agent。

将每个输出保存为 ./duplicates/{category}.json。

阶段 5:生成报告
./scripts/generate-report.sh ./duplicates ./duplicates-report.md

生成一份按置信度分组、按优先级排序的 Markdown 报告。

阶段 6:人工审核

审核报告。对于置信度为 HIGH 的重复项:

  1. 确认建议保留的函数已有测试
  2. 更新调用方,使其使用保留的函数
  3. 删除重复函数
  4. 运行测试

高风险重复区域

优先从以下区域开始提取,这些区域最容易快速积累重复项:

区域常见重复项
utils/、helpers/、lib/重复实现通用实用函数
验证代码以不同方式编写的相同检查
错误格式化错误到字符串的转换
路径操作拼接、解析、规范化路径
字符串格式化大小写转换、截断、转义
日期格式化反复实现相同的格式
API 响应整形针对不同端点进行相似转换

常见错误

提取过多:重点关注导出函数和公共方法。内部辅助函数不太可能在多个文件中重复。

跳过分类步骤:直接对完整目录进行重复检测会产生大量噪声。按类别划分可以聚焦比较范围。

使用 haiku 检测重复项:Haiku 适合以较低成本进行分类,但会漏掉细微的语义重复。实际的重复分析请使用 Opus。

在没有测试的情况下进行整合:删除重复函数前,请确保保留的函数有测试覆盖已删除函数的所有用例。

评论

支持 Markdown