infigraph_core/diff/
format.rs1use 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}