SuperAPI AI 工具集

duplicate-detection

测试与质量

查看项目

更新于 10-16 09:58

技能介绍

用途:这是一个代码重复检测技能,调用 jscpd 以 token 对比方式查找复制粘贴的代码块与结构相似的模式,常用于寻找重复代码、确定重构目标,或检查某个工具函数是否已在别处被内联实现。

支持的项目类型:Node.js 后端、Next.js 应用(App Router 与 Pages Router)、React 库、shadcn/ui 组件库,以及通用 TypeScript/JavaScript 项目。

主要能力与用法:通过命令 pnpm analyze:dupes 运行检测并生成 HTML 报告,报告含每个克隆组的并排差异;报告路径为 /tmp/jscpd-report/html/index.html。配置可在项目根目录创建 .jscpd.json,资料中给出的示例包含 threshold、reporters(html、console)、ignore、gitignore、minLines: 8、minTokens: 50、format(typescript、javascript)和 output 等字段。默认排除自动生成的组件库文件、tests 目录及 .test.ts/.spec.ts、构建产物(dist、build、lib)。

结果解读与限制:jscpd 报告的是基于 token 结构相似性的“克隆组”,即使变量名不同也会命中;它无法判断意图,只报告相似之处,因此每组都需人工审查。资料列举了几类常见的误报:一致的结构性模式(如 action 文件入口、组件定义)、协议/形状样板(如响应构造代码)、并行策略实现(如结构相同但面向不同场景的重试/回退逻辑)。此外,shadcn/ui 的 components/ui/ 组件本身刻意保持相似,不应急于合并;Tailwind 相关组件 JSX 结构相似属有意设计,应关注逻辑重复而非样式。处置方式包括抽取共享工具函数、创建高阶函数、通过 TypeScript 接口或构建器统一形状,或对确属有意重复的路径写入 ignore。资料还提到,jscpd 与 knip 结果结合更有价值,例如某重复块之一同时被标为未使用的导出,则意味着已有工具函数未被引用、逻辑被内联重写,修复方式是改用该工具函数而非删除。官方资料未提供其他平台、收费或价格信息。