Cleanup (command)
Contributed by Rohit Ghumare (awesome-claude-code-toolkit)
Source: original file · added 2026-10-29
Find and remove dead code, unused imports, and unreachable branches.
Steps
- Detect the language and available tooling:
- TypeScript/JavaScript: Use
tsc --noEmitfor unused locals,eslintwithno-unused-vars. - Python: Use
vultureorpyflakesfor dead code detection. - Go:
go vetreports unused variables;staticcheckfinds dead code. - Rust: Compiler warnings for dead code with
#[warn(dead_code)].
- TypeScript/JavaScript: Use
- Scan for unused exports:
- Find all exported symbols.
- Search the codebase for imports of each symbol.
- Flag exports with zero import references (excluding entry points).
- Detect unreachable code:
- Code after unconditional return/throw/break statements.
- Branches with impossible conditions (always true/false guards).
- Feature flags that are permanently enabled or disabled.
- Find unused dependencies:
- Compare
package.jsondependencies against actual imports. - Check for packages used only in removed code.
- Compare
- Present findings grouped by category with confidence levels.
- Apply removals only for high-confidence dead code (no dynamic references).
- Run tests after each removal batch to catch false positives.
Format
Dead Code Analysis
==================
Unused imports: <N>
- <file>:<line> - import { <symbol> } from '<module>'
Unused exports: <N>
- <file>:<line> - export <symbol> (0 references)
Unreachable code: <N>
- <file>:<lines> - <reason>
Unused dependencies: <N>
- <package> (last used: never / removed in <commit>)
Safe to remove: <N> items
Needs review: <N> itemsRules
- Never remove code that might be used via dynamic imports, reflection, or string references.
- Preserve exports that are part of a public API or SDK.
- Skip test utilities, fixtures, and development-only code.
- Run the full test suite after removing each batch to catch false positives.
- Log removed code with git commit messages for easy reversal.
Original source file (unmodified)
Find and remove dead code, unused imports, and unreachable branches. ## Steps 1. Detect the language and available tooling: - TypeScript/JavaScript: Use `tsc --noEmit` for unused locals, `eslint` with `no-unused-vars`. - Python: Use `vulture` or `pyflakes` for dead code detection. - Go: `go vet` reports unused variables; `staticcheck` finds dead code. - Rust: Compiler warnings for dead code with `#[warn(dead_code)]`. 2. Scan for unused exports: - Find all exported symbols. - Search the codebase for imports of each symbol. - Flag exports with zero import references (excluding entry points). 3. Detect unreachable code: - Code after unconditional return/throw/break statements. - Branches with impossible conditions (always true/false guards). - Feature flags that are permanently enabled or disabled. 4. Find unused dependencies: - Compare `package.json` dependencies against actual imports. - Check for packages used only in removed code. 5. Present findings grouped by category with confidence levels. 6. Apply removals only for high-confidence dead code (no dynamic references). 7. Run tests after each removal batch to catch false positives. ## Format ``` Dead Code Analysis ================== Unused imports: <N> - <file>:<line> - import { <symbol> } from '<module>' Unused exports: <N> - <file>:<line> - export <symbol> (0 references) Unreachable code: <N> - <file>:<lines> - <reason> Unused dependencies: <N> - <package> (last used: never / removed in <commit>) Safe to remove: <N> items Needs review: <N> items ``` ## Rules - Never remove code that might be used via dynamic imports, reflection, or string references. - Preserve exports that are part of a public API or SDK. - Skip test utilities, fixtures, and development-only code. - Run the full test suite after removing each batch to catch false positives. - Log removed code with git commit messages for easy reversal.