refactoring-suggester
Suggest refactoring opportunities to improve code structure and maintainability. Use when improving code design or reducing complexity.
When & Why to Use This Skill
This Claude skill serves as an automated code quality consultant that identifies refactoring opportunities to improve software structure and maintainability. By analyzing code for complexity and anti-patterns, it provides actionable suggestions—such as extracting methods, simplifying conditionals, and removing duplication—to help developers reduce technical debt and adhere to clean code principles.
Use Cases
- Legacy Code Modernization: Identifying and breaking down monolithic functions into smaller, more manageable, and testable modules to improve system agility.
- Logic Simplification: Transforming deeply nested if-else statements into clean guard clauses or efficient lookup tables to enhance readability and reduce cognitive load.
- Technical Debt Reduction: Scanning the codebase for 'magic numbers' and repetitive logic to suggest constants and reusable utility functions.
- Code Review Enhancement: Providing instant feedback on naming conventions and design pattern applications during the development phase to ensure high-quality commits.
| name | refactoring-suggester |
|---|---|
| description | Suggest refactoring opportunities to improve code structure and maintainability. Use when improving code design or reducing complexity. |
Refactoring Suggester Skill
コードのリファクタリング提案を行うスキルです。
主な機能
- Extract Method: 長いメソッドを分割
- Rename: 分かりやすい命名に変更
- Remove Duplication: 重複排除
- Simplify Conditionals: 条件式の簡略化
- Design Patterns: パターン適用提案
リファクタリング例
Extract Method
// Before
function processOrder(order) {
// 検証
if (!order.items || order.items.length === 0) {
throw new Error('No items');
}
if (!order.customer) {
throw new Error('No customer');
}
// 価格計算
let total = 0;
for (const item of order.items) {
total += item.price * item.quantity;
}
const tax = total * 0.1;
total += tax;
// 保存
const saved = db.orders.save(order);
return saved;
}
// After: Extract Method
function processOrder(order) {
validateOrder(order);
const total = calculateTotal(order);
return saveOrder(order, total);
}
function validateOrder(order) {
if (!order.items || order.items.length === 0) {
throw new Error('No items');
}
if (!order.customer) {
throw new Error('No customer');
}
}
function calculateTotal(order) {
const subtotal = order.items.reduce(
(sum, item) => sum + item.price * item.quantity,
0
);
return subtotal * 1.1; // +10% tax
}
function saveOrder(order, total) {
order.total = total;
return db.orders.save(order);
}
Replace Magic Numbers
# Before
def calculate_price(item):
if item.category == 'premium':
return item.price * 0.9
elif item.category == 'vip':
return item.price * 0.8
return item.price * 1.0
# After
DISCOUNT_RATES = {
'premium': 0.9,
'vip': 0.8,
'regular': 1.0
}
def calculate_price(item):
rate = DISCOUNT_RATES.get(item.category, 1.0)
return item.price * rate
Simplify Conditionals
// Before
function getShippingCost(weight: number, distance: number): number {
if (weight < 5) {
if (distance < 100) {
return 10;
} else {
return 15;
}
} else {
if (distance < 100) {
return 20;
} else {
return 25;
}
}
}
// After: Guard Clauses
function getShippingCost(weight: number, distance: number): number {
const isLight = weight < 5;
const isNear = distance < 100;
if (isLight && isNear) return 10;
if (isLight && !isNear) return 15;
if (!isLight && isNear) return 20;
return 25;
}
// Better: Lookup table
const SHIPPING_RATES = {
'light_near': 10,
'light_far': 15,
'heavy_near': 20,
'heavy_far': 25
};
function getShippingCost(weight: number, distance: number): number {
const weightKey = weight < 5 ? 'light' : 'heavy';
const distanceKey = distance < 100 ? 'near' : 'far';
const key = `${weightKey}_${distanceKey}`;
return SHIPPING_RATES[key];
}
バージョン情報
- Version: 1.0.0