## 扫描范围校验 (The Scope Validation)

**目标**：校验缺陷的文件和起始行号是否在扫描范围内。不在范围内的缺陷将被过滤或纠正。

### 分支扫描模式

1. 获取分支变更信息：
   * 使用 `git diff <目标分支>..<源分支> --diff-filter=AM` 获取源分支相对于目标分支的新增和修改变更
   * 提取变更文件列表（添加 `--name-only`）和变更行号范围（解析 diff 输出的 `+` 行）

2. 两级校验与纠正：

   **级别一：文件校验**
   * 缺陷文件路径必须在变更文件列表中，否则**立即过滤**

   **级别二：行号校验与纠正**
   * 缺陷起始行号（start_line）必须在该文件的变更行号范围内
   * 若不在范围内，按以下策略尝试纠正：

   **行号纠正策略**（按优先级依次尝试）：

   * **策略 1：函数名匹配** — 如果缺陷报告了某个函数中的问题，在 diff 中搜索该函数名（`def`/`function`/`func`/`void` 等关键字），将行号纠正到该函数的变更行
   * **策略 2：变量名匹配** — 搜索变更中的变量声明或使用（缺陷描述中提到的变量名），将行号纠正到变量相关变更处
   * **策略 3：代码特征匹配** — 搜索变更中与缺陷描述匹配的代码模式（如特定 API 调用、操作符使用），将行号纠正到匹配位置
   * **纠正失败处理** — 三种策略均无法匹配时，标记为"行号不可验证"而非直接过滤，交由验证阶段进一步判断

   **多 hunk diff 处理**：
   * 文件有多处不连续变更时，缺陷行号只需落在**任一 hunk 范围内**即可通过
   * hunk 范围 = `@@` 标记的起始行 + 变更行数
   * 解析 `git diff` 输出中的 `@@ -a,b +c,d @@` 格式，提取所有 hunk 的行号范围

3. 异常处理：无法获取 Git Diff 信息时，记录警告但不过滤，在报告结论中说明"未进行变更范围校验"

### 文件扫描模式

1. 文件路径校验：缺陷文件路径必须在用户指定的文件列表中，否则**立即过滤**
2. 行范围校验（仅当用户指定了行范围时，如 `:10:50`）：
   * 缺陷起始行号必须在指定的行范围内，否则**过滤**
3. 未指定行范围时：仅校验文件路径，不校验行号

### 目录扫描模式

1. 文件路径校验：缺陷文件路径必须在用户指定的目录下，否则**立即过滤**
2. 行范围校验：跳过（目录模式下扫描整个文件，不做行号限制）
