Skip to content

三个 check:* 脚本的扫描根消失时返回空数组而不是报错 —— 目录一改名,门禁在零个文件上报绿 #4930

Description

@xuyushun441-sys

未认领。 实现 #4916 时按议题要求顺带扫了 scripts/ 下的同形状静默跳过,这三条与 #4916同一个缺陷,但在别的脚本里;不在那条 PR 的范围内(改了会让它失焦),按 Prime Directive #10 单独归档。

形状

#4916 一模一样:脚本声明一个扫描根,walker 在读不到该目录时返回空而不是抛错,于是根一改名 → 收集到 0 个文件 → 循环一次都不进 → errors 为空 → exit 0,门禁绿。区别只在于 #4916 的空 catch {} 让 N 变小,这三条让 N 变成 0 —— 更彻底,同样安静。

1. scripts/check-single-authz-resolver.mjs:38

function walk(dir, out = []) {
  let entries;
  try { entries = readdirSync(dir); } catch { return out; }

唯一扫描根是 walk(join(ROOT, 'packages'))packages/ 改名 → 零文件 → "没有重复的 authz resolver",绿。

值得注意的是同一个文件里已经有正确写法:第 71 行处理 DELEGATORS 缺失时是 errors.push('Delegator missing: ' + rel),响亮。修法照抄本文件下方即可。

2. scripts/check-startup-registry-verdict.mjs:217-222

function collectSourceFiles(dir, out = []) {
    let entries;
    try { entries = readdirSync(dir); } catch { return out; }

第 846 行 collectSourceFiles(scanRoot) —— scanRoot 解析不到时同样静默返回 0 个文件。这个脚本的注释里写了整整一屏"启动期把没验证的东西写成 verified 有多危险",而它自己在扫不到源码时会给出一个空的 verdict。

3. scripts/check-driver-conformance.mjs:147-152

const listDir = (dir) => { try { return readdirSync(dir); } catch { return []; } };

DRIVERS_DIR = join(ROOT, 'packages', 'plugins')(第 79 行)。packages/plugins/ 改名 → 零个 driver → "所有 driver 都合规",绿。

判定为不同形状、不建议一起改

  • scripts/check-changeset-fixed.mjs / check-override-consistency.mjs —— catch { continue; } 出现在 glob 展开的中途(readdirSync 某个 * 段、JSON.parse 某个 package.json)。这是在遍历一个本来就可能不存在的候选集合,不是"声明的根消失了",跳过是对的。
  • scripts/check-nul-bytes.mjs:168 —— 读不到时 skipped.unreadable.push(file),记账了,不是静默。
  • scripts/check-changeset-no-major.mjs:76 —— 没有 .changeset/ 时明确 console.log 后 exit 0,是声明过的行为,不是吞掉。

建议的修法

#4916 落地的一致:扫描前先校验根可解析,不可解析就点名报错退出,不要加"可选根"开关;并把红-绿双向证明折进各脚本已有的自检(有的话)。三条可以一条 PR 一起改,也可以拆 —— 但不要#4916 合并,那条 PR 的范围是 check-doc-authoring.mjs

关联

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions