返回 Skill 列表
extension
分类: 开发与工程无需 API Key

dry-refactor

当用户要求“删除重复项”、“使代码更DRY(Don't Repeat Yourself的缩写,意为避免重复)”、“提取公共逻辑”、“合并重复代码”,或者/dry扫描发现重复时使用。提供特定语言的重构指导。

person作者: jakexiaohubgithub

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

| 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

  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:

| 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:

  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