## 符号解析（High）

### 触发信号

- 导入的符号在当前文件中未使用（`import X` 但文件中无 `X` 引用）
- 变量声明后未使用（`const x = 1` 后无引用）
- 内层变量遮蔽外层同名变量（`let x = 1; { let x = 2 }`）
- 变量/函数/类使用前未定义
- `this`/`self`/`ctx` 在回调中指向错误

### 判定流程

1. **检查未使用导入**：`Read` 提取所有 `import`/`require` 语句，`Grep` 在当前文件中搜索每个导入符号是否被引用
2. **检查未使用变量**：`Read` 提取所有 `const`/`let`/`var` 声明，`Grep` 在当前函数/块作用域内搜索变量名是否被引用
3. **检查变量遮蔽**：`Read` 识别嵌套作用域中的同名变量声明，判断内层声明是否遮蔽了外层：
   - 函数参数被内层变量遮蔽
   - 外层 `const` 被内层 `let/const` 遮蔽
   - `Read` 确认遮蔽是否为有意设计（如回调中重命名）还是意外
4. **检查符号定义**：`find_definition` 查找使用点的符号定义：
   - 定义不存在 → 报告未定义符号
   - 定义存在但不在作用域内 → 报告作用域错误
5. **检查 this 指向**：`Read` 确认回调函数中 `this` 是否正确绑定（箭头函数 vs `.bind(this)` vs `self = this`）

### 证据构造

确认缺陷后，输出需包含：
- 缺陷位置（未使用/未定义/遮蔽的位置，含文件:行号）
- 缺陷类型（未使用导入/未使用变量/变量遮蔽/未定义符号）
- 影响（代码冗余、潜在 bug、可读性降低）

### 排除

- TypeScript 的 `import type`（类型导入不影响运行时，但可报告冗余）
- `_` 前缀变量（`_unused` 约定表示有意忽略）
- 解构但仅使用部分字段（`const { a, b } = obj` 中 `b` 未使用）
- 库提供的全局声明（非导入的符号）
- 第三方包导入的符号（三方依赖不可见，无法确认符号来源）
