首页 › Tree-sitter AST 抽取
Tree-sitter AST 抽取(19 种语言)
Graphify 的第一阶段是对代码文件做确定性的 Tree-sitter 遍历。无 LLM、无向量、无网络调用,直接把 AST 节点映射为图节点与关系边。
为什么选择 Tree-sitter
Tree-sitter 是成熟的增量解析器体系,覆盖主流语言。Graphify 选择它的核心原因:
- 源码不出本机。 AST 阶段完全本地执行;仅后续文档/论文/图像语义阶段会调用模型,并且发送的是语义描述而非原始源码。
- 速度稳定。 解析复杂度接近 O(文件大小),中等仓库通常数秒级完成。
- 结构统一。 各语言最终输出统一节点/边结构,便于后续 Leiden 聚类直接消费。
支持语言
Graphify 开箱支持 19 种语言:
| 类别 | 语言 |
|---|---|
| 脚本 | Python, JavaScript, TypeScript, Ruby, PHP, Lua, PowerShell |
| 系统 | Go, Rust, C, C++, Zig, Swift, Objective-C |
| JVM / .NET | Java, Kotlin, Scala, C# |
| BEAM | Elixir |
新增语言通常只需要引入对应 grammar,并补一个节点映射器。
AST 阶段会提取什么
- 结构节点:类、函数、方法、模块、接口/trait、顶层变量。
- 调用边:解析到的调用点写为
calls,标记EXTRACTED、置信度1.0。 - 导入边:模块级
imports,防止跨文件关系断裂。 - 动机节点:docstring 以及
# NOTE:/# IMPORTANT:/# WHY:等注释,挂到rationale_for。
确定性与语义推断如何协同
AST 产物统一标记为 EXTRACTED(可验证事实)。语义阶段(面向文档/论文/图像)会产出 INFERRED 和置信度;不确定项标记 AMBIGUOUS。这些标记会保留到 graph.json,方便审计与复核。