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

Method visit_node

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

Source from the content-addressed store, hash-verified

451 // --- the dispatcher (visitNode, Ruby-relevant branches) ----------------------
452
453 fn visit_node(&mut self, node: Node<'t>) {
454 // Language hook FIRST (tree-sitter.ts:943) — a handled subtree is
455 // scanned for fn-ref candidates and never reaches the ladder (or the
456 // maybeCaptureFnRefs call below).
457 if self.try_visit_hook(node) {
458 self.scan_fn_ref_subtree(node, 0);
459 return;
460 }
461
462 let kind = node.kind();
463 let mut skip_children = false;
464
465 self.maybe_capture_fn_refs(node);
466
467 if kind == "method" {
468 // functionTypes ∩ methodTypes: inside class-like (module counts!)
469 // ⇒ method, else function.
470 if self.inside_class_like() {
471 self.extract_method(node);
472 } else {
473 self.extract_function(node);
474 }
475 skip_children = true;
476 } else if kind == "class" {
477 self.extract_class(node);
478 skip_children = true;
479 } else if kind == "singleton_method" {
480 // methodTypes-only: extractMethod's 1747 gate bounces a top-level
481 // `def self.x` to extractFunction — a plain function named x (the
482 // receiver object is ignored everywhere).
483 if self.inside_class_like() {
484 self.extract_method(node);
485 } else {
486 self.extract_function(node);
487 }
488 skip_children = true;
489 } else if kind == "assignment"
490 && (!self.inside_class_like() || self.is_class_scope_constant_assignment(node))
491 {
492 // File scope: identifier AND constant LHS extract; class/module
493 // scope: ONLY constant LHS (isClassScopeConstantAssignment). The
494 // RHS is never walked (no instantiates/calls from initializers).
495 self.extract_variable(node);
496 self.scan_fn_ref_subtree(node, 0);
497 skip_children = true;
498 } else if kind == "call" {
499 // importTypes:['call'] — EVERY non-body call funnels here. Only
500 // require/require_relative-with-string emit; everything else is
501 // invisible (children still visited: no skipChildren).
502 self.extract_import(node);
503 }
504 // `singleton_class` (`class << self`), `alias`, top-level `if`/`begin`,
505 // `uninterpreted`, operator_assignment: no branch — recursed.
506
507 if !skip_children {
508 for i in 0..node.named_child_count() {
509 if let Some(c) = node.named_child(i) {
510 self.visit_node(c);

Callers 3

extractFunction · 0.45
try_visit_hookMethod · 0.45
extract_classMethod · 0.45

Calls 10

try_visit_hookMethod · 0.45
scan_fn_ref_subtreeMethod · 0.45
maybe_capture_fn_refsMethod · 0.45
inside_class_likeMethod · 0.45
extract_methodMethod · 0.45
extract_functionMethod · 0.45
extract_classMethod · 0.45
extract_variableMethod · 0.45
extract_importMethod · 0.45

Tested by

no test coverage detected