name: dry-refactor description: Use when user asks to "remove duplicates", "DRY up code", "extract common logic", "consolidate repeated code", or when /dry scan finds duplicates. Provides language-specific refactoring guidance. user-invocable: false
DRY Refactoring Guide
Help users eliminate code duplication by extracting shared logic into reusable modules.
When This Applies
- User mentions "duplicates", "DRY", "repeated code", "copy-paste"
/bluera-base:dry scanfound duplicates that need refactoring- Code review identified similar patterns across files
When Duplication is Acceptable
Not all duplication is bad. Keep duplicates when:
- Test code: Explicit test cases can repeat for clarity
- Generated code: Don't DRY generated files
- Incidental similarity: Coincidentally similar code that may diverge
- Coupling cost: Extraction would create tight coupling between unrelated modules
Refactoring Workflow
1. Analyze the Duplicates
# Run scan if not already done
/bluera-base:dry scan
# Review the report
/bluera-base:dry report
2. Categorize Each Duplicate
| Category | Action |
|---|---|
| Exact copy | Extract immediately |
| Near-duplicate | Parameterize differences, then extract |
| Structural | Consider codegen/templates |
| Coincidental | Leave as-is, document why |
3. Choose Extraction Target
| Scope | Target |
|---|---|
| Same file | Local function/method |
| Same module/package | Shared utility file |
| Across modules | New shared module |
| Across repos | Shared library/package |
4. Execute Extraction
- Create the shared abstraction
- Move one instance, verify tests pass
- Replace remaining instances
- Update imports/exports
- Run tests after each replacement
5. Validate
- All tests pass
- No circular dependencies introduced
- Public API unchanged (if applicable)
- Code is actually simpler (not over-abstracted)
Anti-patterns to Avoid
- Wrong abstraction: Forcing unrelated code together
- Over-parameterization: Too many config options
- Premature extraction: Extracting before patterns stabilize
- Leaky abstraction: Exposing implementation details
Language-Specific Patterns
See skills/dry-refactor/references/patterns.md for detailed examples:
| Language | Primary Pattern |
|---|---|
| JS/TS | Module export, barrel index |
| Python | Module with init.py |
| Rust | Submodule with pub use |
| Go | Same-package separate file |
Report Integration
When /bluera-base:dry scan identifies duplicates:
- Review the report at
.bluera/bluera-base/state/dry-report.md - Start with highest-impact duplicates (most tokens/instances)
- Use suggested extraction targets from the report
- Re-run
/bluera-base:dry scanafter refactoring to verify reduction