Skip to content

多语言解析

IGraph 使用 tree-sitter 驱动的 5-Pass 流水线,将源代码解析为结构化的符号节点与关系边。

支持的语言

语言扩展名提取内容
TypeScript.ts .tsx .mts .cts函数、类、接口、类型别名、组件、Hook、变量
JavaScript.js .jsx .mjs .cjs函数、类、组件、变量
Python.py .pyi函数、类、装饰器、变量
Go.go函数、方法(含 receiver)、类型(struct/interface)、常量、变量
Java.java类、接口、枚举、方法、字段

5-Pass 解析流水线

IGraph 对每个源文件执行五轮遍历,逐步构建完整的符号图谱:

  1. Pass 1 — 导出符号提取:使用 tree-sitter AST 提取 export 的函数、类、组件等符号节点,同时收集 extends / implements 占位
  2. Pass 2 — 内部符号提取:提取非导出的模块级符号(内部函数、类、变量等)
  3. Pass 3 — 导入解析:解析 import / require 语句,建立文件间 imports 依赖边
  4. Pass 4 — 调用分析:分析函数体内的调用表达式,建立 calls 关系边(优先级:本文件 > 导入 > 同目录 > 全局弱匹配)
  5. Pass 5 — 引用解析:处理类型引用、JSX 组件使用,建立 refs 关系边

提取的节点类型

类型说明示例
function普通函数或箭头函数function verify() / const fn = () => {}
method类方法或 Go 方法(带 receiver)func (s *Server) Start() / public void handle()
class类定义class UserService
componentReact / Vue 组件function App() (返回 JSX)
hookReact Hookfunction useAuth()
variable模块级变量 / 常量const CONFIG = {}
type类型别名 / 接口interface User / type ID = string
module文件模块节点(每个文件自动生成)作为 imports 边的源节点

提取的关系类型

关系说明
callsA 函数调用 B 函数
imports文件 A 导入文件 B
extends类 A 继承类 B
implements类 A 实现接口 B
exports文件导出符号
refs类型引用或 JSX 组件使用

配置解析器

.igraph/config.jsonparser 部分:

json
{
  "parser": {
    "languages": ["typescript", "javascript", "python", "go", "java"],
    "include": ["src/**/*", "lib/**/*"],
    "exclude": ["node_modules/**", "dist/**", "**/*.test.*"]
  }
}
  • languages:启用的语言列表
  • include:文件包含 glob 模式(默认 ["**/*"]
  • exclude:文件排除 glob 模式

Released under the MIT License