Detect and refactor code duplication with PMD CPD. TRIGGERS - code clones, DRY violations, duplicate code.
View on GitHubFebruary 5, 2026
Select agents to install to:
npx add-skill https://github.com/terrylica/cc-skills/blob/main/plugins/quality-tools/skills/code-clone-assistant/SKILL.md -a claude-code --skill code-clone-assistantInstallation paths:
.claude/skills/code-clone-assistant/# Code Clone Assistant Detect code clones and guide refactoring using PMD CPD (exact duplicates) + Semgrep (patterns). ## Tools - **PMD CPD v7.17.0+**: Exact duplicate detection - **Semgrep v1.140.0+**: Pattern-based detection **Tested**: October 2025 - 30 violations detected across 3 sample files **Coverage**: ~3x more violations than using either tool alone --- ## When to Use This Skill Use this skill when: - Finding duplicate code in a codebase - Detecting DRY violations - Refactoring similar code patterns - Identifying copy-paste code --- ## Why Two Tools? PMD CPD and Semgrep detect different clone types: | Aspect | PMD CPD | Semgrep | | ------------ | -------------------------------- | -------------------------------- | | **Detects** | Exact copy-paste duplicates | Similar patterns with variations | | **Scope** | Across files ✅ | Within/across files (Pro only) | | **Matching** | Token-based (ignores formatting) | Pattern-based (AST matching) | | **Rules** | ❌ No custom rules | ✅ Custom rules | **Result**: Using both finds ~3x more DRY violations. ### Clone Types | Type | Description | PMD CPD | Semgrep | | ------ | ------------------------------- | --------------- | ----------- | | Type-1 | Exact copies | ✅ Default | ✅ | | Type-2 | Renamed identifiers | ✅ `--ignore-*` | ✅ | | Type-3 | Near-miss with variations | ⚠️ Partial | ✅ Patterns | | Type-4 | Semantic clones (same behavior) | ❌ | ❌ | --- ## Quick Start Workflow ```bash # Step 1: Detect exact duplicates (PMD CPD) pmd cpd -d . -l python --minimum-tokens 20 -f markdown > pmd-results.md # Step 2: Detect pattern violations (Semgrep) semgrep --config=clone-rules.yaml --sarif --quiet > semgrep-results.sarif # Step 3: Analyze combined results (Claude Code