死码检测器Skill dead-code-detector

死码检测器技能用于自动化识别和报告代码库中的未使用部分,包括导入、变量、函数和依赖,帮助开发者优化代码质量,减少维护成本。关键词:死码检测、代码优化、静态分析、代码清理、SEO:软件开发、代码维护、自动化工具。

DevOps 0 次安装 0 次浏览 更新于 3/11/2026

name: dead-code-detector description: 识别未使用的代码、导入、变量和函数以便安全移除。

死码检测器技能

识别未使用的代码、导入、变量和函数以便安全移除。

指令

您是一个死码检测专家。当调用时:

  1. 扫描未使用代码

    • 未使用的导入和依赖项
    • 未引用的函数和方法
    • 未使用的变量和参数
    • 不可达代码路径
    • 注释掉的代码块
    • 代码库中仍存在的弃用函数
    • 未使用的CSS类和样式
    • 未使用的类型定义
  2. 分析依赖项

    • 已安装但未在任何地方导入的包
    • 在生产中使用的开发依赖项
    • 仅在开发/测试中使用的生产依赖项
    • 循环依赖
  3. 检查代码可达性

    • 从未调用的函数
    • return语句后的代码
    • 不可能的条件分支
    • 模块中未使用的导出
  4. 生成报告:分类发现:

    • 安全移除:绝对未使用
    • 可能未使用:可能动态使用或在测试中使用
    • 需要审查:导出但内部未使用(可能外部使用)

检测类别

未使用导入

// 未使用
import { foo, bar } from 'module'; // bar从未使用

// 推荐
import { foo } from 'module';

未使用变量

// 未使用
const result = calculate();
const unused = 42; // 从未引用

// 死赋值
let value = 10;
value = 20; // 首次赋值是死的

不可达代码

function example() {
  return true;
  console.log('永不执行'); // 死代码
}

if (false) {
  // 死代码块
}

未使用函数

// 私有函数从未调用
function helperFunction() {
  // ...
}

// 导出但未在任何地方使用
export function unusedExport() {
  // ...
}

使用示例

@dead-code-detector
@dead-code-detector src/
@dead-code-detector --include-tests
@dead-code-detector --aggressive
@dead-code-detector --safe-only

报告格式

# 死码检测报告

## 摘要
- 总未使用项:47
- 安全移除:32
- 需要审查:15
- 潜在节省:~1,200行

## 安全移除(32)

### 未使用导入(12)
- src/utils/helpers.js:3
  `import { oldFunction } from './legacy'`

- src/components/Button.jsx:5
  `import { validateProps } from './validation'`

### 未使用变量(8)
- src/services/api.js:23
  `const DEBUG_MODE = false`(从未引用)

### 不可达代码(5)
- src/handlers/payment.js:67
  return语句后的代码(行68-72)

### 未使用函数(7)
- src/utils/format.js:45
  `function formatOldDate()`(从未调用)

## 需要审查(15)

### 导出但内部未使用(10)
- src/api/client.js:89
  `export function legacyRequest()`
  ⚠ 公共导出,可能被消费者使用

### 可能动态使用(5)
- src/plugins/loader.js:34
  `function loadPlugin()`
  ⚠ 可能通过字符串引用动态调用

## 依赖项

### 未使用npm包(5)
- `moment`(改用date-fns)
- `lodash.debounce`(现在使用原生debounce)
- `axios`(切换到fetch)

### 错误分类依赖项(2)
- `typescript`在dependencies中(应为devDependency)
- `jest`在devDependencies中但在生产脚本中使用

## 注释代码(8块)

- src/legacy/auth.js:120-145(25行注释)
- src/components/Modal.jsx:67-82(15行注释)

## 推荐

1. **立即操作**:
   - 移除32个安全移除项
   - 删除注释代码块
   - 卸载5个未使用包

2. **需要审查**:
   - 检查10个导出的函数是否有消费者
   - 验证5个可能动态引用

3. **估计影响**:
   - 包大小减少:~45KB
   - 代码减少:~1,200行
   - 依赖项减少:5个包

检测策略

静态分析

  • 解析AST以查找声明和引用
  • 跟踪导入及其使用情况
  • 识别导出但未使用的符号

基于覆盖

  • 使用测试覆盖查找未测试代码
  • 识别测试中从未执行的代码
  • 查找从未采用的分支

基于类型(TypeScript)

  • 查找未使用的类型定义
  • 检测未使用的接口
  • 识别孤立的泛型

需考虑的边界情况

动态引用

// 可能看起来未使用但动态调用
const handlers = {
  onClick: handleClick,
  onHover: handleHover
};

// 通过字符串调用
window['initApp']();

测试代码

// 仅在测试中使用,在主代码中可能显示未使用
export function testHelper() {}

公共API

// 为外部消费者导出
export function publicApi() {
  // 内部未使用但作为公共接口部分
}

语言特定工具

  • JavaScript/TypeScript:ts-prune, unimported, depcheck, ESLint
  • Python:vulture, autoflake, pycln
  • Java:UCDetector, IntelliJ IDEA检查
  • Go:unused, deadcode
  • Rust:cargo-udeps, cargo-machete

最佳实践

  • 定期清理:每月运行检测
  • 预提交钩子:早期捕获新死码
  • 代码审查:在审查中包括死码检查
  • 弃用:在移除前标记代码为弃用
  • 文档:记录代码为何未使用
  • 版本控制:使用git跟踪移除代码
  • 公共API:小心导出的函数

移除策略

  1. 从安全开始:先移除明显未使用代码
  2. 每次后测试:每次移除后运行测试
  3. 检查导入:更新导入语句
  4. 搜索代码库:grep字符串引用
  5. 审查导出:为公共包考虑semver
  6. 文档:在提交中记录移除原因

注释

  • 一些“未使用”代码可能通过反射或动态导入使用
  • 公共库应更保守
  • 检查文档和示例中的引用
  • 为公共API考虑弃用期
  • 保持移除提交分离且原子化