Files
2026Technology-Competition/data/demo-sqlfluff/reports/demo-sqlfluff-coverage-report.md
T
范智鹏 3c390cfa90 feat: demo-pmd 样本工程入库 + Windows spawn cmd EINVAL 修复 + 实测报告清理
- data/demo-pmd 全量入库(26 源文件 + pom/mvnw/lib/reports),.gitignore 排除 target/
- 归档 demo-pmd 实测覆盖率报告(279/279 全覆盖)至 reports/
- 删除 4 份覆盖率报告中的后续建议/实测进度总览(全部实测已收官)
- 修复 Windows spawn .cmd/.bat EINVAL(auxClasspath.ts 经 cmd.exe /d /s /c 间接执行)
2026-08-26 22:04:47 +08:00

143 lines
9.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# demo-sqlfluff 插件实测覆盖率报告
> **工程**`demo-sqlfluff`11 个 SQL 样例文件,无 `.sqlfluff` 工程配置 → 插件回退内置配置)
> **测试对象**:插件 SQLFluff 适配器(实测方言 ansi,内置规则集 `core` + 25 条精选 = 57 条,`max_alias_length = 30`
> **实测日期**2026-08-25
> **比对基线**sqlfluff 4.3.0 + 插件内置配置逐字复刻(比对键 = 规则码 + 行号)
---
## 一、核心结论
| 指标 | 结果 | 状态 |
|---|---|---|
| 规则覆盖率(内置启用 57 条) | **57/57 种全部触发(100%** | ✅ 全覆盖 |
| 诊断总数 | **113 处**(与基线完全一致) | ✅ |
| 逐条一致性(规则 + 行号) | **113/113 条完全一致(零偏差)** | ✅ |
| 解析错误(PRS | **0 处** | ✅ |
| 插件缺陷 | **0 个**(JJ01 行号缺陷已修复并复测验证) | ✅ |
**实测完全达成全覆盖基准**:插件在「工程无配置文件 → 回退内置配置」路径下,内置启用的 57 条规则全部触发、113 处诊断与模拟基线逐条零偏差。此前发现的 **JJ01 行号显示 LNaN 缺陷已修复**——适配器对 sqlfluff JSON 中缺失 `end_line_no` 字段的回退已生效,复测 `08_jinja.sql` 确认 JJ01 正确显示为 `L2`。**SQLFluff 适配器静态分析链路验证通过,缺陷清零。**
---
## 二、逐文件比对(实测 vs 基线)
| 文件 | 实测 | 基线 | 一致性 | 覆盖规则 |
|---|---:|---:|---|---|
| `01_aliasing.sql` | 9 | 9 | ✅ 逐条一致 | AL02/AL04/AL05/AL08/AL09/AL10、AM05、LT02、LT12 |
| `02_ambiguity.sql` | 10 | 10 | ✅ 逐条一致 | AM01/AM02/AM03/AM05/AM06/AM08、AL05、LT02、LT12 |
| `03_caps.sql` | 25 | 25 | ✅ 逐条一致 | CP01-CP05、AL03、LT12 |
| `04_convention.sql` | 13 | 13 | ✅ 逐条一致 | CV01-CV06/CV08/CV12、AM05、LT02、ST11、LT12 |
| `05_layout.sql` | 12 | 12 | ✅ 逐条一致 | LT01/LT02/LT05-LT08/LT11/LT12、AM02 |
| `05b_layout_misc.sql` | 3 | 3 | ✅ 逐条一致 | LT14、LT15、LT12 |
| `05c_file_boundaries.sql` | 2 | 2 | ✅ 逐条一致 | LT13、LT12 |
| `06_references.sql` | 8 | 8 | ✅ 逐条一致 | RF01/RF02/RF04/RF05/RF06、AM05、LT02、LT12 |
| `07_structure.sql` | 28 | 28 | ✅ 逐条一致 | ST01-ST12、LT01/LT02/LT05/LT08/LT10、AL03/AL08、AM05、RF04、LT12 |
| `08_jinja.sql` | 2 | 2 | ✅ 逐条一致 | JJ01(L2,复测确认修复生效)、LT12 |
| `09_aliasing_length.sql` | 1 | 1 | ✅ 逐条一致 | AL06 |
| **合计** | **113** | **113** | **✅ 零偏差(113/113** | **57/57 种** |
> 比对方法:将插件报告中每条静态诊断(规则码 + 行号)与基线做多重集合比对;11 个文件全部 `missing = 0`、`extra = 0`(含 JJ01 行号缺陷修复后的复测确认)。
---
## 三、规则分组覆盖(57/57 = 100%
| 分组 | 规则数 | 触发规则明细 |
|---|---:|---|
| ALaliasing 别名) | 8 | AL02、AL03、AL04、AL05、AL06、AL08、AL09、AL10 |
| AMambiguous 歧义) | 6 | AM01、AM02、AM03、AM05、AM06、AM08 |
| CPcapitalisation 大小写) | 5 | CP01、CP02、CP03、CP04、CP05 |
| CVconvention 约定) | 8 | CV01、CV02、CV03、CV04、CV05、CV06、CV08、CV12 |
| JJjinja 模板) | 1 | JJ01 |
| LTlayout 布局) | 12 | LT01、LT02、LT05、LT06、LT07、LT08、LT10、LT11、LT12、LT13、LT14、LT15 |
| RFreferences 引用) | 5 | RF01、RF02、RF04、RF05、RF06 |
| STstructure 结构) | 12 | ST01-ST12 全部 |
**严重级别**:113 处全部为 error(🔴)——内置启用的 57 条规则在插件分级表中均为 P0/P1 级(P0 × 32 + P1 × 25),与实测全 error 一致。
**诊断分布**`07_structure.sql` 28 处最多,其次 `03_caps.sql` 25 处、`04_convention.sql` 13 处、`05_layout.sql` 12 处。
> 注:插件报告中另有 AI 审查建议 29 条(03_caps 4 / 05_layout 4 / 01_aliasing 3 / 02_ambiguity 3 / 06_references 3 / 09_aliasing_length 3 / 05b 2 / 05c 2 / 07_structure 2 / 04_convention 2 / 08_jinja 1),属 AI 增强能力,不计入静态规则覆盖口径。
---
## 四、全覆盖的达成要点
内置规则集(`core` 组 31 条 + 精选追加 25 条,合并去重 57 条)中有两条规则需要特别条件,本轮均已触发:
1. **AM02ambiguous.union,裸 UNION 应写明 DISTINCT/ALL**:方言门控规则,仅对 ansi/bigquery/mysql/snowflake 等支持 `UNION DISTINCT` 语法的方言生效,oracle 不在白名单。实测机按指引将插件设置 `sqlfluff.dialect` 设为 **ansi**AM02 在 `02_ambiguity.sql:20``05_layout.sql:41` 正常触发(若用默认 oracle 方言,该规则不报,覆盖率为 56/57)。
2. **AL06aliasing.length,别名长度上限)**:内置配置设 `max_alias_length = 30`,由补充样例 `09_aliasing_length.sql` 的 51 字符别名触发(实测报在 L8 别名定义处)。
**实测环境判定**:实测报告路径 `data\demo-sqlfluff\src\` 为单层目录,11 个文件与当前工作区版本一致(`02_ambiguity.sql` 顶部含 5 行方言说明注释、`09_aliasing_length.sql` 存在);方言判定为 ansi 的依据:AM02 触发 + 全部 113 处行号与 ansi 基线逐条吻合(oracle 基线为 111 处且无 AM02)。
---
## 五、插件缺陷记录:JJ01 行号 LNaN(已修复验证 ✅)
**发现过程**:首轮实测中 `08_jinja.sql` 报告显示 `` `sqlfluff:JJ01` LNaN ``——规则触发正确,但行号显示为 NaN(真实位置 L2)。
**根因链**(已逐环节实证):
1. **sqlfluff JSON 输出**JJ01 违规项(jinja 模板类违规)只有 `start_line_no: 2` / `start_line_pos: 1`**顶层缺失 `end_line_no` / `end_line_pos` 字段**;其余 112 处违规均有完整 end 字段(已对 11 个文件全量验证:缺失 end 字段的违规仅 JJ01 这 1 条)。
2. **插件适配器**`sqlfluff.ts`)直接计算:`new vscode.Range(v.start_line_no - 1, v.start_line_pos - 1, v.end_line_no - 1, v.end_line_pos - 1)` → end 传入 `undefined - 1 = NaN`。
3. **vscode.Range 构造函数**`start.isBefore(end)` 对 NaN 比较恒为 false → **交换 start/end** → `range.start` 变成 `Position(NaN, NaN)`。
4. **报告生成器**`report.ts`)读取 `diag.range.start.line` → `L${NaN + 1}` → 显示 "LNaN"。
**修复方案**(适配器侧对缺失 end 字段回退到 start 坐标):
```typescript
const endLine = (v.end_line_no ?? v.start_line_no) - 1;
const endPos = (v.end_line_pos ?? v.start_line_pos) - 1;
```
**修复验证**2026-08-25 复测 `08_jinja.sql`):
| 项 | 修复前 | 修复后 |
|---|---|---|
| `sqlfluff:JJ01` 行号 | `LNaN` | **`L2`** ✅ |
| 建议文案 | 正常(`Jinja 标签两侧应各有一个空格:{{1}}`) | 正常(新增行号前缀「第2行:」) |
| `sqlfluff:LT12` | L6 ✅ | L6 ✅ |
| 文件诊断合计 | 2 处 | 2 处 ✅ 与基线逐条一致 |
修复后 `08_jinja.sql` 复测 2/2 条与基线(JJ01 L2 + LT12 L6sqlfluff 4.3.0 复现)逐条一致,demo-sqlfluff 整体升至 **113/113 条零偏差**。
---
## 六、工程数据勘误(coverage_map.json
实测过程中发现工程自带的 `coverage_map.json` 存在 10 处陈旧行号(工程蓝图数据问题,非插件问题,已修正):
| 类型 | 涉及条目 | 原因 |
|---|---|---|
| `02_ambiguity.sql` 行号整体 +4 | AM01(2→6)、AM02(16→20)、AM03(28→32)、AM05(38→42, 59→63)、AM06(50→54)、AM08(59→63)、AL05(60→64)、LT02(39→43)、LT12(61→65) | 文件顶部补充 5 行方言说明注释后未同步更新映射 |
| AL06 行号 | 6→8 | sqlfluff 实际报在 FROM 别名定义处(L8),蓝图误记为 SELECT 引用处(L6) |
---
## 七、数据口径说明
| 项 | 说明 |
|---|---|
| 覆盖率口径 | 57 条 = 插件内置配置启用规则数(`core` 组 31 + 精选追加 25,合并去重);规则触发即计入,与 P0/P1 分级(32+25=57)完全对应 |
| 方言口径 | 实测为 **ansi**(按上轮指引设置);默认 oracle 下 AM02 不触发(56/57 = 98.2%),属 sqlflutt 方言能力差异而非插件缺陷 |
| 比对引擎 | sqlfluff 4.3.04.2.2 实测行为一致:同为 113 处、行号相同、JJ01 同样缺失 end 字段),内置配置逐字复刻插件 `buildBuiltinSqlfluffConfig` |
| 基线数据 | `/data/user/work/results/sqlfluff-final-compare.json`(逐文件比对明细);`/data/user/work/results/sqlfluff-actual-parsed.json`(实测解析结果) |
| 已知差异 | 无(JJ01 行号缺陷已修复并复测验证:LNaN → L2;113/113 条规则码 + 行号零偏差) |
---
## 八、结论与后续
**demo-sqlfluff 工程的插件实测验证完成**:
1. ✅ 内置规则全覆盖达成(57/57 种 · 113 处 · 零解析错误)
2. ✅ 插件行为零偏差(113/113 条逐条一致,含 JJ01 缺陷修复后的复测确认)
3. ✅ 插件缺陷闭环:JJ01 行号 LNaN → 修复 → 复测验证 L2(发现、定位、修复、验证全流程完成)
4. ✅ 「内置配置回退」路径验证通过(工程无 `.sqlfluff` 配置文件场景)
---
*报告生成于 2026-08-25 · demo-sqlfluff 插件实测 · 比对脚本:`sqlfluff-final-compare.mjs` · 数据:`sqlfluff-final-compare.json`*