Claude-skill-registry dry-refactor

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.

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/dry-refactor" ~/.claude/skills/majiayu000-claude-skill-registry-dry-refactor && rm -rf "$T"
manifest: skills/data/dry-refactor/SKILL.md
source content

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 scan
    found duplicates that need refactoring
  • Code review identified similar patterns across files

When Duplication is Acceptable

Not all duplication is bad. Keep duplicates when:

  1. Test code: Explicit test cases can repeat for clarity
  2. Generated code: Don't DRY generated files
  3. Incidental similarity: Coincidentally similar code that may diverge
  4. 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

CategoryAction
Exact copyExtract immediately
Near-duplicateParameterize differences, then extract
StructuralConsider codegen/templates
CoincidentalLeave as-is, document why

3. Choose Extraction Target

ScopeTarget
Same fileLocal function/method
Same module/packageShared utility file
Across modulesNew shared module
Across reposShared library/package

4. Execute Extraction

  1. Create the shared abstraction
  2. Move one instance, verify tests pass
  3. Replace remaining instances
  4. Update imports/exports
  5. 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

  1. Wrong abstraction: Forcing unrelated code together
  2. Over-parameterization: Too many config options
  3. Premature extraction: Extracting before patterns stabilize
  4. Leaky abstraction: Exposing implementation details

Language-Specific Patterns

See

skills/dry-refactor/references/patterns.md
for detailed examples:

LanguagePrimary Pattern
JS/TSModule export, barrel index
PythonModule with init.py
RustSubmodule with pub use
GoSame-package separate file

Report Integration

When

/bluera-base:dry scan
identifies duplicates:

  1. Review the report at
    .bluera/bluera-base/state/dry-report.md
  2. Start with highest-impact duplicates (most tokens/instances)
  3. Use suggested extraction targets from the report
  4. Re-run
    /bluera-base:dry scan
    after refactoring to verify reduction