MCPcopy Create free account
hub / github.com/ScriptedAlchemy/tracedecay / sanitize

Method sanitize

src/types.rs:422–446  ·  view source on GitHub ↗

Strip nodes with empty names and remove any edges or unresolved refs that reference their IDs. Tree-sitter can produce empty-name nodes from complex declarators (especially C/C++); if we skip the node at insert time but keep its edges, we get FK constraint violations.

(&mut self)

Source from the content-addressed store, hash-verified

420 /// from complex declarators (especially C/C++); if we skip the node at
421 /// insert time but keep its edges, we get FK constraint violations.
422 pub fn sanitize(&mut self) {
423 let before = self.nodes.len();
424 let bad_ids: std::collections::HashSet<String> = self
425 .nodes
426 .iter()
427 .filter(|n| n.name.is_empty())
428 .map(|n| n.id.clone())
429 .collect();
430
431 if bad_ids.is_empty() {
432 return;
433 }
434
435 self.nodes.retain(|n| !n.name.is_empty());
436 self.edges
437 .retain(|e| !bad_ids.contains(&e.source) && !bad_ids.contains(&e.target));
438 self.unresolved_refs
439 .retain(|r| !bad_ids.contains(&r.from_node_id));
440
441 let removed = before - self.nodes.len();
442 if removed > 0 {
443 self.errors
444 .push(format!("stripped {removed} node(s) with empty names"));
445 }
446 }
447}
448
449/// A subgraph containing a subset of nodes and edges.

Calls 4

collectMethod · 0.80
pushMethod · 0.80
is_emptyMethod · 0.45
containsMethod · 0.45