mcpField
D
dead-code-removal

dead-code-removal

github.com/89jobrien开发4198 次安装9 周前更新
代码仓库

关于 dead-code-removal

Dead Code Removal 是一项用于安全识别和移除未使用代码的技能,适合维护和整理代码库的开发者。它分析语言结构、入口点和依赖关系,并通过备份、增量修改及验证降低误删风险。

主要功能

  1. 01检测项目语言与入口点
  2. 02分析跨文件依赖和引用
  3. 03识别未使用导入、函数与类
  4. 04保留动态调用及框架模式
  5. 05创建备份并增量移除
  6. 06通过语法检查和测试验证

适用场景

  1. 01重构后清理未使用代码
  2. 02发布前整理遗留代码
  3. 03移除已弃用功能
  4. 04检查 Python 文件中的未使用导入

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/89jobrien/steve --skill dead-code-removal

安装后在 Claude Code 中输入/dead-code-removal确认已加载。

附带文件scripts/find-unused-imports.py

详细介绍

删除死代码

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

适用场景

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

此技能的功能

  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
    

使用方法

移除未使用的代码
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"

渐进式移除:

  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 中未使用的导入

输出:

## 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