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

Method visit_node

codegraph-kernel/src/csharp.rs:502–570  ·  view source on GitHub ↗
(&mut self, node: Node<'t>)

Source from the content-addressed store, hash-verified

500 // --- the dispatcher (visitNode, C#-relevant branches) -----------------------
501
502 fn visit_node(&mut self, node: Node<'t>) {
503 stack_guard!();
504 let kind = node.kind();
505 let mut skip_children = false;
506
507 self.maybe_capture_fn_refs(node);
508
509 if kind == "class_declaration" || kind == "record_declaration" {
510 // classifyClassNode: `record struct` → extractStruct, else class.
511 if kind == "record_declaration" && record_is_struct(node) {
512 self.extract_struct(node);
513 } else {
514 self.extract_class(node);
515 }
516 skip_children = true;
517 } else if kind == "method_declaration" || kind == "constructor_declaration" {
518 self.extract_method(node);
519 skip_children = true;
520 } else if kind == "interface_declaration" {
521 self.extract_interface(node);
522 skip_children = true;
523 } else if kind == "struct_declaration" || kind == "record_struct_declaration" {
524 self.extract_struct(node);
525 skip_children = true;
526 } else if kind == "enum_declaration" {
527 self.extract_enum(node);
528 skip_children = true;
529 } else if kind == "property_declaration" && self.inside_class_like() {
530 // Property accessor/expression bodies are NEVER walked (calls
531 // inside are lost by design) — candidates-only scan.
532 self.extract_property(node);
533 self.scan_fn_ref_subtree(node, 0);
534 skip_children = true;
535 } else if kind == "field_declaration" && self.inside_class_like() {
536 self.extract_field(node);
537 self.scan_fn_ref_subtree(node, 0);
538 skip_children = true;
539 } else if kind == "local_declaration_statement" && !self.inside_class_like() {
540 // Top-level statements: extractVariable's generic fallback finds no
541 // direct identifier/variable_declarator children (C# nests them in
542 // variable_declaration) → ZERO nodes, zero refs. Candidates only.
543 self.extract_variable(node);
544 self.scan_fn_ref_subtree(node, 0);
545 skip_children = true;
546 } else if kind == "using_directive" {
547 self.extract_import(node);
548 // no skipChildren (TS importTypes branch) — children visited below
549 } else if kind == "invocation_expression" {
550 self.extract_call(node);
551 } else if kind == "object_creation_expression" {
552 self.extract_instantiation(node);
553 if let Some(anon_body) = find_anonymous_class_body(node) {
554 self.extract_anonymous_class(node, anon_body);
555 skip_children = true;
556 }
557 }
558 // Everything else (namespace_declaration, global_statement, delegates,
559 // events, operators, indexers, destructors, local functions, preproc_*)

Callers 6

extractFunction · 0.45
extract_classMethod · 0.45
extract_structMethod · 0.45
extract_interfaceMethod · 0.45
extract_enumMethod · 0.45

Calls 15

record_is_structFunction · 0.85
maybe_capture_fn_refsMethod · 0.45
extract_structMethod · 0.45
extract_classMethod · 0.45
extract_methodMethod · 0.45
extract_interfaceMethod · 0.45
extract_enumMethod · 0.45
inside_class_likeMethod · 0.45
extract_propertyMethod · 0.45
scan_fn_ref_subtreeMethod · 0.45
extract_fieldMethod · 0.45

Tested by

no test coverage detected