/dead-code
Identify code that's safe to delete.
Usage
/dead-code # full scan
/dead-code src/lib/ # scoped scan
/dead-code --include-tests # include test files in usage analysis
What it detects
- Exported functions / classes / constants with zero imports anywhere
- Files never imported (orphan modules)
- Dead branches (
if (false), unreachable returns) - Unused props on React components
- Unused dependencies in
package.json - Unused TypeScript types and interfaces
Strategy
- Build an import graph of the project
- Mark entry points (build config, page routes, tests if
--include-tests) - Anything not reachable from an entry point = candidate
Output
src/lib/legacy/old-utils.ts (entire file unused — 412 lines)
src/components/Header.tsx
- export function trackHeaderClick (line 42, unused since 2024-08)
src/types/api.ts
- type LegacyResponse (line 17, unused)
📊 Total: 8 candidates · ~640 lines could be removed
Rules
- Never auto-delete — present a list, let the user decide
- Some "dead" code is intentional (re-exports, public API for libs)
- Watch for dynamic imports —
import(\./modules/${name}`)` defeats static analysis - Confidence levels: HIGH (purely internal), MEDIUM (could be external API), LOW (dynamic patterns nearby)