用途
Dead Code Removal 用于跨多种编程语言安全地识别并移除未使用的代码,包括未使用的导入、函数和类。它带有综合性的安全检查,防止删除实际上仍被需要的代码。
适用场景包括:重构代码并移除功能之后;生产部署前以减小打包体积;清理遗留代码;移除已废弃的功能;优化代码库体积;维护代码质量标准。
主要能力
- 语言检测:识别项目语言与结构。
- 入口点映射:映射入口点与关键路径。
- 依赖分析:构建依赖图与使用模式。
- 安全检测:在安全检查前提下识别未使用元素。
- 增量删除:逐步删除并进行验证。
- 备份创建:在修改前创建备份。
该技能在 scripts/ 目录下包含 Python 辅助脚本:
- find_unused_imports.py:使用 AST 解析精确检测 Python 文件中的未使用导入,输出包含未使用导入及行号的 JSON。
用法示例: python scripts/find_unused_imports.py src/utils.py src/services.py
使用方式
可通过自然语言指令触发,例如:
- 在这个项目中查找并移除未使用的导入和函数
- 清理 src/ 目录中的死代码,但要保守处理
- 检查 src/utils/ 中未使用的函数并安全移除
- 清理 src/utils/helpers.py 中未使用的导入
- 查找 src/services/ 中未使用的函数
分析流程
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. 构建依赖图
跨文件依赖:跟踪 imports 与 requires;映射函数/方法调用;识别类继承;跟踪动态使用模式。
框架模式:保留框架特定模式(Django models、React components 等);检查装饰器与注解;验证入口点注册。
3. 检测未使用元素
未使用导入:Python 使用基于 AST 的分析,跟踪导入语句与实际使用情况,跳过动态导入(importlib、import);JavaScript 进行模块分析,跟踪 import/require 与引用,跳过动态导入与懒加载。
未使用函数/类:定义所有声明的函数/类;识别直接调用、继承、回调等引用;保留入口点、框架钩子、事件处理器。
4. 安全检查
在以下情况下绝不删除:
- Python:检测到 getattr()、eval()、globals() 的使用
- JavaScript:检测到 window[]、this[]、动态 import() 的使用
- Java:反射、注解(@Component、@Service)
- 框架模式:models、controllers、routes、components
- 入口点:主函数、应用初始化
- 测试文件:所有测试相关代码
框架保留规则:
- Python:Django(models、migrations、admin 注册)、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. 安全删除流程
备份创建: 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 中未使用的导入
输出要点: 分析:文件 src/utils/helpers.py,总导入 8 个,未使用导入 3 个。 未使用导入:import os(第 2 行,未在任何地方使用)、import json(第 3 行,未在任何地方使用)、from datetime import timedelta(第 5 行,未在任何地方使用)。 安全移除:3 个导入均可安全移除(未检测到动态使用)。 改动:
Before
import os import json from datetime import datetime, timedelta import requests
After
from datetime import datetime import requests
验证:语法检查通过;测试通过;未检测到动态导入。
示例 2:移除未使用函数
输入:查找 src/services/ 中未使用的函数
输出要点: 分析:分析文件 12 个,发现函数 45 个,未使用函数 2 个。 未使用函数:
- formatOldDate() 位于 src/services/utils.js,第 34-42 行,状态:可安全移除,原因:未找到引用,未导出,测试中未使用。
- legacyAuth() 位于 src/services/auth.js,第 78-95 行,状态:保留(框架模式),原因:在路由配置(第 12 行)中被引用。 汇总:移除 1 个函数(formatOldDate);保留 1 个函数(框架使用);移除行数 9;体积减少约 300 字节。
最佳实践
建议做法:每次移除后运行测试;保留框架模式;检查模板中的字符串引用;持续验证语法;创建完整备份;增量移除。 不建议做法:未理解用途就移除;不测试就批量移除;忽略动态使用模式;跳过配置文件;从迁移中移除;移除导出的/公开的 API。
检测模式
静态分析:使用 AST 解析进行精确检测;跟踪跨文件引用;检查动态使用模式;验证框架特定模式。
验证:始终运行语法检查;移除后运行测试;验证构建仍然可用;检查运行时错误。
报告
报告应包含:分析的文件(数量与类型);检测到的未使用项(导入、函数、类);安全移除项(含验证状态);保留项(保留原因);影响指标(移除行数、体积减少)。
相关用例
发布前代码清理;减小打包体积;移除废弃代码;维护代码质量;重构遗留代码库;优化构建时间。
限制
资料未提供该技能支持的完整语言清单、具体版本要求、安装命令、收费或价格信息、以及与其他工具集成的说明,这些信息暂未提供。