home / skills / yoanbernabeu / grepai-skills / grepai-trace-callees

grepai-trace-callees skill

/skills/trace/grepai-trace-callees

This skill identifies all functions called by a target function using GrepAI trace to map dependencies and aid code understanding.

npx playbooks add skill yoanbernabeu/grepai-skills --skill grepai-trace-callees

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
7.7 KB
---
name: grepai-trace-callees
description: Find function callees with GrepAI trace. Use this skill to discover what functions a specific function calls.
---

# GrepAI Trace Callees

This skill covers using `grepai trace callees` to find all functions called by a specific function.

## When to Use This Skill

- Understanding function dependencies
- Mapping function behavior
- Finding deeply nested dependencies
- Code comprehension and documentation

## What is Trace Callees?

`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        │
└───────────────────────────┘
```

## Basic Usage

```bash
grepai trace callees "FunctionName"
```

### Example

```bash
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)
```

## JSON Output

```bash
grepai trace callees "ProcessOrder" --json
```

Output:
```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)"
    }
  ]
}
```

## Compact JSON (AI Optimized)

```bash
grepai trace callees "ProcessOrder" --json --compact
```

Output:
```json
{
  "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"}
  ]
}
```

## Extraction Modes

### Fast Mode (Default)

```bash
grepai trace callees "ProcessOrder" --mode fast
```

### Precise Mode

```bash
grepai trace callees "ProcessOrder" --mode precise
```

| Mode | Speed | Accuracy | Dependencies |
|------|-------|----------|--------------|
| `fast` | ⚡⚡⚡ | Good | None |
| `precise` | ⚡⚡ | Excellent | tree-sitter |

## Use Cases

### Understanding Function Behavior

```bash
# What does this complex function do?
grepai trace callees "handleRequest"

# Map the data flow
grepai trace callees "processPayment"
```

### Finding Dependencies

```bash
# What external services does this call?
grepai trace callees "syncData"

# What database operations happen?
grepai trace callees "saveUser"
```

### Code Review

```bash
# 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
```

### Documentation

```bash
# Generate dependency list for docs
grepai trace callees "initialize" --json | jq '.results[].callee'
```

## Callers vs Callees

| Command | Question | Use Case |
|---------|----------|----------|
| `trace callers` | Who calls me? | Impact analysis |
| `trace callees` | What do I call? | Behavior analysis |

```bash
# Combined analysis
grepai trace callers "processOrder"   # Who uses this?
grepai trace callees "processOrder"   # What does it do?
```

## Filtering Results

### By File Type

```bash
# Get callees and filter to only .go files
grepai trace callees "main" --json | jq '.results[] | select(.file | endswith(".go"))'
```

### Exclude Test Functions

```bash
grepai trace callees "Login" --json | jq '.results[] | select(.callee | startswith("Test") | not)'
```

### Count by Category

```bash
# Count how many database vs. API calls
grepai trace callees "processOrder" --json | jq '.results[].callee' | grep -c "db"
```

## What Callees Includes

The trace finds:
- Direct function calls
- Method calls
- Built-in function calls (depending on mode)

### Example

```go
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:
- `validateOrder`
- `Validate` (method)
- `Log` (from utils)
- `Println` (depending on mode)

## Limitations

### What Callees Might Miss

- Dynamic/runtime calls
- Callbacks and closures
- Interface method calls (may show interface, not implementation)
- Reflection-based calls

### Example of Undetected Call

```go
func process(fn func()) {
    fn()  // Callee is unknown at static analysis time
}
```

## Combining with Trace Graph

For recursive dependency analysis, use trace graph:

```bash
# Direct callees only
grepai trace callees "main"

# Full dependency tree (recursive)
grepai trace graph "main" --depth 3
```

## Scripting Examples

### List All Callees

```bash
grepai trace callees "main" --json | jq -r '.results[].callee' | sort -u
```

### Check for Specific Callee

```bash
# Does processOrder call sendEmail?
grepai trace callees "processOrder" --json | jq -e '.results[] | select(.callee == "sendEmail")' && echo "Yes" || echo "No"
```

### Generate Dependency Report

```bash
#!/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
```

## Common Issues

❌ **Problem:** Function not found
✅ **Solution:** Check spelling and ensure function exists in indexed files

❌ **Problem:** No callees found (but function has calls)
✅ **Solutions:**
- Try `--mode precise`
- Check language is in `enabled_languages`
- Ensure symbols.gob is up to date (`grepai watch`)

❌ **Problem:** Missing some callees
✅ **Solution:** Use `--mode precise` for better accuracy

## Best Practices

1. **Use for understanding:** Great for learning new codebases
2. **Combine with callers:** Full dependency picture
3. **Use graph for deep analysis:** When you need recursion
4. **Filter results:** Focus on relevant callees
5. **Document findings:** Export to markdown for docs

## Output Format

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
```

Overview

This skill finds all functions called by a specific function using GrepAI trace callees. It helps quickly surface direct callees, their file locations, and code context so you can understand behavior and dependencies at a glance. Results can be returned in human-readable or JSON formats for scripting and documentation.

How this skill works

The skill runs grepai trace callees against a provided function name and inspects static call sites to list direct callees, method calls, and package-level calls. It supports fast and precise extraction modes; precise mode improves accuracy using tree-sitter when available. Output includes file paths, line numbers, callee names, and surrounding context, with optional compact JSON for AI workflows.

When to use it

  • Map what a function does during code review or refactoring
  • Discover direct dependencies and side effects of a function
  • Generate dependency lists for documentation or change logs
  • Script checks to see if a function calls specific APIs or DB methods
  • Quickly identify functions with many callees as potential code smells

Best practices

  • Start with --mode fast for quick results, switch to --mode precise for accuracy
  • Combine trace callees with trace callers or trace graph for full impact analysis
  • Filter JSON output (jq) to focus on file types or exclude tests
  • Use compact JSON for downstream AI consumption or automation
  • Ensure your code index and symbols are up to date before running

Example use cases

  • List callees of ProcessOrder to document its behavior and side effects
  • Check whether processOrder calls sendEmail using a jq filter in CI
  • Count database-related callees to assess data-layer coupling
  • Generate a reusable markdown dependency section for onboarding docs
  • Run recursive analysis with trace graph for deeply nested dependencies

FAQ

What extraction mode should I use?

Use fast for speed and broad coverage; use precise when you need higher accuracy and have tree-sitter available.

Will dynamic or reflection-based calls be found?

No. Dynamic calls, callbacks, closures, and reflection-based invocations may be missed by static analysis.