agentstatedeveloper_core/symbol.rs
1use crate::schema::SymbolKind;
2
3/// Canonical stable id for a symbol. Survives content edits and path
4/// moves; changes only on rename (which triggers a rebind record).
5pub fn canonical_symbol_id(qname: &str, kind: SymbolKind, initial_file: &str) -> String {
6 let kind_str = format!("{:?}", kind);
7 let seed = format!("{}|{}|{}", qname, kind_str, initial_file);
8 let hash = blake3::hash(seed.as_bytes());
9 format!("sym_{}", &hash.to_hex()[..16])
10}
11
12/// Content-addressed fingerprint of a symbol's body. Changes on every edit.
13pub fn symbol_fingerprint(body: &str) -> String {
14 let hash = blake3::hash(body.as_bytes());
15 format!("fp_{}", &hash.to_hex()[..16])
16}