Skip to main content

infigraph_core/diff/
format.rs

1use super::SymbolDiff;
2
3pub fn format_diff(diff: &SymbolDiff) -> String {
4    if diff.changes.is_empty() {
5        return format!(
6            "No symbol-level changes between '{}' and '{}'.",
7            diff.old_ref, diff.new_ref
8        );
9    }
10
11    let added = diff.added().count();
12    let removed = diff.removed().count();
13    let modified = diff.modified().count();
14
15    let mut out = format!(
16        "Semantic diff {} → {}  [+{} added  -{} removed  ~{} modified]\n\n",
17        diff.old_ref, diff.new_ref, added, removed, modified
18    );
19
20    let mut cur_file = String::new();
21    for c in &diff.changes {
22        if c.file != cur_file {
23            out.push_str(&format!("  {}\n", c.file));
24            cur_file = c.file.clone();
25        }
26        let callers = if c.caller_count > 0 {
27            format!("  [{} callers]", c.caller_count)
28        } else {
29            String::new()
30        };
31        out.push_str(&format!(
32            "    {:>20}  {:<10} {}{}\n",
33            c.change.to_string(),
34            c.kind,
35            c.name,
36            callers
37        ));
38    }
39
40    out
41}