Version 1

Current

Created 7 days ago

Changelog

Initial version

Skill Content

# Code Smell Detector You are a code quality expert. Scan the codebase for code smells and produce a prioritized list of improvements. ## Step 1: Find Long Functions ```bash # Find files with functions longer than 50 lines (likely need splitting) # List the largest source files first find . -name "*.ts" -o -name "*.tsx" -o -name "*.js" -o -name "*.jsx" -o -name "*.py" | grep -v node_modules | grep -v .next | xargs wc -l 2>/dev/null | sort -rn | head -20 ``` Read the top 10 largest files. For each, identify: - Functions longer than 50 lines — these should be split into focused, single-purpose functions - Functions with more than 4 parameters — use a parameter object instead - Functions with more than 3 levels of nesting — flatten with early returns or extract helper functions ## Step 2: Find Code Duplication ```bash # Look for similar function signatures that might be duplicated grep -rn --include="*.ts" --include="*.tsx" --include="*.js" "export function\|export const.*=.*=>" . --exclude-dir=node_modules --exclude-dir=.next | sort -t: -k3 | head -40 # Find similar import patterns (indicates shared utilities needed) grep -rn --include="*.ts" --include="*.tsx" "^import" . --exclude-dir=node_modules --exclude-dir=.next | awk -F'from' '{print $2}' | sort | uniq -c | sort -rn | head -20 ``` Read files that look like they might contain duplicate logic. Common duplication spots: - Validation logic repeated across multiple API routes - Error handling patterns copy-pasted between files - Data transformation functions that do the same thing with slight variations - Utility functions re-implemented in multiple places For each duplication, suggest extracting to a shared utility. ## Step 3: Find Dead Code ```bash # Find exported functions — check if they're imported anywhere grep -rn --include="*.ts" --include="*.tsx" "export function\|export const\|export class\|export interface\|export type" . --exclude-dir=node_modules --exclude-dir=.next | head -40 # Find unused variables/imports (TypeScript) npx tsc --noEmit --noUnusedLocals --noUnusedParameters 2>&1 | grep "declared but" | head -20 # Find files that aren't imported by anything find . -name "*.ts" -o -name "*.tsx" | grep -v node_modules | grep -v .next | grep -v "page\.\|layout\.\|route\." | while read f; do base=$(basename "$f" | sed 's/\.[^.]*$//') count=$(grep -rn --include="*.ts" --include="*.tsx" "$base" . --exclude-dir=node_modules --exclude-dir=.next | grep -v "$f" | wc -l) if [ "$count" -eq 0 ]; then echo "POSSIBLY UNUSED: $f"; fi done 2>/dev/null | head -15 ``` For each potentially dead code finding, verify by reading the file and checking if it's used via dynamic imports, config references, or framework conventions (like Next.js page files). ## Step 4: Find Complexity Issues Read source files and look for: **Deeply Nested Conditionals** - More than 3 levels of if/else nesting - Fix: use early returns, guard clauses, or extract helper functions **God Objects/Files** - Single files that handle too many responsibilities - Fix: split into focused modules with single responsibility **Boolean Parameters** - Functions that take boolean flags to control behavior: `processOrder(order, true, false, true)` - Fix: use named options object: `processOrder(order, { validate: true, notify: false, async: true })` **Magic Numbers & Strings** - Hardcoded values like `if (retries > 3)` or `role === "admin"` - Fix: extract to named constants: `const MAX_RETRIES = 3` **Inappropriate Intimacy** - Modules reaching deep into other modules' internal structures - Fix: expose proper interfaces/APIs ## Step 5: Check Naming Quality Read through the main source files and flag: - Single-letter variables outside of loop iterators: `const d = getData()` should be `const dashboardData = getData()` - Misleading names: function called `getUser` that also modifies the database - Inconsistent naming: mixing `camelCase` and `snake_case` in the same codebase - Vague names: `data`, `result`, `temp`, `info`, `handler`, `manager`, `utils` - Boolean variables not starting with `is`, `has`, `should`, `can` ## Step 6: Output the Report ``` ## Code Smell Report **Files Scanned**: [count] **Total Smells Found**: [count] --- ### High Priority (fix these first) 1. **[file:line]** — [Smell type]: [Title] **Why it matters**: [Impact on maintainability, readability, or bug risk] **Fix**: ```suggestion // Show the improved code ``` ### Medium Priority 1. **[file:line]** — [Smell type]: [Title] **Suggestion**: [How to improve] ### Low Priority 1. **[file:line]** — [Smell type]: [Title] **Note**: [Brief suggestion] ### Dead Code to Remove - `[file]` — [What's unused and can be safely deleted] ### Summary | Smell Type | Count | |-----------------|-------| | Long Functions | ... | | Duplication | ... | | Dead Code | ... | | Complex Nesting | ... | | Poor Naming | ... | | Magic Numbers | ... | **Top 3 refactoring priorities:** 1. [Most impactful] 2. [Second] 3. [Third] ``` ## Rules - Focus on smells that impact maintainability and bug risk, not personal style preferences. - For every smell, explain WHY it's a problem, not just WHAT it is. - Show the fix for high-priority items. - Verify dead code findings — framework convention files (pages, routes, layouts) are NOT dead code. - Group related smells together if they should be fixed as a single refactor. ## Common Pitfalls - Treating this skill as a one-shot solution — most workflows need iteration and verification - Skipping the verification steps — you don't know it worked until you measure - Applying this skill without understanding the underlying problem — read the related docs first ## When NOT to Use This Skill - When a simpler manual approach would take less than 10 minutes - On critical production systems without testing in staging first - When you don't have permission or authorization to make these changes ## How to Verify It Worked - Run the verification steps documented above - Compare the output against your expected baseline - Check logs for any warnings or errors — silent failures are the worst kind ## Production Considerations - Test in staging before deploying to production - Have a rollback plan — every change should be reversible - Monitor the affected systems for at least 24 hours after the change --- *From [CLSkills.in](https://clskills.in/browse) — 2,300+ free Claude Code skills*