MCPcopy Create free account
hub / github.com/colbymchenry/codegraph / flush_value_refs

Method flush_value_refs

codegraph-kernel/src/java.rs:1257–1346  ·  view source on GitHub ↗
(&mut self, root: Node<'t>)

Source from the content-addressed store, hash-verified

1255 // --- value references ------------------------------------------------------------
1256
1257 fn flush_value_refs(&mut self, root: Node<'t>) {
1258 let scopes = std::mem::take(&mut self.value_scopes);
1259 let mut targets = std::mem::take(&mut self.fs_values);
1260 let counts = std::mem::take(&mut self.fs_value_counts);
1261 if std::env::var("CODEGRAPH_VALUE_REFS").as_deref() == Ok("0") {
1262 return;
1263 }
1264 if targets.is_empty() || scopes.is_empty() || util::is_generated_file(self.file_path) {
1265 return;
1266 }
1267
1268 let mut decl_counts: HashMap<&str, u32> = HashMap::new();
1269 let mut dstack: Vec<Node> = vec![root];
1270 let mut dvisited = 0usize;
1271 while let Some(n) = dstack.pop() {
1272 if dvisited >= MAX_VALUE_REF_NODES {
1273 break;
1274 }
1275 dvisited += 1;
1276 if n.kind() == "variable_declarator" {
1277 if let Some(first) = n.named_child(0) {
1278 if first.kind() == "identifier" {
1279 let nm = self.text(first);
1280 if targets.contains_key(nm) {
1281 *decl_counts.entry(nm).or_insert(0) += 1;
1282 }
1283 }
1284 }
1285 }
1286 for i in 0..n.named_child_count() {
1287 if let Some(c) = n.named_child(i) {
1288 dstack.push(c);
1289 }
1290 }
1291 }
1292 let shadowed: Vec<String> = decl_counts
1293 .iter()
1294 .filter(|(nm, c)| **c > counts.get(**nm).copied().unwrap_or(1))
1295 .map(|(nm, _)| nm.to_string())
1296 .collect();
1297 for nm in shadowed {
1298 targets.remove(&nm);
1299 }
1300 if targets.is_empty() {
1301 return;
1302 }
1303
1304 let refs_kind = edge_kind_index("references").unwrap();
1305 for scope in &scopes {
1306 // ID-string comparisons, matching the TS side (ids collide).
1307 let mut seen: HashSet<&str> = HashSet::new();
1308 let mut stack: Vec<Node> = vec![scope.node];
1309 let mut visited = 0usize;
1310 while let Some(n) = stack.pop() {
1311 if visited >= MAX_VALUE_REF_NODES {
1312 break;
1313 }
1314 visited += 1;

Callers 1

extractFunction · 0.45

Calls 8

is_generated_fileFunction · 0.85
edge_kind_indexFunction · 0.85
push_edgeMethod · 0.80
textMethod · 0.65
getMethod · 0.65
putMethod · 0.65
unwrapMethod · 0.60
collectMethod · 0.45

Tested by

no test coverage detected