关于 dead-code-removal
Dead Code Removal 是一项用于安全识别和移除未使用代码的技能,适合维护和整理代码库的开发者。它分析语言结构、入口点和依赖关系,并通过备份、增量修改及验证降低误删风险。
主要功能
- 01检测项目语言与入口点
- 02分析跨文件依赖和引用
- 03识别未使用导入、函数与类
- 04保留动态调用及框架模式
- 05创建备份并增量移除
- 06通过语法检查和测试验证
适用场景
- 01重构后清理未使用代码
- 02发布前整理遗留代码
- 03移除已弃用功能
- 04检查 Python 文件中的未使用导入
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ 89jobrien/ steve --skill dead-code-removal安装后在 Claude Code 中输入/dead-code-removal确认已加载。
附带文件scripts/find-unused-imports.py
详细介绍
删除死代码
此技能可安全地识别并删除多种编程语言中的未使用代码,并包含全面的安全检查,防止误删实际需要的代码。
适用场景
- 重构代码并移除功能后
- 生产部署前缩小打包体积
- 清理遗留代码时
- 移除已弃用的功能时
- 优化代码库大小时
- 维护代码质量标准时
此技能的功能
- 语言检测:识别项目语言和结构
- 入口映射:映射入口和关键路径
- 依赖分析:构建依赖关系图并分析使用模式
- 安全检测:通过安全检查识别未使用的元素
- 渐进式移除:逐步移除代码并进行验证
- 创建备份:在更改前创建备份
辅助脚本
此技能在 scripts/ 中包含 Python 辅助脚本:
-
find_unused_imports.py:使用 AST 解析,准确检测 Python 文件中的未使用导入。输出包含未使用导入和行号的 JSON。python scripts/find_unused_imports.py src/utils.py src/services.py
使用方法
移除未使用的代码
Find and remove unused imports and functions in this project
Clean up dead code in src/ directory, but be conservative
特定分析
Check for unused functions in src/utils/ and remove them safely
分析流程
1. 语言检测
识别项目类型:
- Python:查找
pyproject.toml、setup.py、requirements.txt - JavaScript/TypeScript:检查
package.json、tsconfig.json - Java:查找
pom.xml、build.gradle - Go:检查
go.mod - Rust:检查
Cargo.toml
检测入口:
- 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.*、settings.*、setup.* - 测试文件:
test_*.py、*.test.js、*.spec.js
2. 构建依赖关系图
跨文件依赖:
- 跟踪导入和 require
- 映射函数/方法调用
- 识别类继承
- 跟踪动态使用模式
框架模式:
- 保留框架专用模式(Django 模型、React 组件等)
- 检查装饰器和注解
- 验证入口注册
3. 检测未使用的元素
使用辅助脚本:
此技能包含用于查找未使用导入的 Python 辅助脚本:
# Find unused imports in Python files
python scripts/find_unused_imports.py src/utils.py src/services.py
未使用的导入:
# 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
未使用的函数/类:
- 定义:所有已声明的函数/类
- 引用:直接调用、继承、回调
- 保留:入口、框架钩子、事件处理程序
4. 安全检查
以下情况绝不移除:
- Python:检测到
getattr()、eval()、globals()的使用 - JavaScript:使用
window[]、this[]、动态import() - Java:反射、注解(
@Component、@Service) - 框架模式:模型、控制器、路由、组件
- 入口:主函数、应用初始化
- 测试文件:所有与测试相关的代码
框架保留规则:
Python:
- Django:模型、迁移、管理后台注册
- Flask:路由、蓝图、应用工厂
- FastAPI:端点、依赖项
JavaScript:
- React:组件、钩子、上下文提供程序
- Vue:组件、指令、混入
- Angular:装饰器、服务、模块
Java:
- Spring:Bean、控制器、仓库
- JPA:实体、仓库
5. 安全移除流程
创建备份:
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"
渐进式移除:
- 创建包含更改的临时文件
- 验证语法
- 如有测试则运行测试
- 应用更改或回滚
验证:
# Python
python -m py_compile file.py
python -m pytest
# JavaScript
npx eslint file.js
npm test
# Java
javac -Xlint file.java
mvn test
示例
示例 1:移除未使用的导入
输入:清理 src/utils/helpers.py 中未使用的导入
输出:
## 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
验证
- ✅ 语法检查通过
- ✅ 测试通过
- ✅ 未检测到动态导入
### 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
最佳实践
安全准则
应做:
- 每次移除后运行测试
- 保留框架模式
- 检查模板中的字符串引用
- 持续验证语法
- 创建全面的备份
- 逐步移除
不应做:
- 未了解用途就移除
- 未经测试就批量移除
- 忽略动态使用模式
- 跳过配置文件
- 从迁移文件中移除
- 移除导出或公开 API
检测模式
静态分析:
- 使用 AST 解析进行准确检测
- 跟踪跨文件引用
- 检查动态使用模式
- 验证框架特定模式
验证:
- 始终运行语法检查
- 移除后运行测试
- 确认构建仍能正常运行
- 检查运行时错误
报告
报告应包括:
- 已分析的文件(数量和类型)
- 检测到的未使用内容(导入、函数、类)
- 安全移除的内容(及验证状态)
- 保留的内容(及保留原因)
- 影响指标(移除的行数、缩减的大小)
相关用例
- 发布前清理代码
- 缩减打包体积
- 移除已弃用代码
- 维护代码质量
- 重构遗留代码库
- 优化构建时间
评论
支持 Markdown