Skip to main content

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}