重复代码检测Skill
适用场景
代码质量度量环节,检测项目内重复代码块,统计重复率,按类型给出抽取公共方法/模块或保留的处置建议。
执行步骤
- 选工具:优先运行现有工具(jscpd、SonarQube duplication、PMD CPD);无工具时人工比对(同文件相邻重复、跨文件相似结构逐段比对)。
- 应用阈值(默认值,可按项目调整)筛选重复块。
- 输出重复块清单:双位置证据、行数、相似度。
- 按重复类型给处置建议,并统计重复率。
阈值与判定(默认)
| 规模 |
判定 |
| <10 行且仅 1 处重复 |
可接受,不处理 |
| 10-50 行或 2-3 处重复 |
建议抽取公共方法/基类 |
| >50 行或 >3 处重复 |
必须抽取公共模块/工具类/共享库 |
| 仅注释、字符串、生成代码相似 |
不计入重复,标记忽略 |
处置建议(按重复类型)
- 抽取公共方法:功能完全一致的代码块,抽到工具类/基类,调用方替换。
- 模板方法/策略模式:结构相似、局部步骤不同的代码块。
- 抽公共模块:跨服务/跨仓库重复,抽共享库或 SDK 统一维护。
- 保留不处理:重复内容为配置、协议生成代码、遗留代码冻结区,注明理由。
规范要点
- 每处重复必须给出双位置证据:文件路径 + 行号 + 重复行数,禁止「感觉这段代码哪见过」式结论。
- 相似度判定必须注明口径:工具名 + 参数,或人工比对的比对标准。
- 与全局规范一致:重复逻辑必须抽取公共方法,禁止复制粘贴式开发。
- 建议抽取时必须说明:目标落点(哪个工具类/基类)+ 调用方替换范围。
输出模板
## 重复代码检测报告
| # | 重复块描述 | 位置1(文件:行) | 位置2(文件:行) | 行数 | 相似度 | 处置建议 |
## 重复率统计(重复行数 / 总行数,工具与参数)
## 忽略清单(注释/生成代码,附理由)
自检清单
1---2name: skill-643description: Skill4---5# 重复代码检测Skill67## 适用场景8代码质量度量环节,检测项目内重复代码块,统计重复率,按类型给出抽取公共方法/模块或保留的处置建议。910## 执行步骤111. 选工具:优先运行现有工具(jscpd、SonarQube duplication、PMD CPD);无工具时人工比对(同文件相邻重复、跨文件相似结构逐段比对)。122. 应用阈值(默认值,可按项目调整)筛选重复块。133. 输出重复块清单:双位置证据、行数、相似度。144. 按重复类型给处置建议,并统计重复率。1516## 阈值与判定(默认)17| 规模 | 判定 |18|---|---|19| <10 行且仅 1 处重复 | 可接受,不处理 |20| 10-50 行或 2-3 处重复 | 建议抽取公共方法/基类 |21| >50 行或 >3 处重复 | 必须抽取公共模块/工具类/共享库 |22| 仅注释、字符串、生成代码相似 | 不计入重复,标记忽略 |2324## 处置建议(按重复类型)25- 抽取公共方法:功能完全一致的代码块,抽到工具类/基类,调用方替换。26- 模板方法/策略模式:结构相似、局部步骤不同的代码块。27- 抽公共模块:跨服务/跨仓库重复,抽共享库或 SDK 统一维护。28- 保留不处理:重复内容为配置、协议生成代码、遗留代码冻结区,注明理由。2930## 规范要点31- 每处重复必须给出双位置证据:文件路径 + 行号 + 重复行数,禁止「感觉这段代码哪见过」式结论。32- 相似度判定必须注明口径:工具名 + 参数,或人工比对的比对标准。33- 与全局规范一致:重复逻辑必须抽取公共方法,禁止复制粘贴式开发。34- 建议抽取时必须说明:目标落点(哪个工具类/基类)+ 调用方替换范围。3536## 输出模板37```38## 重复代码检测报告39| # | 重复块描述 | 位置1(文件:行) | 位置2(文件:行) | 行数 | 相似度 | 处置建议 |40## 重复率统计(重复行数 / 总行数,工具与参数)41## 忽略清单(注释/生成代码,附理由)42```4344## 自检清单45- [ ] 每处重复有双位置证据46- [ ] 阈值与相似度口径已说明47- [ ] 每处重复有处置建议(含「不处理」的理由)48- [ ] 重复率已统计