SuperAPI AI 工具集

type-inference

编程与开发

查看项目

更新于 10-15 17:26

技能介绍

用途:该技能面向 Biome 中 JavaScript 与 TypeScript 的类型推断开发,包括原始类型收集、Salsa 支撑的推断值、分析器请求、tracked query(通配查询)以及推断相关测试。CSS 与 HTML 模块图数据不在范围内,除非直接参与 JS/TS 推断;通用 lint 脚手架、诊断、快照或 changeset 应加载对应技能。

核心模型:推断分五层,即语法与语义收集 -> 原始模块表 -> 面向分析器的请求 -> Salsa tracked query -> resolver 辅助函数。需区分三个类型世界:原始收集器使用 TypeData、TypeReference 等,描述模块内语法与声明;数据库侧使用 InferredTypeData、LocalTypeHandle 等;面向分析器使用 InferredType。推断数据归属于声明它的模块,不得跨模块复制。

选择边界:优先检查原始局部信息,结论充分即返回;否则解析最小引用,必要时保留不确定性或拓宽,最完整模块推断为最后手段。infer_module_types 服务于需要完整表的契约;infer_module_types_bottom_up 是未跟踪的外部调度器,不得从新的 tracked query 调用。

类型感知 lint 规则:需在规则元数据中声明 &[RuleDomain::Types],使用 Typed<N> 作为规则查询,调用 RuleContext 上由 TypedService 支撑的推断方法,并将分类显式处理为 Match、NoMatch 或 Indeterminate。

修改原始推断:在 type_data.rs 定义原始表示,在 local_inference.rs 或 collector.rs 收集并将未解析操作数保留为 TypeReference,在 interned_types.rs 转换,必要时才在 db/type_inference/ 下添加求值,并审计匹配、遍历与格式化。

请求与查询:请求位于 type_inference/requests/,用于可复用结果契约而非单条规则。新增 tracked query 须返回最小语义结果、接收数据库与一个 Salsa 输入、只读相关依赖、定义缺失输入与循环等行为、保留 Unknown/Indeterminate,并具备正确性与选择性执行测试。

结果语义:None、Unknown、UnknownKeyword、Indeterminate、Match、NoMatch 含义不同,未知或不确定不是否定结果,应保留以避免误报。解析时不得为另一模块创建 ResolutionCtx 递归;应跨 tracked query 或预算边界。

测试与性能:按受影响的最小边界测试(收集器、请求/查询、Salsa 事件、分析器 fixture)。使用模块图指南中的维护 profile,请求与查询计时不可相加。

限制:资料未提供具体命令、安装方式、收费或平台信息;上述四种已检入文件被视为遗留残留,除非任务明确涉及迁移。