(&mut self, node: Node<'t>)
| 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 |
no test coverage detected