死代码移除Skill dead-code-removal

死代码移除技能是一款用于自动检测并安全清理多种编程语言(如Python、JavaScript、Java等)中未使用代码(如导入、函数、类)的工具。它通过静态分析(AST解析)、依赖图构建和严格的安全检查,帮助开发者在重构、发布前或维护时优化代码库,减少包体积,提升代码质量与可维护性。关键词:死代码移除、代码清理、静态分析、AST解析、依赖分析、代码优化、重构工具、未使用导入、安全移除、编程语言支持。

DevOps 0 次安装 0 次浏览 更新于 2/28/2026

name: dead-code-removal description: 安全地检测并移除多种编程语言中未使用的代码(导入、函数、类)。适用于重构后、移除功能时或生产部署前。包含安全检查与验证。 author: Joseph OBrien status: unpublished updated: ‘2025-12-23’ version: 1.0.1 tag: skill type: skill

死代码移除

此技能可安全地识别并移除多种编程语言中未使用的代码。它包含全面的安全检查,以防止移除实际需要的代码。

何时使用此技能

  • 重构代码并移除功能后
  • 生产部署前以减少包大小
  • 清理遗留代码时
  • 移除已弃用的功能时
  • 优化代码库大小时
  • 维护代码质量标准时

此技能的功能

  1. 语言检测:识别项目语言和结构
  2. 入口点映射:映射入口点和关键路径
  3. 依赖分析:构建依赖图和使用模式
  4. 安全检测:通过安全检查识别未使用的元素
  5. 增量移除:通过验证逐步移除代码
  6. 备份创建:在更改前创建备份

辅助脚本

此技能在 scripts/ 目录中包含 Python 辅助脚本:

  • find_unused_imports.py:使用 AST 解析准确检测 Python 文件中未使用的导入。输出包含未使用导入和行号的 JSON。

    python scripts/find_unused_imports.py src/utils.py src/services.py
    

如何使用

移除未使用代码

在此项目中查找并移除未使用的导入和函数
清理 src/ 目录中的死代码,但要保守操作

特定分析

检查 src/utils/ 中未使用的函数并安全地移除它们

分析流程

1. 语言检测

识别项目类型:

  • Python:查找 pyproject.tomlsetup.pyrequirements.txt
  • JavaScript/TypeScript:检查 package.jsontsconfig.json
  • Java:查找 pom.xmlbuild.gradle
  • Go:检查 go.mod
  • Rust:检查 Cargo.toml

检测入口点:

  • Python:main.py__main__.pyapp.pyrun.py
  • JavaScript:index.jsmain.jsserver.jsapp.js
  • Java:Main.java*Application.java*Controller.java
  • 配置文件:*.config.*settings.*setup.*
  • 测试文件:test_*.py*.test.js*.spec.js

2. 构建依赖图

跨文件依赖:

  • 跟踪导入和 require 语句
  • 映射函数/方法调用
  • 识别类继承
  • 跟踪动态使用模式

框架模式:

  • 保留特定框架模式(Django 模型、React 组件等)
  • 检查装饰器和注解
  • 验证入口点注册

3. 检测未使用元素

使用辅助脚本:

此技能包含一个用于查找未使用导入的 Python 辅助脚本:

# 在 Python 文件中查找未使用的导入
python scripts/find_unused_imports.py src/utils.py src/services.py

未使用的导入:

# Python:基于 AST 的分析
import ast
# 跟踪:导入语句与实际使用情况
# 跳过:动态导入(importlib、__import__)
// JavaScript:模块分析
// 跟踪:import/require 与引用
// 跳过:动态导入、懒加载

未使用的函数/类:

  • 定义:所有声明的函数/类
  • 引用:直接调用、继承、回调
  • 保留:入口点、框架钩子、事件处理器

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"

增量移除:

  1. 创建包含更改的临时文件
  2. 验证语法
  3. 运行可用测试
  4. 应用或回滚

验证:

# 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

### 分析
- **文件**:`src/utils/helpers.py`
- **总导入数**:8
- **未使用导入**:3

### 发现的未使用导入
1. `import os` - 第 2 行(未在任何地方使用)
2. `import json` - 第 3 行(未在任何地方使用)
3. `from datetime import timedelta` - 第 5 行(未在任何地方使用)

### 可安全移除
✅ 所有 3 个导入均可安全移除(未检测到动态使用)

### 更改
```python
# 之前
import os
import json
from datetime import datetime, timedelta
import requests

# 之后
from datetime import datetime
import requests

验证

  • ✅ 语法检查通过
  • ✅ 测试通过
  • ✅ 未检测到动态导入

### 示例 2:移除未使用函数

**输入**:查找 `src/services/` 中未使用的函数

**输出**:
```markdown
## 死代码移除: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 解析进行准确检测
  • 跟踪跨文件引用
  • 检查动态使用模式
  • 验证特定框架模式

验证:

  • 始终运行语法检查
  • 移除后运行测试
  • 验证构建是否仍能工作
  • 检查运行时错误

报告

报告应包含:

  • 分析的文件(数量和类型)
  • 检测到的未使用项(导入、函数、类)
  • 安全移除项(含验证状态)
  • 保留项(保留原因)
  • 影响指标(移除的行数、大小减少)

相关用例

  • 发布前代码清理
  • 减少包大小
  • 移除已弃用代码
  • 维护代码质量
  • 重构遗留代码库
  • 优化构建时间