资讯详情

grepai调用图提取技术揭秘:tree-sitter AST与正则双模式解析10+种编程语言

📅 2026/10/11 3:20:42 | 华诺云谱 👁 阅读
grepai调用图提取技术揭秘:tree-sitter AST与正则双模式解析10+种编程语言
grepai调用图提取技术揭秘tree-sitter AST与正则双模式解析10种编程语言【免费下载链接】grepaiSemantic Search Call Graphs for AI Agents (100% Local)项目地址: https://gitcode.com/gh_mirrors/gr/grepaigrepai 是一款 100% 本地运行的 AI 时代代码搜索工具其调用图提取Call Graph能力可回答谁调用了这个函数这个函数又依赖谁这类关键问题。本文揭秘其底层实现通过tree-sitter AST 精确解析与正则快速解析双模式引擎支持 Go、Python、JavaScript、TypeScript 等10 种编程语言的符号提取与调用链追踪全程无需任何云端服务。为什么 AI Agent 需要调用图想象一下你要修改ProcessPayment函数但不敢确定它影响范围。grepai 的trace命令可以瞬间给出答案callers调用者谁在调用它callees被调用者它依赖哪些函数graph调用图以指定深度展开完整调用链这正是 grepai 面向 AI Agent 场景设计的核心能力之一——用结构化上下文替代原始搜索结果大幅降低 token 消耗。双模式架构一个接口两种引擎整个提取系统围绕一个统一接口设计定义在 trace/trace.gotype SymbolExtractor interface { ExtractSymbols(...) // 提取符号定义函数、方法、类… ExtractReferences(...) // 提取引用函数调用、属性读写… Mode() string // 返回 fast 或 precise }模式引擎特点适用场景⚡fast默认正则模式零额外依赖、速度极快大型代码库、日常使用precisetree-sitter AST 模式精确解析、可提取文档注释复杂代码、精度优先一条命令即可切换grepai trace callers Login --mode fast grepai trace callers Login --mode precise模式参数定义见 cli/trace.go也可在.grepai/config.yaml中通过trace.mode固定配置。正则模式轻量而聪明的快速通道每种语言一套模式表正则模式的核心是一张语言模式注册表trace/patterns.go每种语言定义了五类定义模式函数、方法、类、接口、类型和两类调用模式函数调用、方法调用。以 Go 为例trace/patterns.go// func FunctionName(params) Functions: regexp.MustCompile((?m)^func\s([A-Za-z_][A-Za-z0-9_]*)\s*\() // func (r *Receiver) MethodName(params) Methods: regexp.MustCompile((?m)^func\s\(\w\s\*?([A-Za-z_][A-Za-z0-9_]*)\)\s([A-Za-z_][A-Za-z0-9_]*)\s*\()提取器 trace/extractor.go 按扩展名匹配模式从每个匹配中还原出符号名、行号、签名和是否导出等信息。两个精巧的细节注释与字符串屏蔽正则匹配最怕误伤——注释里的foo()会被当成调用吗不会。buildIgnoredMasktrace/extractor.go先用一个状态机扫描全文把行注释、块注释、字符串字面量全部标记为忽略区还专门处理了 F# 的(* *)嵌套块注释和 Lua 的--[[ ]]长字符串。函数边界定位调用图需要知道这次调用发生在哪个函数体内。边界检测按语言特性分三路走trace/extractor.go大括号语言Go、JS、C、Rust…→ 计数配对{}跳过字符串干扰缩进语言Python、F#→ 找到下一行缩进不深的语句Lua → 追踪function到end的嵌套连状态读写都能追踪对 JavaScript/TypeScriptgrepai 还额外提取属性读写引用store.uid ...算 write、this.count.value算 read甚至识别 Vue/Pinia 的storeToRefs解构别名。这让前端状态流也能纳入分析——grepai refs readers uid就能找到所有读取该状态的位置。tree-sitter 模式AST 精确解析precise 模式trace/extractor_ts.go为每种语言内置了 tree-sitter 语法解析器直接遍历抽象语法树按节点类型识别function_declaration、method_declaration等通过命名字段精准取符号名和接收者类型Go 方法的 receiver顺带提取docstring文档注释trace/extractor_ts.go为 AI 提供语义描述天然免疫正则的误报注释、字符串里的伪调用在 AST 里根本不是调用节点亮点自研 F# 语法绑定主流语言的解析器可直接引用现成库但 F# 需要完整的语法文件。grepai 项目内直接维护了一份 F# tree-sitter 语法fsharp/ 目录其中parser.c是超过 80 万行的生成代码通过 CGO 绑定接入fsharp/binding.go。这就是为什么精确模式能覆盖 C# 和 F# 这类少见的 .NET 语言。 注意precise 模式需要 CGO 依赖须以treesitter构建标签编译默认构建即为 fast 模式开箱即用。10 种语言支持一览语言扩展名正则模式tree-sitter 模式Go.go✅✅TypeScript.ts.tsx✅✅JavaScript.js.jsx✅✅Python.py✅✅PHP.php✅✅C#.cs✅✅F#.fs.fsx.fsi✅✅C.c.h✅—C.cpp.hpp.cc.cxx✅—Rust.rs✅—Zig.zig✅—Java.java✅—Lua.lua✅—Pascal/Delphi.pas.dpr✅—完整列表参见官方文档 docs/src/content/docs/trace.md。从符号到调用图边是如何连起来的数据流非常清晰符号索引grepai watch启动守护进程文件变更时自动增量提取边构建每条引用若能定位到所在函数调用者就生成一条CallEdge调用者 → 被调用者含文件与行号逻辑见 trace/store.go图查询GetCallGraph从根符号出发按 BFS 逐层展开--depth N控制深度持久化索引保存在项目本地的.grepai/symbols.gob代码永远不出本机grepai watch # 后台索引自动保鲜 grepai trace callers ValidateToken # 谁调用了它 grepai trace graph AuthMiddleware --depth 2 --json # 结构化输出喂给 AI工作区模式下--workspace还能跨项目聚合调用图——前端调后端 API 的完整链路一目了然。总结grepai 调用图提取的设计哲学可以概括为一句话接口统一、双轨并行、本地闭环。 正则模式负责广——14 种语言开箱即用无依赖、速度快 tree-sitter 模式负责准——AST 级别解析 docstring啃下复杂代码 所有结果落到.grepai/symbols.gob本地文件AI Agent 通过--json即取即用无论你是想评估一次重构的影响面还是给 AI 喂上精准的调用上下文这套双模式解析引擎都是背后可靠的支撑。更多使用细节可查看官方文档 docs/src/content/docs/trace.md 与快速上手指南 docs/src/content/docs/quickstart.md。【免费下载链接】grepaiSemantic Search Call Graphs for AI Agents (100% Local)项目地址: https://gitcode.com/gh_mirrors/gr/grepai创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑