用途:解决测试中“用复制清单枚举领域”的隐患——手写列表通过测试却无法证明完整性,注册表新增成员时复制清单会静默漂移。同时回答“谁声明了哪些领域重要”的问题。
主要能力:
- totality_lint.py:报告复制领域的测试,可检出 sampled-domain(参数化或 for 循环使用源注册表的严格子集,并指出未覆盖成员)、ratchet-broken(标记 ratchet 的手写列表引用了注册表已不存在的成员,静态检出)、unratcheted(活枚举注册表但无成员固定)、no-floor(迭代活注册表却无 len(...) >= n 断言)、stale-ack(已覆盖全领域却仍标记)。
- claims.py:识别 docstring 以 invariant: 开头的测试作为“声明”,继承其测试的通过/失败;报告 unrefuted(无人见过其失败的声明)、literal(声明测试迭代注册表副本)、unanchored(无任何不变量命名的注册表)。
使用方式: python3 scripts/totality_lint.py <repo> python3 scripts/totality_lint.py <repo> --json python3 scripts/totality_lint.py <repo> --strict python3 scripts/totality_lint.py --selftest python3 scripts/claims.py <repo> [--json] [--strict] [--selftest] 可在测试中写 # totality: partial — <原因>(或置于 docstring)表明部分领域是有意为之;写 # totality: ratchet — <原因> 固定手写清单。
限制:仅支持 Python,提取器为 _registries_py 与 _domains_py;默认只报告不阻断,--strict 才返回非零退出码;注册表定义为至少三个成员的常量集合(dict/set/tuple/list 字面量或 Enum);多参数 parametrize 表格不在范围内;注册表按键集合建模,值交换不可见;重命名可绕过 ratchet;新建注册表不被门禁覆盖;装饰器构建的注册表不可见;可达性基于路径,可能漏掉不相连的集成测试;拆分与合并不可见;声明通过不等于声明正确。其他语言、平台及价格信息暂未提供。