| name | dev-code-cleanup |
| description | 当需要清理代码库中的死代码、未使用导出、重复代码或未使用依赖时使用 - 安全地识别和删除无用代码 |
代码清理
概述
系统化识别和删除死代码、未使用依赖和重复代码。通过工具检测、分级分类和测试验证确保安全清理。
核心原则: 工具检测 → 风险分级 → 测试验证 → 安全删除
开始时宣布: "I'm using the dev-code-cleanup skill to clean up dead code."
何时使用
使用场景:
- 代码库中存在未使用的函数、变量或导出
- 需要移除未使用的 npm/pip/cargo 依赖
- 发现重复或近重复的代码块
- 项目维护阶段需要减少技术债务
- 构建产物过大需要优化
不使用场景:
- 正在活跃开发新功能期间
- 即将部署到生产环境前
- 代码缺乏测试覆盖
- 不熟悉代码库架构时
检测工具
| 工具 | 语言/框架 | 检测内容 | 命令 |
|---|
| knip | TypeScript/JavaScript | 未使用文件、导出、依赖 | npx knip |
| depcheck | Node.js | 未使用 npm 依赖 | npx depcheck |
| ts-prune | TypeScript | 未使用 TypeScript 导出 | npx ts-prune |
| vulture | Python | 未使用 Python 代码 | vulture src/ |
| deadcode | Go | 未使用 Go 代码 | deadcode ./... |
| cargo-udeps | Rust | 未使用 Rust 依赖 | cargo +nightly udeps |
无工具时: 使用 Grep 搜索导出定义,然后检查是否有导入引用
风险分级
| 级别 | 示例 | 处理方式 |
|---|
| SAFE | 未使用的工具函数、内部辅助函数、测试工具 | 可安全删除 |
| CAUTION | 组件、API 路由、中间件 | 检查动态导入和外部调用者 |
| DANGER | 配置文件、入口点、类型定义 | 深入调查后再操作 |
清理流程
1. 检测
运行适合项目的检测工具:
npx knip
npx depcheck
npx ts-prune
vulture src/
deadcode ./...
2. 分类
将发现的问题按风险分级归类。
3. 安全删除 (SAFE 级别)
对每个 SAFE 项目:
- 运行完整测试套件 - 建立基线
- 删除死代码 - 使用精准编辑
- 重新运行测试 - 验证无破坏
- 测试失败 → 立即
git checkout -- <file> 恢复并跳过
- 测试通过 → 继续下一个
4. 谨慎处理 (CAUTION 级别)
删除前检查:
- 动态导入:
import(), require(), __import__
- 字符串引用:路由名、配置中的组件名
- 是否从公共 API 导出
- 外部消费者(如果是发布包)
5. 合并重复代码
删除死代码后,检查:
- 相似度 >80% 的函数 → 合并为一个
- 冗余类型定义 → 统一
- 无价值的包装函数 → 内联
- 无意义的重导出 → 移除间接层
规则
- 绝不未经测试就删除 - 始终先运行测试建立基线
- 一次只删一项 - 原子变更便于回滚
- 不确定就跳过 - 保留死代码好过破坏生产
- 清理时不重构 - 先清理,再重构,分离关注点
常见错误
未经测试直接删除
- 问题: 误删正在使用的代码导致功能损坏
- 修复: 始终先运行完整测试套件建立基线
批量删除多个项目
- 问题: 出错时难以定位具体问题
- 修复: 一次处理一个,逐个验证
忽略动态导入
- 问题: 字符串形式的导入未被静态分析捕获
- 修复: CAUTION 级别项目搜索
import() 和字符串引用
清理时顺便重构
- 问题: 混合关注点,出错时难以回滚
- 修复: 先完成清理,再单独进行重构
清理报告模板
死代码清理报告
──────────────────────────────
已删除:
- 12 个未使用函数
- 3 个未使用文件
- 5 个未使用依赖
已跳过:
- 2 个项目 (测试失败)
节省:
- 约 450 行代码
- 约 200KB 构建产物
状态: 所有测试通过 ✅
──────────────────────────────