grepai-trace-callees by yoanbernabeu/grepai-skills
npx skills add https://github.com/yoanbernabeu/grepai-skills --skill grepai-trace-callees此技能涵盖使用 grepai trace callees 来查找特定函数调用的所有函数。
grepai trace callees 回答的问题是:"这个函数调用了什么?"
func ProcessOrder(order) {
validateOrder(order)
calculateTotal(order)
sendConfirmation(order.email)
}
│
↓
┌───────┴───────────────────┐
│ ProcessOrder 调用了什么? │
├───────────────────────────┤
│ • validateOrder │
│ • calculateTotal │
│ • sendConfirmation │
└───────────────────────────┘
grepai trace callees "FunctionName"
grepai trace callees "ProcessOrder"
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
输出:
🔍 Callees of "ProcessOrder"
Found 4 callees:
1. validateOrder
File: services/order.go:45
Context: validateOrder(order)
2. calculateTotal
File: services/order.go:48
Context: total := calculateTotal(order.Items)
3. applyDiscount
File: services/order.go:51
Context: total = applyDiscount(total, order.Coupon)
4. sendConfirmation
File: services/order.go:55
Context: sendConfirmation(order.Email, total)
grepai trace callees "ProcessOrder" --json
输出:
{
"query": "ProcessOrder",
"mode": "callees",
"count": 4,
"results": [
{
"file": "services/order.go",
"line": 45,
"callee": "validateOrder",
"context": "validateOrder(order)"
},
{
"file": "services/order.go",
"line": 48,
"callee": "calculateTotal",
"context": "total := calculateTotal(order.Items)"
},
{
"file": "services/order.go",
"line": 51,
"callee": "applyDiscount",
"context": "total = applyDiscount(total, order.Coupon)"
},
{
"file": "services/order.go",
"line": 55,
"callee": "sendConfirmation",
"context": "sendConfirmation(order.Email, total)"
}
]
}
grepai trace callees "ProcessOrder" --json --compact
输出:
{
"q": "ProcessOrder",
"m": "callees",
"c": 4,
"r": [
{"f": "services/order.go", "l": 45, "fn": "validateOrder"},
{"f": "services/order.go", "l": 48, "fn": "calculateTotal"},
{"f": "services/order.go", "l": 51, "fn": "applyDiscount"},
{"f": "services/order.go", "l": 55, "fn": "sendConfirmation"}
]
}
TOON 格式比 JSON 少用约 50% 的令牌:
grepai trace callees "ProcessOrder" --toon
注意:
--json和--toon是互斥的。
grepai trace callees "ProcessOrder" --mode fast
grepai trace callees "ProcessOrder" --mode precise
| 模式 | 速度 | 准确性 | 依赖项 |
|---|---|---|---|
fast | ⚡⚡⚡ | 良好 | 无 |
precise | ⚡⚡ | 优秀 | tree-sitter |
# 这个复杂函数是做什么的?
grepai trace callees "handleRequest"
# 映射数据流
grepai trace callees "processPayment"
# 这个函数调用了哪些外部服务?
grepai trace callees "syncData"
# 发生了哪些数据库操作?
grepai trace callees "saveUser"
# 这个函数有什么副作用?
grepai trace callees "updateProfile"
# 这个函数做的事情太多了吗?
grepai trace callees "doEverything" # 被调用函数很多 = 代码异味
# 为文档生成依赖项列表
grepai trace callees "initialize" --json | jq '.results[].callee'
| 命令 | 问题 | 使用场景 |
|---|---|---|
trace callers | 谁调用了我? | 影响分析 |
trace callees | 我调用了什么? | 行为分析 |
# 组合分析
grepai trace callers "processOrder" # 谁使用了这个?
grepai trace callees "processOrder" # 它做了什么?
# 获取被调用函数并仅过滤 .go 文件
grepai trace callees "main" --json | jq '.results[] | select(.file | endswith(".go"))'
grepai trace callees "Login" --json | jq '.results[] | select(.callee | startswith("Test") | not)'
# 统计数据库调用与 API 调用的数量
grepai trace callees "processOrder" --json | jq '.results[].callee' | grep -c "db"
追踪会找到:
func ProcessOrder(order Order) error {
// 直接调用
validateOrder(order)
// 方法调用
order.Validate()
// 包函数
utils.Log("processing")
// 内置函数(可能捕获,也可能不捕获)
fmt.Println("done")
return nil
}
找到的被调用函数:
validateOrderValidate(方法)Log(来自 utils)Println(取决于模式)func process(fn func()) {
fn() // 在静态分析时,被调用函数是未知的
}
对于递归依赖分析,请使用追踪图:
# 仅直接调用的函数
grepai trace callees "main"
# 完整的依赖树(递归)
grepai trace graph "main" --depth 3
grepai trace callees "main" --json | jq -r '.results[].callee' | sort -u
# processOrder 是否调用了 sendEmail?
grepai trace callees "processOrder" --json | jq -e '.results[] | select(.callee == "sendEmail")' && echo "Yes" || echo "No"
#!/bin/bash
echo "# 函数依赖关系报告"
echo ""
for fn in main initialize processOrder; do
echo "## $fn"
grepai trace callees "$fn" --json | jq -r '.results[].callee' | sed 's/^/- /'
echo ""
done
❌ 问题: 未找到函数 ✅ 解决方案: 检查拼写并确保函数存在于已索引的文件中
❌ 问题: 未找到被调用函数(但函数确实有调用) ✅ 解决方案:
--mode preciseenabled_languages 中grepai watch)❌ 问题: 遗漏了一些被调用函数
✅ 解决方案: 使用 --mode precise 以获得更好的准确性
追踪被调用函数的结果:
🔍 Callees of "ProcessOrder"
Mode: fast
Function found in: services/order.go:40
Found 4 callees:
1. validateOrder
File: services/order.go:45
Context: validateOrder(order)
2. calculateTotal
File: services/order.go:48
Context: total := calculateTotal(order.Items)
3. applyDiscount
File: services/order.go:51
Context: total = applyDiscount(total, order.Coupon)
4. sendConfirmation
File: services/order.go:55
Context: sendConfirmation(order.Email, total)
Tip: Use 'grepai trace graph ProcessOrder' for recursive analysis
每周安装量
293
代码仓库
GitHub 星标数
15
首次出现
2026年1月28日
安全审计
安装于
opencode237
codex228
gemini-cli211
github-copilot209
kimi-cli194
amp192
This skill covers using grepai trace callees to find all functions called by a specific function.
grepai trace callees answers: "What does this function call?"
func ProcessOrder(order) {
validateOrder(order)
calculateTotal(order)
sendConfirmation(order.email)
}
│
↓
┌───────┴───────────────────┐
│ What does ProcessOrder │
│ call? │
├───────────────────────────┤
│ • validateOrder │
│ • calculateTotal │
│ • sendConfirmation │
└───────────────────────────┘
grepai trace callees "FunctionName"
grepai trace callees "ProcessOrder"
Output:
🔍 Callees of "ProcessOrder"
Found 4 callees:
1. validateOrder
File: services/order.go:45
Context: validateOrder(order)
2. calculateTotal
File: services/order.go:48
Context: total := calculateTotal(order.Items)
3. applyDiscount
File: services/order.go:51
Context: total = applyDiscount(total, order.Coupon)
4. sendConfirmation
File: services/order.go:55
Context: sendConfirmation(order.Email, total)
grepai trace callees "ProcessOrder" --json
Output:
{
"query": "ProcessOrder",
"mode": "callees",
"count": 4,
"results": [
{
"file": "services/order.go",
"line": 45,
"callee": "validateOrder",
"context": "validateOrder(order)"
},
{
"file": "services/order.go",
"line": 48,
"callee": "calculateTotal",
"context": "total := calculateTotal(order.Items)"
},
{
"file": "services/order.go",
"line": 51,
"callee": "applyDiscount",
"context": "total = applyDiscount(total, order.Coupon)"
},
{
"file": "services/order.go",
"line": 55,
"callee": "sendConfirmation",
"context": "sendConfirmation(order.Email, total)"
}
]
}
grepai trace callees "ProcessOrder" --json --compact
Output:
{
"q": "ProcessOrder",
"m": "callees",
"c": 4,
"r": [
{"f": "services/order.go", "l": 45, "fn": "validateOrder"},
{"f": "services/order.go", "l": 48, "fn": "calculateTotal"},
{"f": "services/order.go", "l": 51, "fn": "applyDiscount"},
{"f": "services/order.go", "l": 55, "fn": "sendConfirmation"}
]
}
TOON format offers ~50% fewer tokens than JSON:
grepai trace callees "ProcessOrder" --toon
Note:
--jsonand--toonare mutually exclusive.
grepai trace callees "ProcessOrder" --mode fast
grepai trace callees "ProcessOrder" --mode precise
| Mode | Speed | Accuracy | Dependencies |
|---|---|---|---|
fast | ⚡⚡⚡ | Good | None |
precise | ⚡⚡ | Excellent | tree-sitter |
# What does this complex function do?
grepai trace callees "handleRequest"
# Map the data flow
grepai trace callees "processPayment"
# What external services does this call?
grepai trace callees "syncData"
# What database operations happen?
grepai trace callees "saveUser"
# What side effects does this function have?
grepai trace callees "updateProfile"
# Is this function doing too much?
grepai trace callees "doEverything" # Lots of callees = code smell
# Generate dependency list for docs
grepai trace callees "initialize" --json | jq '.results[].callee'
| Command | Question | Use Case |
|---|---|---|
trace callers | Who calls me? | Impact analysis |
trace callees | What do I call? | Behavior analysis |
# Combined analysis
grepai trace callers "processOrder" # Who uses this?
grepai trace callees "processOrder" # What does it do?
# Get callees and filter to only .go files
grepai trace callees "main" --json | jq '.results[] | select(.file | endswith(".go"))'
grepai trace callees "Login" --json | jq '.results[] | select(.callee | startswith("Test") | not)'
# Count how many database vs. API calls
grepai trace callees "processOrder" --json | jq '.results[].callee' | grep -c "db"
The trace finds:
func ProcessOrder(order Order) error {
// Direct call
validateOrder(order)
// Method call
order.Validate()
// Package function
utils.Log("processing")
// Built-in (may or may not be captured)
fmt.Println("done")
return nil
}
Callees found:
validateOrderValidate (method)Log (from utils)Println (depending on mode)func process(fn func()) {
fn() // Callee is unknown at static analysis time
}
For recursive dependency analysis, use trace graph:
# Direct callees only
grepai trace callees "main"
# Full dependency tree (recursive)
grepai trace graph "main" --depth 3
grepai trace callees "main" --json | jq -r '.results[].callee' | sort -u
# Does processOrder call sendEmail?
grepai trace callees "processOrder" --json | jq -e '.results[] | select(.callee == "sendEmail")' && echo "Yes" || echo "No"
#!/bin/bash
echo "# Function Dependencies Report"
echo ""
for fn in main initialize processOrder; do
echo "## $fn"
grepai trace callees "$fn" --json | jq -r '.results[].callee' | sed 's/^/- /'
echo ""
done
❌ Problem: Function not found ✅ Solution: Check spelling and ensure function exists in indexed files
❌ Problem: No callees found (but function has calls) ✅ Solutions:
--mode preciseenabled_languagesgrepai watch)❌ Problem: Missing some callees ✅ Solution: Use --mode precise for better accuracy
Trace callees result:
🔍 Callees of "ProcessOrder"
Mode: fast
Function found in: services/order.go:40
Found 4 callees:
1. validateOrder
File: services/order.go:45
Context: validateOrder(order)
2. calculateTotal
File: services/order.go:48
Context: total := calculateTotal(order.Items)
3. applyDiscount
File: services/order.go:51
Context: total = applyDiscount(total, order.Coupon)
4. sendConfirmation
File: services/order.go:55
Context: sendConfirmation(order.Email, total)
Tip: Use 'grepai trace graph ProcessOrder' for recursive analysis
Weekly Installs
293
Repository
GitHub Stars
15
First Seen
Jan 28, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
opencode237
codex228
gemini-cli211
github-copilot209
kimi-cli194
amp192
React 组合模式指南:Vercel 组件架构最佳实践,提升代码可维护性
106,200 周安装