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

Method maybe_capture_fn_refs

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

Source from the content-addressed store, hash-verified

826 // --- function-as-value refs (RUBY_SPEC, function-ref.ts:262) -----------------
827
828 fn maybe_capture_fn_refs(&mut self, node: Node<'t>) {
829 enum Mode {
830 Args,
831 PairValue,
832 }
833 let mode = match node.kind() {
834 "argument_list" => Mode::Args,
835 "pair" => Mode::PairValue,
836 _ => return,
837 };
838 if self.stack.is_empty() {
839 return;
840 }
841 let from = self.top_row();
842
843 let mut values: Vec<Node> = Vec::new();
844 match mode {
845 Mode::Args => {
846 for i in 0..node.named_child_count() {
847 if let Some(c) = node.named_child(i) {
848 values.push(c);
849 }
850 }
851 }
852 Mode::PairValue => {
853 let value = node.child_by_field_name("value").or_else(|| {
854 if node.named_child_count() > 0 {
855 node.named_child(node.named_child_count() - 1)
856 } else {
857 None
858 }
859 });
860 if let Some(v) = value {
861 values.push(v);
862 }
863 }
864 }
865
866 for v in values {
867 self.normalize_fn_ref_value(v, from, 0);
868 }
869 }
870
871 /// normalizeValue for RUBY_SPEC: idTypes EMPTY (bare identifiers never
872 /// qualify); `block_argument` is a transparent layer; specials are the

Callers 3

visit_nodeMethod · 0.45
scan_fn_ref_subtreeMethod · 0.45

Calls 2

top_rowMethod · 0.45

Tested by

no test coverage detected