## 死代码（Medium）

### 触发信号

- `return`/`throw`/`break`/`continue` 之后的代码（不可达）
- 永远为真/假的条件（`if (true)`、`if (1)`、`while (false)`）
- 导出的函数/类未被任何文件引用
- `switch` 分支无 `break`/`return` 且无 `// fallthrough` 注释
- `else` 分支在 `if` 已 return/throw 时多余

### 判定流程

1. **检查不可达代码**：`Read` 提取所有 `return`/`throw`/`break`/`continue` 语句，检查后续是否有代码（非注释、非闭合大括号）
2. **检查永真/永假条件**：`Read` 识别以下模式：
   - `if (true)` / `if (false)` / `if (1)` / `if (0)`
   - `while (true)` 有合理用途（事件循环），但 `while (false)` 无意义
   - 短路表达式：`true && x` 等价于 `x`，`false || x` 等价于 `x`
3. **检查未使用导出**：`find_references` 追踪导出函数/类的引用，确认是否被其他文件导入使用
4. **检查 switch fallthrough**：`Read` 确认 `case` 分支末尾是否有 `break`/`return`/`throw`，或是否有 `// fallthrough`/`// falls through` 注释标明有意穿透

### 证据构造

确认缺陷后，输出需包含：
- 不可达代码位置（`return`/`throw` 后的代码，含文件:行号）
- 死代码类型（不可达/永真条件/未使用导出/switch 穿透）
- 建议（删除、添加 break、添加注释说明）

### 排除

- `while (true)` + `break`/`return` 的事件循环模式
- 有意设计的 fallthrough（有 `// fallthrough` 注释）
- 库的公共 API 导出（设计上供外部使用，即使当前项目未引用）
- 需要安装的三方依赖中的导出（三方依赖不可见，无法确认引用关系）
- 条件编译代码（`#ifdef`、`__DEV__`）
- TypeScript 的 `never` 类型分支（穷尽检查后的 default 分支）
