尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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),仅供参考
RELATED

相关推荐

从零到85%:老项目测试覆盖率提升的完整实践路线

从零到85%:老项目测试覆盖率提升的完整实践路线

上个月帮一个开源团队看代码质量,他们的组件被某大型项目引入后,集成测试阶段连续抛异常。我打开仓库先问了一句:你们有没有自动化测试?回复说:有一两个冒烟脚本,能保证编译跑通。那一刻我特别想把这段对话…

📅 2026/10/11 3:20:36
MFC图表控件ChartCtrl的VS2015移植实战:从修复到性能优化

MFC图表控件ChartCtrl的VS2015移植实战:从修复到性能优化

简介:这是一套基于MFC的老牌ChartCtrl图表控件源码,已优化适配VS2015工程,面向具备基础C/MFC知识、需要在桌面程序中展示动态或静态数据的开发者,可直接嵌入Demo项目或自行编译运行。控件功能实用,支持折线图、柱状图、…

📅 2026/10/11 3:15:36
AI代理批量创建PostgreSQL数据库的自动化实践与避坑指南

AI代理批量创建PostgreSQL数据库的自动化实践与避坑指南

这几天技术社区里讨论最热闹的一个话题,是“AI代理批量创建数据库”。3月19日的 PostgreSQL 技术日报,我本来只想按惯例整理点版本动态和社区新闻,结果发现大家真正在传的、在争论的,根本不是某个补丁,而是 AI 代理开始…

📅 2026/10/11 3:15:36
MORE NEWS

更多资讯

📰

医学图像分割实战:ISBI 2015数据集格式转换与预处理全攻略

简介:面向医学图像分割任务(如视网膜血管分割)的ISBI 2015挑战赛数据集,适合科研人员、竞赛选手及深度学习入门者作为基准数据使用,可用于算法复现与效果对比。压缩包内含训练集约160张带标注图像,共234个文…

📰

Netlify部署实战:前端项目从本地到线上的完整上线指南

做前端这些年,我把不少个人项目、小Demo、甚至帮朋友临时做的落地页都放在本地文件夹里。能跑,但别人访问不了,这其实称不上一个真正的网站。直到我把第一个项目通过 Netlify 推到线上,从提交代码到线上生效不到一分钟&#xff0c…

📰

Hermes Agent + 本地 Gemma 4 + 微信接入:用 TaoToken 统一 Key 打通私有 AI 助手全链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

[题解]2024CCPC河北省赛-Goose Goose Duck:贪心构造与堆维护的赛时实现拆解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

浙江EAC认证代办怎么选?这份避坑指南请收好

浙江EAC认证代办怎么选?这份避坑指南请收好最近有好多浙江的制造企业主来找我,问的都是同一个问题:出口俄罗斯的EAC认证到底该找谁办?说实话,这个问题背后藏着的焦虑我特别理解——网上搜一圈,代理机构五花…

📰

128路矩阵开关:把测试系统的物理接线变成软件路由

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬