CodeGraph 是什么
本页说明 CodeGraph 能回答哪些问题、答案从何而来,以及它的边界在哪里。
CodeGraph 用 tree-sitter 解析一次仓库,把所有符号以及符号之间的调用、导入和引用记录到本机的 SQLite 索引中,再基于这份索引回答结构性问题:
- 这个函数在哪里定义,内容是什么?
- 谁调用了它,它又调用了什么?
- 改动它会影响哪些符号和文件,包括调用方的调用方?
- 一个函数是怎样一步步调用到另一个函数的?
- 哪些测试能覆盖到这段代码?
文本搜索只认字符串,分不清真正的调用和注释里出现的同名文字,分不清某个方法和另一个类型上的同名方法,也分不清直接调用方和三层之外的调用方。CodeGraph 依据解析出的结构作答。
工作方式
- 解析:按语言用对应的语法解析每个文件,把函数、类、方法、导入、调用点和引用变成节点和边。
- 匹配引用:跨文件把引用匹配到定义,先看导入,再按名称匹配。每条边都记录匹配方式和置信度,匹配不到任何定义的引用保持未解析。
- 存储:节点、边和全文检索索引写入项目
.codegraph/目录下的 SQLite 数据库。SQLite 已内置在可执行文件中。 - 查询:所有命令和工具都读取这份索引,回答问题时不会重新扫描仓库。
- 保持最新:后台进程监听项目文件,重新索引发生变化的文件,详见保持索引最新。
一份索引,三个入口
| 入口 | 适用对象 | 从这里开始 |
|---|---|---|
| 命令行 | 你本人、脚本和 CI | codegraph explore、codegraph search、codegraph impact |
| MCP 服务 | 编码 Agent 和编辑器 | codegraph serve --mcp,由 codegraph install 写入各 Agent 的配置 |
| 浏览器查看器 | 阅读不熟悉的代码 | CODEGRAPH_UI=1 codegraph ui(预览) |
命令行和 MCP 工具运行的是同一个引擎。codegraph explore 打印的内容与 codegraph_explore 工具返回给 Agent 的内容完全一致,你可以直接核对 Agent 看到了什么。
每次都是同一个答案
CodeGraph 不包含任何模型:没有 embedding,没有向量检索,也没有语言模型。解析和引用匹配都是确定的,同样的文件和配置得到同样的索引,同样的问题在任何机器上都返回同样的答案。增量的 codegraph sync 与完整重建的结果一致,项目的测试逐字节检查这一点。
它不做什么
- 不做相似度检索:它回答代码中真实存在的结构,不能按「意思相近」查找代码。
- 不评判代码:它给出关系和影响范围,代码是否正确仍由编译器、lint 工具和测试判断。
- 看不到运行时行为:反射、运行时注册的回调和由字符串拼出的调用没有静态的边,经过它们的路径不会出现。经由接口或 trait 分发到多个实现的调用会如实标出,不会被归到其中某一个实现上。
- 语言范围是固定的:CodeGraph 不能解析的语言,其文件不会进入图中。各档能提取的内容见语言参考。