dead-code-detector

Find and remove dead code in TypeScript/JavaScript projects. Detects unused exports (functions, types, constants never imported elsewhere), unused npm dependencies (packages in package.json never imported), and unreachable code patterns (code after returns, always-false conditions, stale TODOs). Use when: "find dead code", "check for unused exports", "clean up unused code", "find unused dependencies", "audit codebase for dead code", "what code can I delete", or before major refactors.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "dead-code-detector" with this command: npx skills add montagao/skills/montagao-skills-dead-code-detector

Dead Code Detector

Detect and eliminate dead code in TypeScript/JavaScript codebases.

Quick Start

Run the automated scanner:

node ~/.claude/skills/dead-code-detector/scripts/find-dead-code.js .

Output: Console report + dead-code-report.json with all findings.

What Gets Detected

1. Unused Exports

Exported symbols never imported elsewhere in the codebase.

// src/utils/helpers.ts
export function formatDate() { ... }  // Used
export function oldFormatter() { ... }  // DEAD - never imported

False positive handling: Automatically skips:

  • Entry points (index.ts, page.tsx, convex/ functions)
  • Common type suffixes (Props, Config, Schema)
  • Default exports (may be dynamically imported)

2. Unused Dependencies

Packages in package.json never imported anywhere.

{
  "dependencies": {
    "lodash": "^4.17.21",  // DEAD - replaced by native methods
    "react": "^18.0.0"     // Used
  }
}

False positive handling: Automatically skips:

  • Dev tools: typescript, eslint, prettier, vitest, jest
  • Type packages: @types/*
  • Build tools: webpack, vite, rollup, postcss, tailwindcss

3. Unreachable Code Patterns

// Code after return
function foo() {
  return 1;
  console.log("dead");  // FLAGGED
}

// Always-false conditions
if (false) { ... }  // FLAGGED

// Stale TODOs
// TODO (2021): Fix this  // FLAGGED as stale

Manual Investigation Workflow

For findings that need verification:

Check if export is truly unused

rg "symbolName" --type ts
rg "from.*filename" --type ts  # Check imports of file

Check for dynamic imports

rg "import\(['\"].*moduleName" --type ts
rg "require\(['\"].*moduleName" --type js

Check if dependency is used in config

rg "packageName" *.config.* package.json

Framework Considerations

Framework-specific exports that look unused but aren't:

FrameworkSafe to Keep
Next.jsgenerateStaticParams, generateMetadata, exports from page.tsx/layout.tsx
RemotionCompositions in Root.tsx, calculateMetadata
ConvexAll convex/ function exports (deployed via API)
ExpressRoute handlers, middleware (registered, not imported)

Cleanup Workflow

  1. Run scanner on project root
  2. Review findings - verify each is truly dead
  3. Remove code - delete unused exports and functions
  4. Remove dependencies - npm uninstall <package>
  5. Run tests - ensure nothing broke
  6. Commit - "chore: remove dead code"

Reference

For detailed patterns and edge cases, see references/patterns.md.

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

library-ebooks

No summary provided by upstream source.

Repository SourceNeeds Review
General

plane-api

No summary provided by upstream source.

Repository SourceNeeds Review
General

clean-history

No summary provided by upstream source.

Repository SourceNeeds Review
General

llm-seo

No summary provided by upstream source.

Repository SourceNeeds Review