distributions/codex/skills/code-refactoring-patterns/SKILL.md
Systematic approach to refactoring code for improved maintainability, performance, and clarity while preserving functionality
npx skillsauth add a-organvm/a-i--skills code-refactoring-patternsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A comprehensive guide to refactoring code systematically while maintaining functionality and improving quality.
Smell: Functions over 20-30 lines
Refactor: Extract Method
// Before
function processOrder(order: Order) {
// Validate order (10 lines)
// Calculate totals (15 lines)
// Apply discounts (12 lines)
// Send confirmation (8 lines)
}
// After
function processOrder(order: Order) {
validateOrder(order);
const totals = calculateTotals(order);
const finalPrice = applyDiscounts(totals, order);
sendConfirmation(order, finalPrice);
}
Smell: Same code in multiple places
Refactor: Extract Function/Class
// Before
function formatUserName(user: User) {
return `${user.firstName} ${user.lastName}`;
}
function formatAuthorName(author: Author) {
return `${author.firstName} ${author.lastName}`;
}
// After
function formatFullName(person: { firstName: string; lastName: string }) {
return `${person.firstName} ${person.lastName}`;
}
Smell: Functions with 4+ parameters
Refactor: Parameter Object
// Before
function createUser(
firstName: string,
lastName: string,
email: string,
phone: string,
address: string
) { }
// After
interface UserDetails {
firstName: string;
lastName: string;
email: string;
phone: string;
address: string;
}
function createUser(details: UserDetails) { }
Smell: Classes with many responsibilities
Refactor: Extract Class
// Before
class UserManager {
createUser() { }
deleteUser() { }
sendEmail() { }
generateReport() { }
logActivity() { }
}
// After
class UserService {
createUser() { }
deleteUser() { }
}
class EmailService {
sendEmail() { }
}
class ReportService {
generateReport() { }
}
Smell: Method uses data from another class more than its own
Refactor: Move Method
// Before
class Order {
calculate() {
return this.customer.getDiscount() * this.amount;
}
}
// After
class Customer {
calculateOrderAmount(order: Order) {
return this.getDiscount() * order.amount;
}
}
Break large functions into smaller, named pieces:
// Before
function renderUser(user: User) {
console.log(`<div>`);
console.log(` <h1>${user.firstName} ${user.lastName}</h1>`);
console.log(` <p>${user.email}</p>`);
console.log(`</div>`);
}
// After
function renderUser(user: User) {
console.log(`<div>`);
console.log(` ${renderUserHeader(user)}`);
console.log(` ${renderUserEmail(user)}`);
console.log(`</div>`);
}
function renderUserHeader(user: User) {
return `<h1>${user.firstName} ${user.lastName}</h1>`;
}
function renderUserEmail(user: User) {
return `<p>${user.email}</p>`;
}
Use descriptive names:
// Before
function calc(a: number, b: number) {
return a * b * 0.08;
}
// After
function calculateSalesTax(amount: number, quantity: number) {
const TAX_RATE = 0.08;
return amount * quantity * TAX_RATE;
}
Make complex expressions clear:
// Before
if (platform.toUpperCase().includes('MAC') &&
browser.toUpperCase().includes('IE') &&
wasInitialized() && resized) {
// do something
}
// After
const isMacOS = platform.toUpperCase().includes('MAC');
const isIE = browser.toUpperCase().includes('IE');
const wasResized = wasInitialized() && resized;
if (isMacOS && isIE && wasResized) {
// do something
}
Use inheritance/interfaces instead of switch/if-else chains:
// Before
function getSpeed(vehicle: Vehicle) {
switch (vehicle.type) {
case 'car': return vehicle.speed * 1.0;
case 'bike': return vehicle.speed * 0.8;
case 'truck': return vehicle.speed * 0.6;
}
}
// After
interface Vehicle {
getSpeed(): number;
}
class Car implements Vehicle {
getSpeed() { return this.speed * 1.0; }
}
class Bike implements Vehicle {
getSpeed() { return this.speed * 0.8; }
}
Use early returns and guard clauses:
// Before
function processPayment(payment: Payment) {
if (payment.isValid()) {
if (payment.amount > 0) {
if (payment.method === 'card') {
// process card payment
} else {
// invalid method
}
} else {
// invalid amount
}
} else {
// invalid payment
}
}
// After
function processPayment(payment: Payment) {
if (!payment.isValid()) {
throw new Error('Invalid payment');
}
if (payment.amount <= 0) {
throw new Error('Invalid amount');
}
if (payment.method !== 'card') {
throw new Error('Invalid method');
}
// process card payment
}
# Read the code thoroughly
cat src/feature.ts
# Check tests
cat src/feature.test.ts
# Find all usages
grep -r "functionName" src/
# Run existing tests
npm test src/feature.test.ts
# Add missing tests if needed
# Make one refactoring change
# Run tests
npm test
# Commit if tests pass
git add . && git commit -m "refactor: extract method calculateTotal"
# Repeat for next refactoring
# Run full test suite
npm test
# Check type errors
npx tsc --noEmit
# Verify lint
npm run lint
# Compare before/after if performance-critical
npm run benchmark
Before refactoring:
During refactoring:
After refactoring:
Complements:
❌ Don't:
✅ Do:
development
Comprehensive document creation, editing, and analysis with support for tracked changes, comments, formatting preservation, and text extraction. When Claude needs to work with professional documents (.docx files) for: (1) Creating new documents, (2) Modifying or editing content, (3) Working with tracked changes, (4) Adding comments, or any other document tasks
development
Conducts a full automated autopsy of the current workspace directory to map files, identifies structural issues, proposes a restructuring plan (the signal), and establishes unified governance using templates. Use this skill when a user asks to map, restructure, reorganize, or apply new governance to an existing messy repository.
testing
Design engaging workshops, conference talks, and educational presentations. Covers learning objectives, activity design, slide craft, and facilitation techniques. Triggers on workshop design, presentation prep, talk structure, or training session requests.
development
Designs reliable webhook systems with proper delivery guarantees, retry logic, signature verification, and idempotent processing for event-driven integrations.