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

Method visit_node

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

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