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

Method visit_node

codegraph-kernel/src/ccpp/mod.rs:778–851  ·  view source on GitHub ↗
(&mut self, node: Node<'t>)

Source from the content-addressed store, hash-verified

776 // --- visitNode -----------------------------------------------------------
777
778 fn visit_node(&mut self, node: Node<'t>) {
779 stack_guard!();
780 let kind = node.kind();
781 let mut skip_children = false;
782
783 // C++ namespace blocks: prefix-only, no node (#1291/#1093). Anonymous
784 // namespaces fall through to the generic walk.
785 if self.variant == Variant::Cpp && kind == "namespace_definition" {
786 let ns_name = node
787 .child_by_field_name("name")
788 .map(|n| self.text(n).to_string())
789 .unwrap_or_default();
790 if !ns_name.is_empty() {
791 self.namespace_prefix.push(ns_name);
792 for i in 0..node.named_child_count() {
793 if let Some(c) = node.named_child(i) {
794 self.visit_node(c);
795 }
796 }
797 self.namespace_prefix.pop();
798 return;
799 }
800 }
801
802 self.maybe_capture_fn_refs(node);
803
804 if kind == "function_definition" {
805 // functionTypes for both; cpp's methodTypes also lists it, so
806 // inside a class-like scope it extracts as a method.
807 if self.inside_class_like() && self.variant == Variant::Cpp {
808 self.extract_method(node);
809 } else {
810 self.extract_function(node);
811 }
812 skip_children = true;
813 } else if self.variant == Variant::Cpp && kind == "class_specifier" {
814 self.extract_class(node);
815 skip_children = true;
816 } else if kind == "struct_specifier" {
817 self.extract_aggregate(node, "struct");
818 skip_children = true;
819 } else if kind == "union_specifier" {
820 self.extract_aggregate(node, "union");
821 skip_children = true;
822 } else if kind == "enum_specifier" {
823 self.extract_enum(node);
824 skip_children = true;
825 } else if kind == "type_definition"
826 || (self.variant == Variant::Cpp && kind == "alias_declaration")
827 {
828 skip_children = self.extract_type_alias(node);
829 } else if kind == "declaration" && !self.inside_class_like() {
830 self.extract_variable(node);
831 self.scan_fn_ref_subtree(node, 0);
832 skip_children = true;
833 } else if kind == "preproc_include" {
834 self.extract_import(node);
835 } else if kind == "call_expression" {

Callers 5

extractFunction · 0.45
extract_classMethod · 0.45
extract_aggregateMethod · 0.45
extract_enumMethod · 0.45
extract_type_aliasMethod · 0.45

Calls 14

textMethod · 0.65
maybe_capture_fn_refsMethod · 0.45
inside_class_likeMethod · 0.45
extract_methodMethod · 0.45
extract_functionMethod · 0.45
extract_classMethod · 0.45
extract_aggregateMethod · 0.45
extract_enumMethod · 0.45
extract_type_aliasMethod · 0.45
extract_variableMethod · 0.45
scan_fn_ref_subtreeMethod · 0.45
extract_importMethod · 0.45

Tested by

no test coverage detected