Loading...
Loading...
Compare original and translation side by side
grepai trace calleesgrepai trace calleesgrepai trace calleesfunc ProcessOrder(order) {
validateOrder(order)
calculateTotal(order)
sendConfirmation(order.email)
}
│
↓
┌───────┴───────────────────┐
│ What does ProcessOrder │
│ call? │
├───────────────────────────┤
│ • validateOrder │
│ • calculateTotal │
│ • sendConfirmation │
└───────────────────────────┘grepai trace calleesfunc ProcessOrder(order) {
validateOrder(order)
calculateTotal(order)
sendConfirmation(order.email)
}
│
↓
┌───────┴───────────────────┐
│ What does ProcessOrder │
│ call? │
├───────────────────────────┤
│ • validateOrder │
│ • calculateTotal │
│ • sendConfirmation │
└───────────────────────────┘grepai trace callees "FunctionName"grepai trace callees "FunctionName"grepai trace callees "ProcessOrder"🔍 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"🔍 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{
"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"}
]
}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"}
]
}grepai trace callees "ProcessOrder" --toonNote:and--jsonare mutually exclusive.--toon
grepai trace callees "ProcessOrder" --toon注意:和--json参数互斥。--toon
grepai trace callees "ProcessOrder" --mode fastgrepai trace callees "ProcessOrder" --mode fastgrepai trace callees "ProcessOrder" --mode precise| Mode | Speed | Accuracy | Dependencies |
|---|---|---|---|
| ⚡⚡⚡ | Good | None |
| ⚡⚡ | Excellent | tree-sitter |
grepai trace callees "ProcessOrder" --mode precise| 模式 | 速度 | 准确率 | 依赖 |
|---|---|---|---|
| ⚡⚡⚡ | 良好 | 无 |
| ⚡⚡ | 优秀 | tree-sitter |
undefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedundefined| Command | Question | Use Case |
|---|---|---|
| Who calls me? | Impact analysis |
| What do I call? | Behavior analysis |
undefined| 命令 | 解决的问题 | 适用场景 |
|---|---|---|
| 谁调用了我? | 影响分析 |
| 我调用了什么? | 行为分析 |
undefinedundefinedundefinedundefinedundefinedundefinedundefinedgrepai trace callees "Login" --json | jq '.results[] | select(.callee | startswith("Test") | not)'grepai trace callees "Login" --json | jq '.results[] | select(.callee | startswith("Test") | not)'undefinedundefinedundefinedundefinedfunc 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
}validateOrderValidateLogPrintlnfunc ProcessOrder(order Order) error {
// 直接调用
validateOrder(order)
// 方法调用
order.Validate()
// 包函数
utils.Log("processing")
// 内置函数(可能会被捕获,也可能不会)
fmt.Println("done")
return nil
}validateOrderValidateLogPrintlnfunc process(fn func()) {
fn() // Callee is unknown at static analysis time
}func process(fn func()) {
fn() // 静态分析时无法确定被调用方
}undefinedundefinedundefinedundefinedgrepai trace callees "main" --json | jq -r '.results[].callee' | sort -ugrepai trace callees "main" --json | jq -r '.results[].callee' | sort -uundefinedundefinedundefinedundefined#!/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#!/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_languagesgrepai watch--mode precise--mode preciseenabled_languagesgrepai 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🔍 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