Dead Code Removal
This skill safely identifies and removes unused code across multiple programming languages. It includes comprehensive safety checks to prevent removing code that's actually needed.
When to Use This Skill
- After refactoring code and removing features
- Before production deployment to reduce bundle size
- When cleaning up legacy code
- When removing deprecated functionality
- When optimizing codebase size
- When maintaining code quality standards
What This Skill Does
- Language Detection: Identifies project languages and structure
- Entry Point Mapping: Maps entry points and critical paths
- Dependency Analysis: Builds dependency graphs and usage patterns
- Safe Detection: Identifies unused elements with safety checks
- Incremental Removal: Removes code incrementally with validation
- Backup Creation: Creates backups before making changes
Helper Scripts
This skill includes Python helper scripts in scripts/:
find_unused_imports.py: Uses AST parsing to accurately detect unused imports in Python files. Outputs JSON with unused imports and line numbers.
python scripts/find_unused_imports.py src/utils.py src/services.py
How to Use
Remove Unused Code
Find and remove unused imports and functions in this project
Clean up dead code in src/ directory, but be conservative
Specific Analysis
Check for unused functions in src/utils/ and remove them safely
Analysis Process
1. Language Detection
Identify Project Type:
- Python: Look for
pyproject.toml, setup.py, requirements.txt
- JavaScript/TypeScript: Check
package.json, tsconfig.json
- Java: Look for
pom.xml, build.gradle
- Go: Check
go.mod
- Rust: Check
Cargo.toml
Detect Entry Points:
- Python:
main.py, __main__.py, app.py, run.py
- JavaScript:
index.js, main.js, server.js, app.js
- Java:
Main.java, *Application.java, *Controller.java
- Config files:
*.config.*, settings.*, setup.*
- Test files:
test_*.py, *.test.js, *.spec.js
2. Build Dependency Graph
Cross-File Dependencies:
- Track imports and requires
- Map function/method calls
- Identify class inheritance
- Track dynamic usage patterns
Framework Patterns:
- Preserve framework-specific patterns (Django models, React components, etc.)
- Check for decorators and annotations
- Verify entry point registrations
3. Detect Unused Elements
Using Helper Script:
The skill includes a Python helper script for finding unused imports:
# Find unused imports in Python files
python scripts/find_unused_imports.py src/utils.py src/services.py
Unused Imports:
# Python: AST-based analysis
import ast
# Track: Import statements vs actual usage
# Skip: Dynamic imports (importlib, __import__)
// JavaScript: Module analysis
// Track: import/require vs references
// Skip: Dynamic imports, lazy loading
Unused Functions/Classes:
- Define: All declared functions/classes
- Reference: Direct calls, inheritance, callbacks
- Preserve: Entry points, framework hooks, event handlers
4. Safety Checks
Never Remove If:
- Python:
getattr(), eval(), globals() usage detected
- JavaScript:
window[], this[], dynamic import() usage
- Java: Reflection, annotations (
@Component, @Service)
- Framework patterns: Models, controllers, routes, components
- Entry points: Main functions, app initialization
- Test files: All test-related code
Framework Preservation:
Python:
- Django: Models, migrations, admin registrations
- Flask: Routes, blueprints, app factories
- FastAPI: Endpoints, dependencies
JavaScript:
- React: Components, hooks, context providers
- Vue: Components, directives, mixins
- Angular: Decorators, services, modules
Java:
- Spring: Beans, controllers, repositories
- JPA: Entities, repositories
5. Safe Removal Process
Backup Creation:
backup_dir="./unused_code_backup_$(date +%Y%m%d_%H%M%S)"
cp -r . "$backup_dir" 2>/dev/null || mkdir -p "$backup_dir" && rsync -a . "$backup_dir"
Incremental Removal:
- Create temp file with change
- Validate syntax
- Run tests if available
- Apply or rollback
Validation:
# Python
python -m py_compile file.py
python -m pytest
# JavaScript
npx eslint file.js
npm test
# Java
javac -Xlint file.java
mvn test
Examples
Example 1: Remove Unused Imports
Input: Clean up unused imports in src/utils/helpers.py
Output:
## Dead Code Removal: src/utils/helpers.py
### Analysis
- **File**: `src/utils/helpers.py`
- **Total imports**: 8
- **Unused imports**: 3
### Unused Imports Found
1. `import os` - Line 2 (not used anywhere)
2. `import json` - Line 3 (not used anywhere)
3. `from datetime import timedelta` - Line 5 (not used anywhere)
### Safe to Remove
✅ All 3 imports are safe to remove (no dynamic usage detected)
### Changes
```python
# Before
import os
import json
from datetime import datetime, timedelta
import requests
# After
from datetime import datetime
import requests
Validation
- ✅ Syntax check passed
- ✅ Tests pass
- ✅ No dynamic imports detected
### Example 2: Remove Unused Functions
**Input**: Find unused functions in `src/services/`
**Output**:
```markdown
## Dead Code Removal: src/services/
### Analysis
- **Files analyzed**: 12
- **Functions found**: 45
- **Unused functions**: 2
### Unused Functions
**1. `formatOldDate()` in `src/services/utils.js`**
- **Location**: Line 34-42
- **Status**: ✅ Safe to remove
- **Reason**: No references found, not exported, not used in tests
**2. `legacyAuth()` in `src/services/auth.js`**
- **Location**: Line 78-95
- **Status**: ⚠️ Preserved (framework pattern)
- **Reason**: Referenced in route configuration (line 12)
### Summary
- **Removed**: 1 function (`formatOldDate`)
- **Preserved**: 1 function (framework usage)
- **Lines removed**: 9
- **Size reduction**: ~300 bytes
Best Practices
Safety Guidelines
Do:
- Run tests after each removal
- Preserve framework patterns
- Check string references in templates
- Validate syntax continuously
- Create comprehensive backups
- Remove incrementally
Don't:
- Remove without understanding purpose
- Batch remove without testing
- Ignore dynamic usage patterns
- Skip configuration files
- Remove from migrations
- Remove exported/public APIs
Detection Patterns
Static Analysis:
- Use AST parsing for accurate detection
- Track cross-file references
- Check for dynamic usage patterns
- Verify framework-specific patterns
Validation:
- Always run syntax checks
- Run tests after removal
- Verify build still works
- Check for runtime errors
Reporting
Report Should Include:
- Files analyzed (count and types)
- Unused detected (imports, functions, classes)
- Safely removed (with validation status)
- Preserved (reason for keeping)
- Impact metrics (lines removed, size reduction)
Related Use Cases
- Code cleanup before release
- Reducing bundle size
- Removing deprecated code
- Maintaining code quality
- Refactoring legacy codebases
- Optimizing build times
1---2name: dead-code-removal3description: Detects and safely removes unused code (imports, functions, classes)4 across multiple languages. Use after refactoring, when removing features, or before5 production deployment. Includes safety checks and validation.6author: Joseph OBrien7status: unpublished8updated: '2025-12-23'9version: 1.0.110tag: skill11type: skill12---1314# Dead Code Removal1516This skill safely identifies and removes unused code across multiple programming languages. It includes comprehensive safety checks to prevent removing code that's actually needed.1718## When to Use This Skill1920- After refactoring code and removing features21- Before production deployment to reduce bundle size22- When cleaning up legacy code23- When removing deprecated functionality24- When optimizing codebase size25- When maintaining code quality standards2627## What This Skill Does28291. **Language Detection**: Identifies project languages and structure302. **Entry Point Mapping**: Maps entry points and critical paths313. **Dependency Analysis**: Builds dependency graphs and usage patterns324. **Safe Detection**: Identifies unused elements with safety checks335. **Incremental Removal**: Removes code incrementally with validation346. **Backup Creation**: Creates backups before making changes3536## Helper Scripts3738This skill includes Python helper scripts in `scripts/`:3940- **`find_unused_imports.py`**: Uses AST parsing to accurately detect unused imports in Python files. Outputs JSON with unused imports and line numbers.4142 ```bash43 python scripts/find_unused_imports.py src/utils.py src/services.py44 ```4546## How to Use4748### Remove Unused Code4950```51Find and remove unused imports and functions in this project52```5354```55Clean up dead code in src/ directory, but be conservative56```5758### Specific Analysis5960```61Check for unused functions in src/utils/ and remove them safely62```6364## Analysis Process6566### 1. Language Detection6768**Identify Project Type:**6970- Python: Look for `pyproject.toml`, `setup.py`, `requirements.txt`71- JavaScript/TypeScript: Check `package.json`, `tsconfig.json`72- Java: Look for `pom.xml`, `build.gradle`73- Go: Check `go.mod`74- Rust: Check `Cargo.toml`7576**Detect Entry Points:**7778- Python: `main.py`, `__main__.py`, `app.py`, `run.py`79- JavaScript: `index.js`, `main.js`, `server.js`, `app.js`80- Java: `Main.java`, `*Application.java`, `*Controller.java`81- Config files: `*.config.*`, `settings.*`, `setup.*`82- Test files: `test_*.py`, `*.test.js`, `*.spec.js`8384### 2. Build Dependency Graph8586**Cross-File Dependencies:**8788- Track imports and requires89- Map function/method calls90- Identify class inheritance91- Track dynamic usage patterns9293**Framework Patterns:**9495- Preserve framework-specific patterns (Django models, React components, etc.)96- Check for decorators and annotations97- Verify entry point registrations9899### 3. Detect Unused Elements100101**Using Helper Script:**102103The skill includes a Python helper script for finding unused imports:104105```bash106# Find unused imports in Python files107python scripts/find_unused_imports.py src/utils.py src/services.py108```109110**Unused Imports:**111112```python113# Python: AST-based analysis114import ast115# Track: Import statements vs actual usage116# Skip: Dynamic imports (importlib, __import__)117```118119```javascript120// JavaScript: Module analysis121// Track: import/require vs references122// Skip: Dynamic imports, lazy loading123```124125**Unused Functions/Classes:**126127- Define: All declared functions/classes128- Reference: Direct calls, inheritance, callbacks129- Preserve: Entry points, framework hooks, event handlers130131### 4. Safety Checks132133**Never Remove If:**134135- Python: `getattr()`, `eval()`, `globals()` usage detected136- JavaScript: `window[]`, `this[]`, dynamic `import()` usage137- Java: Reflection, annotations (`@Component`, `@Service`)138- Framework patterns: Models, controllers, routes, components139- Entry points: Main functions, app initialization140- Test files: All test-related code141142**Framework Preservation:**143144**Python:**145146- Django: Models, migrations, admin registrations147- Flask: Routes, blueprints, app factories148- FastAPI: Endpoints, dependencies149150**JavaScript:**151152- React: Components, hooks, context providers153- Vue: Components, directives, mixins154- Angular: Decorators, services, modules155156**Java:**157158- Spring: Beans, controllers, repositories159- JPA: Entities, repositories160161### 5. Safe Removal Process162163**Backup Creation:**164165```bash166backup_dir="./unused_code_backup_$(date +%Y%m%d_%H%M%S)"167cp -r . "$backup_dir" 2>/dev/null || mkdir -p "$backup_dir" && rsync -a . "$backup_dir"168```169170**Incremental Removal:**1711721. Create temp file with change1732. Validate syntax1743. Run tests if available1754. Apply or rollback176177**Validation:**178179```bash180# Python181python -m py_compile file.py182python -m pytest183184# JavaScript185npx eslint file.js186npm test187188# Java189javac -Xlint file.java190mvn test191```192193## Examples194195### Example 1: Remove Unused Imports196197**Input**: Clean up unused imports in `src/utils/helpers.py`198199**Output**:200201```markdown202## Dead Code Removal: src/utils/helpers.py203204### Analysis205- **File**: `src/utils/helpers.py`206- **Total imports**: 8207- **Unused imports**: 3208209### Unused Imports Found2101. `import os` - Line 2 (not used anywhere)2112. `import json` - Line 3 (not used anywhere)2123. `from datetime import timedelta` - Line 5 (not used anywhere)213214### Safe to Remove215✅ All 3 imports are safe to remove (no dynamic usage detected)216217### Changes218```python219# Before220import os221import json222from datetime import datetime, timedelta223import requests224225# After226from datetime import datetime227import requests228```229230### Validation231232- ✅ Syntax check passed233- ✅ Tests pass234- ✅ No dynamic imports detected235236```237238### Example 2: Remove Unused Functions239240**Input**: Find unused functions in `src/services/`241242**Output**:243```markdown244## Dead Code Removal: src/services/245246### Analysis247- **Files analyzed**: 12248- **Functions found**: 45249- **Unused functions**: 2250251### Unused Functions252253**1. `formatOldDate()` in `src/services/utils.js`**254- **Location**: Line 34-42255- **Status**: ✅ Safe to remove256- **Reason**: No references found, not exported, not used in tests257258**2. `legacyAuth()` in `src/services/auth.js`**259- **Location**: Line 78-95260- **Status**: ⚠️ Preserved (framework pattern)261- **Reason**: Referenced in route configuration (line 12)262263### Summary264- **Removed**: 1 function (`formatOldDate`)265- **Preserved**: 1 function (framework usage)266- **Lines removed**: 9267- **Size reduction**: ~300 bytes268```269270## Best Practices271272### Safety Guidelines273274**Do:**275276- Run tests after each removal277- Preserve framework patterns278- Check string references in templates279- Validate syntax continuously280- Create comprehensive backups281- Remove incrementally282283**Don't:**284285- Remove without understanding purpose286- Batch remove without testing287- Ignore dynamic usage patterns288- Skip configuration files289- Remove from migrations290- Remove exported/public APIs291292### Detection Patterns293294**Static Analysis:**295296- Use AST parsing for accurate detection297- Track cross-file references298- Check for dynamic usage patterns299- Verify framework-specific patterns300301**Validation:**302303- Always run syntax checks304- Run tests after removal305- Verify build still works306- Check for runtime errors307308### Reporting309310**Report Should Include:**311312- Files analyzed (count and types)313- Unused detected (imports, functions, classes)314- Safely removed (with validation status)315- Preserved (reason for keeping)316- Impact metrics (lines removed, size reduction)317318## Related Use Cases319320- Code cleanup before release321- Reducing bundle size322- Removing deprecated code323- Maintaining code quality324- Refactoring legacy codebases325- Optimizing build times