Learn-skills.dev rust-call-graph
Visualize Rust function call graphs using LSP. Triggers on: /call-graph, call hierarchy, who calls, what calls, 调用图, 调用关系, 谁调用了, 调用了谁
install
source · Clone the upstream repo
git clone https://github.com/NeverSight/learn-skills.dev
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/NeverSight/learn-skills.dev "$T" && mkdir -p ~/.claude/skills && cp -r "$T/data/skills-md/actionbook/rust-skills/rust-call-graph" ~/.claude/skills/neversight-learn-skills-dev-rust-call-graph && rm -rf "$T"
manifest:
data/skills-md/actionbook/rust-skills/rust-call-graph/SKILL.mdsource content
Rust Call Graph
Visualize function call relationships using LSP call hierarchy.
Usage
/rust-call-graph <function_name> [--depth N] [--direction in|out|both]
Options:
: How many levels to traverse (default: 3)--depth N
:--direction
(callers),in
(callees),outboth
Examples:
- Show both callers and callees/rust-call-graph process_request
- Show only callers/rust-call-graph handle_error --direction in
- Deep callee analysis/rust-call-graph main --direction out --depth 5
LSP Operations
1. Prepare Call Hierarchy
Get the call hierarchy item for a function.
LSP( operation: "prepareCallHierarchy", filePath: "src/handler.rs", line: 45, character: 8 )
2. Incoming Calls (Who calls this?)
LSP( operation: "incomingCalls", filePath: "src/handler.rs", line: 45, character: 8 )
3. Outgoing Calls (What does this call?)
LSP( operation: "outgoingCalls", filePath: "src/handler.rs", line: 45, character: 8 )
Workflow
User: "Show call graph for process_request" │ ▼ [1] Find function location LSP(workspaceSymbol) or Grep │ ▼ [2] Prepare call hierarchy LSP(prepareCallHierarchy) │ ▼ [3] Get incoming calls (callers) LSP(incomingCalls) │ ▼ [4] Get outgoing calls (callees) LSP(outgoingCalls) │ ▼ [5] Recursively expand to depth N │ ▼ [6] Generate ASCII visualization
Output Format
Incoming Calls (Who calls this?)
## Callers of `process_request` main └── run_server └── handle_connection └── process_request ◄── YOU ARE HERE
Outgoing Calls (What does this call?)
## Callees of `process_request` process_request ◄── YOU ARE HERE ├── parse_headers │ └── validate_header ├── authenticate │ ├── check_token │ └── load_user ├── execute_handler │ └── [dynamic dispatch] └── send_response └── serialize_body
Bidirectional (Both)
## Call Graph for `process_request` ┌─────────────────┐ │ main │ └────────┬────────┘ │ ┌────────▼────────┐ │ run_server │ └────────┬────────┘ │ ┌────────▼────────┐ │handle_connection│ └────────┬────────┘ │ ┌────────────────────┼────────────────────┐ │ │ │ ┌───────▼───────┐ ┌───────▼───────┐ ┌───────▼───────┐ │ parse_headers │ │ authenticate │ │send_response │ └───────────────┘ └───────┬───────┘ └───────────────┘ │ ┌───────┴───────┐ │ │ ┌──────▼──────┐ ┌──────▼──────┐ │ check_token │ │ load_user │ └─────────────┘ └─────────────┘
Analysis Insights
After generating the call graph, provide insights:
## Analysis **Entry Points:** main, test_process_request **Leaf Functions:** validate_header, serialize_body **Hot Path:** main → run_server → handle_connection → process_request **Complexity:** 12 functions, 3 levels deep **Potential Issues:** - `authenticate` has high fan-out (4 callees) - `process_request` is called from 3 places (consider if this is intentional)
Common Patterns
| User Says | Direction | Use Case |
|---|---|---|
| "Who calls X?" | incoming | Impact analysis |
| "What does X call?" | outgoing | Understanding implementation |
| "Show call graph" | both | Full picture |
| "Trace from main to X" | outgoing | Execution path |
Visualization Options
| Style | Best For |
|---|---|
| Tree (default) | Simple hierarchies |
| Box diagram | Complex relationships |
| Flat list | Many connections |
| Mermaid | Export to docs |
Mermaid Export
graph TD main --> run_server run_server --> handle_connection handle_connection --> process_request process_request --> parse_headers process_request --> authenticate process_request --> send_response
Related Skills
| When | See |
|---|---|
| Find definition | rust-code-navigator |
| Project structure | rust-symbol-analyzer |
| Trait implementations | rust-trait-explorer |
| Safe refactoring | rust-refactor-helper |