Skip to main content

callees_of

Function callees_of 

Source
pub fn callees_of<'a>(
    cpg: &'a CodePropertyGraph,
    func_name: &str,
) -> Vec<(&'a Node, &'a Node)>
Expand description

For a given function name, returns all functions it directly calls.

Each returned tuple contains the callee node and the call‑site node. The function first locates the caller by name, collects all [NodeKind::CallSite] nodes inside its AST subtree, and follows outgoing Edge::Call edges.

§Examples

use icb_graph::graph::{CodePropertyGraph, Node, Edge};
use icb_graph::query::callees_of;
use icb_common::NodeKind;

let mut cpg = CodePropertyGraph::new();
let foo = cpg.graph.add_node(Node {
    kind: NodeKind::Function,
    name: Some("foo".into()),
    usr: Some("foo".into()),
    start_line: 1,
    end_line: 2,
});
let bar = cpg.graph.add_node(Node {
    kind: NodeKind::Function,
    name: Some("bar".into()),
    usr: Some("bar".into()),
    start_line: 5,
    end_line: 6,
});
let call = cpg.graph.add_node(Node {
    kind: NodeKind::CallSite,
    name: Some("bar".into()),
    usr: None,
    start_line: 2,
    end_line: 2,
});
cpg.graph.add_edge(foo, call, Edge::AstChild);
cpg.graph.add_edge(call, bar, Edge::Call);

let callees = callees_of(&cpg, "foo");
assert_eq!(callees.len(), 1);
assert_eq!(callees[0].0.name.as_deref(), Some("bar"));