OverviewHistoryStatsSecurity
npx skills add ...
Documentation
SKILL.md
npx skills add ertugrul-dmr/clean-code-skills --skill clean-general
Use when writing, fixing, editing, or reviewing TypeScript code quality. Enforces Clean Code's core principles—DRY, single responsibility, clear intent, no magic numbers, proper abstractions.
npx skills add ertugrul-dmr/clean-code-skills --skill clean-general
G5: DRY (Don't Repeat Yourself)
Every piece of knowledge has one authoritative representation.
G16: No Obscured Intent
Don't be clever. Be clear.
G23: Prefer Polymorphism to If/Else
G25: Replace Magic Numbers with Named Constants
G30: Functions Should Do One Thing
If you can extract another function, your function does more than one thing.
G36: Law of Demeter (Avoid Train Wrecks)
When reviewing AI-generated code, verify:
// Bad - what does this do?
return ((x & 0x0f) << 4) | (y & 0x0f);
// Good - obvious intent
return packCoordinates(x, y);// Bad - will grow forever
function calculatePay(employee: {
type: "SALARIED" | "HOURLY" | "COMMISSIONED";
salary?: number;
hours?: number;
rate?: number;
base?: number;
commission?: number;
}): number {
if (employee.type === "SALARIED") {
return employee.salary ?? 0;
} else if (employee.type === "HOURLY") {
return (employee.hours ?? 0) * (employee.rate ?? 0);
} else if (employee.type === "COMMISSIONED") {
return (employee.base ?? 0) + (employee.commission ?? 0);
}
return 0;
}
// Good - open/closed principle
interface Employee {
calculatePay(): number;
}
class SalariedEmployee implements Employee {
constructor(private readonly salary: number) {}
calculatePay(): number {
return this.salary;
}
}
class HourlyEmployee implements Employee {
constructor(
private readonly hours: number,
private readonly rate: number,
) {}
calculatePay(): number {
return this.hours * this.rate;
}
}
class CommissionedEmployee implements Employee {
constructor(
private readonly base: number,
private readonly commission: number,
) {}
calculatePay(): number {
return this.base + this.commission;
}
}// Bad
if (elapsedTime > 86400) {
// ...
}
// Good
const SECONDS_PER_DAY = 86400;
if (elapsedTime > SECONDS_PER_DAY) {
// ...
}// Bad - reaching through multiple objects
const outputDir = context.options.scratchDir.absolutePath;
// Good - one dot
const outputDir = context.getScratchDir();