用途:在代码库中查找重复代码、检测 DRY 违规、识别复制粘贴代码,并指导重构相似代码模式。
主要能力:结合两种工具检测不同克隆类型。PMD CPD(v7.17.0+)基于 token 做精确重复检测,可跨文件,忽略格式差异;Semgrep(v1.140.0+)基于 AST 模式匹配,支持自定义规则。资料称两者结合可比单用任一工具多发现约 3 倍违规。覆盖 Type-1 精确复制、Type-2 重命名标识符、Type-3 近似变体(部分支持),Type-4 语义克隆两者均不支持。
使用方式:先运行 PMD CPD 检测精确重复,例如 pmd cpd -d . -l python --minimum-tokens 20 -f markdown > pmd-results.md;再用 Semgrep 检测模式违规,例如 semgrep --config=clone-rules.yaml --sarif --quiet > semgrep-results.sarif;随后合并分析结果并按严重程度排序,经用户批准后重构(抽取共享函数、合并模式、验证测试)。
可接受例外:并非所有重复都需重构。资料列出几类刻意重复:按目录分代的实验(各代不可变、共享代码会破坏可复现性)、无 include 机制的 SQL 模板(用 sed 占位符替换)、协议/模式样板、测试夹具与黄金文件。发现此类重复时应报告、标记为已接受例外并说明原因,但不建议重构。项目可在 CLAUDE.md 中声明例外模式,技能会先检查再分类。
限制与排错:需预先安装 PMD CPD 与 Semgrep;大仓库扫描可能超时,可用 --exclude 缩小范围;minimum-tokens 过高会漏检、过低会误报;语言需用正确的 -l 参数;大仓库内存不足可设 PMD_JAVA_OPTS=-Xmx4g;缺少自定义规则文件需创建 clone-rules.yaml 或使用默认配置。该技能为自进化型,遇到真实可复现的问题应即时修正文件。