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

Method visit_node

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

Source from the content-addressed store, hash-verified

530 // --- the dispatcher (visitNode, PHP-relevant branches) ------------------------
531
532 fn visit_node(&mut self, node: Node<'t>) {
533 stack_guard!();
534 if self.try_visit_hook(node) {
535 self.scan_fn_ref_subtree(node, 0);
536 return;
537 }
538
539 let kind = node.kind();
540 let mut skip_children = false;
541
542 self.maybe_capture_fn_refs(node);
543
544 if kind == "function_definition" {
545 // functionTypes; method_declaration is not in it, so this is
546 // always extractFunction (php functions can't be class members).
547 self.extract_function(node);
548 skip_children = true;
549 } else if kind == "class_declaration" {
550 self.extract_class(node, "class");
551 skip_children = true;
552 } else if kind == "trait_declaration" {
553 // classifyClassNode → 'trait'.
554 self.extract_class(node, "trait");
555 skip_children = true;
556 } else if kind == "method_declaration" {
557 // Inside a class-like → method; outside (an anonymous class's
558 // members at TOP level — grammar-bump delta #1) the 1747 gate
559 // bounces to extractFunction: a file-level `function` node.
560 if self.inside_class_like() {
561 self.extract_method(node);
562 } else {
563 self.extract_function(node);
564 }
565 skip_children = true;
566 } else if kind == "interface_declaration" {
567 self.extract_interface(node);
568 skip_children = true;
569 } else if kind == "enum_declaration" {
570 self.extract_enum(node);
571 skip_children = true;
572 } else if kind == "property_declaration" && self.inside_class_like() {
573 self.extract_field(node);
574 self.scan_fn_ref_subtree(node, 0);
575 skip_children = true;
576 } else if matches!(
577 kind,
578 "namespace_use_declaration" | "include_expression" | "include_once_expression"
579 | "require_expression" | "require_once_expression"
580 ) {
581 self.extract_import(node);
582 // children still visited (importTypes sets no skipChildren)
583 } else if matches!(
584 kind,
585 "function_call_expression" | "member_call_expression" | "scoped_call_expression"
586 ) {
587 self.extract_call(node);
588 } else if kind == "object_creation_expression" {
589 self.extract_instantiation(node);

Callers 5

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

Calls 15

try_visit_hookMethod · 0.45
scan_fn_ref_subtreeMethod · 0.45
maybe_capture_fn_refsMethod · 0.45
extract_functionMethod · 0.45
extract_classMethod · 0.45
inside_class_likeMethod · 0.45
extract_methodMethod · 0.45
extract_interfaceMethod · 0.45
extract_enumMethod · 0.45
extract_fieldMethod · 0.45
extract_importMethod · 0.45

Tested by

no test coverage detected