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

Method flush_value_refs

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

Source from the content-addressed store, hash-verified

845 // --- value refs -------------------------------------------------------------------
846
847 fn flush_value_refs(&mut self, root: Node<'t>) {
848 let scopes = std::mem::take(&mut self.value_scopes);
849 let mut targets = std::mem::take(&mut self.fs_values);
850 let counts = std::mem::take(&mut self.fs_value_counts);
851 if std::env::var("CODEGRAPH_VALUE_REFS").as_deref() == Ok("0") {
852 return;
853 }
854 if targets.is_empty() || scopes.is_empty() || util::is_generated_file(self.file_path) {
855 return;
856 }
857
858 // Shadow prune — python's declarator shape is `assignment`.
859 let mut decl_counts: HashMap<&str, u32> = HashMap::new();
860 let mut dstack: Vec<Node> = vec![root];
861 let mut dvisited = 0usize;
862 while let Some(n) = dstack.pop() {
863 if dvisited >= MAX_VALUE_REF_NODES {
864 break;
865 }
866 dvisited += 1;
867 if n.kind() == "assignment" {
868 let left = n
869 .child_by_field_name("left")
870 .or_else(|| n.child_by_field_name("pattern"))
871 .or_else(|| n.named_child(0));
872 if let Some(left) = left {
873 if left.kind() == "identifier" {
874 let nm = self.text(left);
875 if targets.contains_key(nm) {
876 *decl_counts.entry(nm).or_insert(0) += 1;
877 }
878 } else {
879 for i in 0..left.named_child_count() {
880 if let Some(c) = left.named_child(i) {
881 if c.kind() == "identifier" {
882 let nm = self.text(c);
883 if targets.contains_key(nm) {
884 *decl_counts.entry(nm).or_insert(0) += 1;
885 }
886 }
887 }
888 }
889 }
890 }
891 }
892 for i in 0..n.named_child_count() {
893 if let Some(c) = n.named_child(i) {
894 dstack.push(c);
895 }
896 }
897 }
898 let shadowed: Vec<String> = decl_counts
899 .iter()
900 .filter(|(nm, c)| **c > counts.get(**nm).copied().unwrap_or(1))
901 .map(|(nm, _)| nm.to_string())
902 .collect();
903 for nm in shadowed {
904 targets.remove(&nm);

Callers 1

extractFunction · 0.45

Calls 8

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

Tested by

no test coverage detected