Skip to main content

clean-code

Refactoring patterns, SOLID principles, code smell detection, and pragmatic coding standards.

Informations de source

Dépôt
ThinkfleetAI/thinkfleet-engine
Dernière activité de la source
1 février 2026 à 16:21
Langue détectée de SKILL.md
anglais
Étoiles
0
Forks
0

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
clean-code
description
Refactoring patterns, SOLID principles, code smell detection, and pragmatic coding standards.
metadata
{"thinkfleetbot":{"emoji":"✨","requires":{"anyBins":"[Truncated]"}}}
# Clean Code Pragmatic refactoring patterns and coding standards. Not dogma — practical improvements. ## Code Smells to Fix ### Long functions (>30 lines) Extract into named functions. The name documents intent better than a comment. ### Deep nesting (>3 levels) Use early returns, guard clauses, or extract helper functions. ```javascript // Bad function process(user) { if (user) { if (user.active) { if (user.verified) { // actual logic } } } } // Good function process(user) { if (!user) return; if (!user.active) return; if (!user.verified) return; // actual logic } ``` ### Magic numbers/strings Extract to named constants. ### Duplicate code If you copy-paste 3+ times, extract. Two occurrences are often fine. ### Dead code Delete it. Git has history if you need it back. ## SOLID Principles (Practical Version) - **Single Responsibility** — A function does one thing. A module handles one concern. If you can't name it simply, it does too much. - **Open/Closed** — Extend with new code, don't modify working code. Use composition, interfaces, or strategy patterns. - **Liskov Substitution** — Subtypes must work where parent types are expected. Don't override methods to throw "not implemented." - **Interface Segregation** — Don't force clients to depend on methods they don't use. Smaller interfaces > fat interfaces. - **Dependency Inversion** — Depend on abstractions, not concrete implementations. Pass dependencies in, don't create them inside. ## Refactoring Techniques ### Extract Function ```bash # Find long functions grep -rn "function\|=>\|def " src/ | awk -F: '{print $1}' | sort | uniq -c | sort -rn | head -10 ``` ### Rename for clarity ```bash # Find vague variable names grep -rn "\bdata\b\|\btemp\b\|\bresult\b\|\binfo\b\|\bstuff\b" src/ --include="*.ts" --include="*.py" | head -20 ``` ### Remove dead code ```bash # Find unused exports (TypeScript) npx ts-unused-exports tsconfig.json # Find unused functions (crude) grep -rn "function " src/ --include="*.ts" -l | while read f; do grep -oP "function \K\w+" "$f" | while read fn; do count=$(grep -rn "\b$fn\b" src/ --include="*.ts" | wc -l) [ "$count" -le 1 ] && echo "Possibly unused: $fn in $f" done done ``` ### Simplify conditionals Replace nested if/else with: - Early returns - Lookup tables/maps - Polymorphism (if the condition is on type) ## Naming Conventions - Functions: verb + noun (`getUser`, `validateEmail`, `parseResponse`) - Booleans: `is`/`has`/`should` prefix (`isActive`, `hasPermission`) - Collections: plural (`users`, `orderItems`) - Avoid: `handle`, `process`, `manage` without specificity — they say nothing ## Notes - Refactor in small, tested steps. Don't rewrite a whole file in one commit. - Pragmatism over purity. Three similar lines are better than a premature abstraction. - The best code needs no comments. But when logic isn't obvious, explain *why*, not *what*. - Run tests after each refactoring step. If tests break, you changed behavior, not just structure.
Voir sur GitHub