3 分•作者: rabbiveesh•4 个月前
基于 ts-parser-perl 和 tower-lsp,使用 Rust 构建。通过图遍历(值边、调用流边)来观察“袋”(bags)。 工作原理: - 通过遍历解析树来构建“见证”(witnesses)和“作用域”(scopes)。完全已知的值会获得具体的类型,否则它们会得到一个指向我们拥有的该符号的最后一个“见证”的边。 - 一个工作列表(worklist)运行至不动点:约简器(reducers)折叠(fold)每个符号的“见证”并追逐边。此时,“见证袋”就完成了,可以使用了。 - 所有下游功能都是对“袋”的查询,沿着相关的图边进行。 可扩展性 - 您可以引入自己的 Rhai 插件来快捷处理常见模式(导出器和 OOP 框架),甚至添加新的定义类型(工作任务和 Web 路由)。 构建/查询时序的边区分允许您进行后期绑定类型,这与 Perl 本身的工作方式非常相似:`Foo->new` 无法确定是 Foo 的构造函数还是调用子名 `Foo` 上的方法;后期绑定允许您在工作列表折叠后进行此调用。