SuperAPI AI 工具集

dead-code-removal

编程与开发

查看项目

更新于 10-15 08:33

技能介绍

用途

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 个。 未使用函数:

  1. formatOldDate() 位于 src/services/utils.js,第 34-42 行,状态:可安全移除,原因:未找到引用,未导出,测试中未使用。
  2. legacyAuth() 位于 src/services/auth.js,第 78-95 行,状态:保留(框架模式),原因:在路由配置(第 12 行)中被引用。 汇总:移除 1 个函数(formatOldDate);保留 1 个函数(框架使用);移除行数 9;体积减少约 300 字节。

最佳实践

建议做法:每次移除后运行测试;保留框架模式;检查模板中的字符串引用;持续验证语法;创建完整备份;增量移除。 不建议做法:未理解用途就移除;不测试就批量移除;忽略动态使用模式;跳过配置文件;从迁移中移除;移除导出的/公开的 API。

检测模式

静态分析:使用 AST 解析进行精确检测;跟踪跨文件引用;检查动态使用模式;验证框架特定模式。

验证:始终运行语法检查;移除后运行测试;验证构建仍然可用;检查运行时错误。

报告

报告应包含:分析的文件(数量与类型);检测到的未使用项(导入、函数、类);安全移除项(含验证状态);保留项(保留原因);影响指标(移除行数、体积减少)。

相关用例

发布前代码清理;减小打包体积;移除废弃代码;维护代码质量;重构遗留代码库;优化构建时间。

限制

资料未提供该技能支持的完整语言清单、具体版本要求、安装命令、收费或价格信息、以及与其他工具集成的说明,这些信息暂未提供。