| name | dotnet-serena-refactoring |
| category | developer-experience |
| subcategory | serena |
| description | Symbol-level refactoring with automatic reference updates using Serena MCP |
| targets | ["*"] |
| tags | ["dotnet","serena","refactoring","productivity","skill"] |
| version | 0.0.1 |
| author | dotnet-agent-harness |
| license | MIT |
| claudecode | {} |
| opencode | {} |
| codexcli | {"short-description":".NET skill guidance for dotnet-serena-refactoring"} |
| copilot | {} |
| geminicli | {} |
| antigravity | {} |
dotnet-serena-refactoring
Refactor .NET code safely and efficiently using Serena MCP's symbol-aware operations. Automatic reference updates,
precise targeting, and safe transformations.
Trigger
Use when needing to:
- Rename methods, classes, or properties
- Extract methods or classes
- Move types between files
- Change method signatures
- Update inheritance hierarchies
Why Symbol-Level Refactoring?
Traditional Approach Problems
# Manual refactoring issues:
1. Find all references manually (error-prone)
2. Edit each file individually (tedious)
3. Update imports/namespaces (easy to miss)
4. Verify no breaking changes (time-consuming)
5. Test everything (after the fact)
Serena Advantages
# Symbol-aware benefits:
1. Automatic reference discovery (complete)
2. Single precise edit (efficient)
3. Namespace handling (automatic)
4. Compile-time safety (pre-validated)
5. Integrated verification (built-in)
Core Refactoring Patterns
Pattern 1: Rename Symbol
Scenario: Rename a method
# Step 1: Find all references
serena_find_referencing_symbols: "OrderService/ProcessOrder"
# Step 2: Replace method body (includes signature)
serena_replace_symbol_body: "OrderService/ProcessOrder"
New body:
public async Task ProcessOrderAsync(Order order)
{
// ... implementation
}
# Step 3: References are automatically tracked
# Step 4: Verify all call sites updated
Key Point: References are found symbolically, not textually. No regex needed.
Pattern 2: Extract Method
Scenario: Extract logic into new method
# Step 1: Identify code to extract
Read: "src/Services/OrderService.cs" (lines 45-60)
# Step 2: Find insertion point
serena_get_symbols_overview: "src/Services/OrderService.cs"
# Locate method OrderService/ProcessOrder
# Step 3: Insert new method after existing
serena_insert_after_symbol: "OrderService/ProcessOrder"
New method:
private decimal CalculateDiscount(Order order)
{
// extracted logic
}
# Step 4: Replace original with call
serena_replace_content: "OrderService/ProcessOrder"
Pattern: "// lines 45-60"
Replacement: "CalculateDiscount(order)"
Pattern 3: Move Type to New File
Scenario: Move class to separate file
# Step 1: Get symbol info
serena_find_symbol: "OrderService"
# Step 2: Create new file
Write: src/Services/OrderService.cs
Content: (extracted class)
# Step 3: Remove from original
serena_replace_content: "src/Services/OrderProcessing.cs"
Pattern: "class OrderService.*?^}"
Replacement: ""
# Step 4: Verify namespace imports
serena_get_symbols_overview: "src/Services/OrderService.cs"