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

Method maybe_capture_fn_refs

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

Source from the content-addressed store, hash-verified

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