用途
GrepAI Trace Callers 用于查找调用某个特定函数或方法的所有代码位置,即回答“谁调用了这个函数?”。典型使用场景包括:重构前查找函数的全部使用点、理解函数依赖关系、变更前的影响分析,以及代码导航与探索。
主要能力
- 查找调用者:给定函数名,返回调用该函数的调用者名称、文件路径、行号与调用上下文。
- 多种输出格式:默认人类可读输出;
--json输出结构化 JSON;--json --compact输出面向 AI 优化的紧凑 JSON;--toon(v0.26.0+)输出 TOON 格式,据资料称比 JSON 减少约 50% token。注意--json与--toon互斥。 - 两种提取模式:
- fast(默认):使用正则模式,速度快、无依赖。
- precise:使用 tree-sitter AST 解析,更准确,但需要 tree-sitter。
- 配置能力:可在
.grepai/config.yaml中配置 trace 的 mode(fast 或 precise)、enabled_languages(如 .go、.js、.ts、.py、.php、.rs)以及 exclude_patterns(如*_test.go、*.spec.ts)。 - 支持语言:Go(.go)、JavaScript(.js、.jsx)、TypeScript(.ts、.tsx)、Python(.py)、PHP(.php)、C/C++(.c、.h、.cpp、.hpp、.cc、.cxx)、Rust(.rs)、Zig(.zig)、C#(.cs)、Java(.java)、Pascal/Delphi(.pas、.dpr)。
使用方式
基本命令:
grepai trace callers "FunctionName"
示例:
grepai trace callers "Login"
输出示例(人类可读):
🔍 Callers of "Login"
Found 3 callers:
1. HandleAuth
File: handlers/auth.go:42
Context: user.Login(ctx, credentials)
2. TestLoginSuccess
File: handlers/auth_test.go:15
Context: result := Login(testUser, testPass)
3. RunCLI
File: cmd/main.go:88
Context: err := auth.Login(username, password)
JSON 输出:
grepai trace callers "Login" --json
输出结构包含 query、mode、count 与 results 数组,results 中每项含 file、line、caller、context。
紧凑 JSON(AI 优化):
grepai trace callers "Login" --json --compact
输出使用 q、m、c、r 等短键,r 中每项含 f、l、fn。
TOON 输出(v0.26.0+):
grepai trace callers "Login" --toon
指定提取模式:
grepai trace callers "Login" --mode fast
grepai trace callers "Login" --mode precise
配置示例(.grepai/config.yaml):
trace:
mode: fast # fast or precise
enabled_languages:
- .go
- .js
- .ts
- .py
- .php
- .rs
exclude_patterns:
- "*_test.go"
- "*.spec.ts"
适用场景
- 重构前:重命名前查找全部使用点,例如
grepai trace callers "getUserById";修改签名前评估影响,例如grepai trace callers "processPayment"。 - 理解代码库:查找核心函数的使用者,例如
grepai trace callers "validateToken";查找模块入口,例如grepai trace callers "initialize"。 - 调试:定位问题函数的调用来源,例如
grepai trace callers "problematicFunction"。 - 代码审查:批准变更前验证函数使用情况,例如
grepai trace callers "deprecatedMethod"。 - 与语义搜索结合:
grepai search "user login authentication"查找 Login 做什么,grepai trace callers "Login"查找谁使用 Login。 - 脚本化使用:Bash 中可用 jq 统计调用者数量、提取调用者函数名或文件路径;Python 中可通过 subprocess 调用并解析 JSON。
限制与注意事项
- 函数名区分大小写,需使用准确名称。
- 若函数名过于常见(如
get),结果可能包含无关代码,产生大量误报;建议使用更具体的名称,或通过 jq 按路径过滤,或在配置中添加排除模式。 - 若未找到调用者,可检查函数名拼写、确认文件类型在 enabled_languages 中,并运行
grepai watch更新符号索引。 - 若遗漏部分调用者,可尝试
--mode precise提高准确性,并检查文件是否位于忽略模式中。 - precise 模式依赖 tree-sitter。
--json与--toon互斥。- 最佳实践:使用精确函数名、先运行
grepai watch检查符号索引、脚本中使用 JSON、结合语义搜索、对大量结果使用 jq 或 grep 过滤。
暂未提供的信息
资料未提供该技能的收费、价格、平台限制或具体性能数据。