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"));