# 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` 单文件解决,机制如下: 1. **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"`(宽松模式)解析,无需任何配置文件。 2. **`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 工程的插件实测验证完成**: 1. ✅ 插件行为零偏差(292/292 逐条一致) 2. ✅ 内置配置全覆盖达成(126/126 种规则,零解析错误) 3. ✅ 「内置配置回退」路径完整验证(工程无配置文件的场景) --- *报告生成于 2026-08-25 · demo-eslint 插件实测 · 比对脚本:`round2-compare.mjs` · 数据:`round2-verify.json`*