用途:回答“哪些源文件没有任何测试文件引用其声明的符号?”这一问题,用于在编写新测试前静态、快速地定位测试缺口,无需构建、依赖解析或编译。
主要能力:支持 Python、TypeScript、TSX、JavaScript、Go、Java、Rust、C#、Ruby。递归扫描仓库,按各语言路径约定区分源码与测试文件,解析顶层声明与导入,并通过导入解析和标识符重叠将测试文件与源文件配对,输出未测试源码列表(按声明数量降序)、建议的测试路径及孤立测试文件。
使用方式:需 Python 3.10+,安装 pip install tree-sitter-language-pack。运行 python scripts/find_untested_sources.py <repo-root>,可用 --lang 限定语言(可重复)、--limit-untested N 截断列表、--include-tested 输出已测试源码。诊断信息输出到 stderr,JSON 输出到 stdout。
适用场景:跨多语言仓库统一查找测试缺口;用户询问“该在哪里加测试”“哪些文件没有测试”;在调用测试生成代理前生成优先级工作列表;生成测试后验证新测试文件是否配对到目标源码。
限制:纯静态启发式分析,牺牲少量准确性换取远低于覆盖率工具的成本。反射/依赖注入解析的类型不会被标识符扫描捕获;短于 4 字符的标识符被丢弃;跨语言测试被记为孤立测试;单体仓库路径别名不解析,后缀匹配可能选错文件;C# 命名空间消歧被跳过,纯 .NET 仓库应优先使用 find-untested-sources。确切强弱需对未配对候选文件运行真实覆盖率验证。