- 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 间接执行)
5.9 KiB
demo-eslint 插件实测覆盖率报告
工程:
demo-eslint(纯内置配置形态:无eslint.config.*) 测试对象:插件 ESLint 适配器(引擎 eslint 9.39.4 + @eslint/js 9.39.4 + typescript-eslint 8.60.1) 实测日期:2026-08-25 比对基线:插件同版本依赖复现的模拟基线(比对键 = 规则 + 行号 + 严重级别)
一、核心结论
| 指标 | 结果 | 状态 |
|---|---|---|
| 插件行为一致性(vs 模拟基线) | 292/292 条逐条一致,零偏差 | ✅ 100% |
| 规则覆盖率(真实规则口径) | 126/126 种(100%) | ✅ 全覆盖 |
| 解析错误 | 0 处 | ✅ |
| 诊断总数 | 292 条静态(error 268 / warning 24) | — |
实测完全达成全覆盖基准:插件在「工程无配置文件 → 回退内置默认配置」路径下,输出的 292 条静态诊断与模拟基线逐条一致,126 种内置规则全部触发、零解析错误。ESLint 适配器静态分析链路(规则加载、解析、诊断映射)验证通过。
二、逐文件比对(实测 vs 基线)
| 文件 | 实测 | 基线 | 一致性 | 说明 |
|---|---|---|---|---|
common.js |
210 | 210 | ✅ 逐条一致 | core ESLint 规则主样例文件 |
typescript.ts |
65 | 65 | ✅ 逐条一致 | @typescript-eslint/ 规则主样例文件 |
legacysyntax.cjs |
14 | 14 | ✅ 逐条一致 | 旧式(宽松模式)语法规则样例文件 |
esm-demo.js |
3 | 3 | ✅ 逐条一致 | ESM 相关规则样例文件 |
| 合计 | 292 | 292 | ✅ 零偏差 | — |
比对方法:将插件报告中的每条静态诊断(规则名 + 行号 + 严重级别)与模拟基线做多重集合比对;四文件全部
missing = 0、extra = 0。
三、全覆盖的达成机制
126 种内置规则中,有 6 条规则无法在常规 .js(module 模式)样例中触发,通过 legacysyntax.cjs 单文件解决,机制如下:
- 5 条宽松模式规则(
no-nonoctal-decimal-escape、no-octal、no-with、no-delete-var、no-dupe-args):触发代码('\8'转义、八进制010、with、delete变量、重复参数)在严格模式下本身是 SyntaxError,结构上只可能在宽松(sloppy)模式触发。.cjs文件被 flat config 默认按sourceType: "commonjs"(宽松模式)解析,无需任何配置文件。 preserve-caught-error:eslint 9.39.4 引擎已实现该规则,但 @eslint/js 9.39.4 的 recommended 未启用(10.0.1 才收录)。通过文件首行/* eslint preserve-caught-error: "error" */行内注释启用。
6 条规则验证明细(legacysyntax.cjs)
| 规则 | 实测行号 | 严重级别 | 状态 |
|---|---|---|---|
no-nonoctal-decimal-escape |
L8(×2) | error | ✅ 触发 |
no-octal |
L11 | error | ✅ 触发 |
no-with |
L16 | error | ✅ 触发 |
no-delete-var |
L22 | error | ✅ 触发 |
no-dupe-args |
L25 | error | ✅ 触发 |
preserve-caught-error |
L33 | error | ✅ 触发(行内注释) |
同文件连带触发的其他规则(与基线一致):no-undef L17(×3)/ L36、no-var L21、no-redeclare L25、no-unused-vars L32。
四、诊断分布统计
按严重级别(静态 292 条):
| 级别 | 数量 | 占比 |
|---|---|---|
| error(🔴) | 268 | 91.8% |
| warning(🟡) | 24 | 8.2% |
按规则类别(126 种):
| 类别 | 种数 | 说明 |
|---|---|---|
| core ESLint 规则 | 94 | @eslint/js 9.39.4 recommended + 插件精选规则 |
@typescript-eslint/ 规则 |
32 | ts.configs.recommended + 插件精选规则 |
按文件:common.js 210 · typescript.ts 65 · legacysyntax.cjs 14 · esm-demo.js 3。
注:插件报告中另有 AI 审查建议 12 条(common.js 4 / legacysyntax.cjs 4 / esm-demo.js 2 / typescript.ts 2),属 AI 增强能力,不计入静态规则覆盖口径。
五、实测环境判定
实测报告的文件路径与预期部署一致:
data\demo-eslint\src\legacysyntax.cjs(14 条诊断、无 parse-error →.cjs宽松模式解析生效,确认插件未发现任何工程配置、正确回退内置配置)data\demo-eslint\src\(common.js / esm-demo.js / typescript.ts,诊断数与基线完全相同)
配置路径验证:工程不含任何 eslint.config.* 与 .eslintrc*,插件按设计走「内置默认配置回退」路径。该路径与工作区打开方式无关(打开工程根或外层目录结果一致),292/292 逐条一致即为最终确认。
六、数据口径说明
| 项 | 说明 |
|---|---|
| 覆盖率口径 | 126 种 = 插件内置配置实际生效 125 种(@eslint/js 9.39.4 recommended + 精选规则)+ preserve-caught-error(由 .cjs 首行行内注释启用);纯规则口径,不含 parse-error |
| 比对引擎 | eslint 9.39.4 + @eslint/js 9.39.4 + typescript-eslint 8.60.1(与插件 package-lock.json 逐字一致) |
| 基线数据 | /data/user/work/results/round2-verify.json(本轮比对明细) |
| 已知口径差异 | 工程自检脚本 run-coverage.mjs(用工程自带 @eslint/js 10.0.1)计 294 条:多出的 1 条为 typescript.ts L189 preserve-caught-error(10.0.1 的 recommended 启用该规则、插件 9.39.4 内置配置未启用),属引擎版本口径差异,非插件缺陷 |
| 版本备注 | 测试机 typescript.ts 为 202 行版本(65 条);当前版(212 行)多 1 条 @typescript-eslint/no-unused-vars L188,同步与否均不影响 126 种全覆盖结论 |
七、结论与后续
demo-eslint 工程的插件实测验证完成:
- ✅ 插件行为零偏差(292/292 逐条一致)
- ✅ 内置配置全覆盖达成(126/126 种规则,零解析错误)
- ✅ 「内置配置回退」路径完整验证(工程无配置文件的场景)
报告生成于 2026-08-25 · demo-eslint 插件实测 · 比对脚本:round2-compare.mjs · 数据:round2-verify.json