(&mut self, node: Node<'t>)
| 776 | // --- visitNode ----------------------------------------------------------- |
| 777 | |
| 778 | fn visit_node(&mut self, node: Node<'t>) { |
| 779 | stack_guard!(); |
| 780 | let kind = node.kind(); |
| 781 | let mut skip_children = false; |
| 782 | |
| 783 | // C++ namespace blocks: prefix-only, no node (#1291/#1093). Anonymous |
| 784 | // namespaces fall through to the generic walk. |
| 785 | if self.variant == Variant::Cpp && kind == "namespace_definition" { |
| 786 | let ns_name = node |
| 787 | .child_by_field_name("name") |
| 788 | .map(|n| self.text(n).to_string()) |
| 789 | .unwrap_or_default(); |
| 790 | if !ns_name.is_empty() { |
| 791 | self.namespace_prefix.push(ns_name); |
| 792 | for i in 0..node.named_child_count() { |
| 793 | if let Some(c) = node.named_child(i) { |
| 794 | self.visit_node(c); |
| 795 | } |
| 796 | } |
| 797 | self.namespace_prefix.pop(); |
| 798 | return; |
| 799 | } |
| 800 | } |
| 801 | |
| 802 | self.maybe_capture_fn_refs(node); |
| 803 | |
| 804 | if kind == "function_definition" { |
| 805 | // functionTypes for both; cpp's methodTypes also lists it, so |
| 806 | // inside a class-like scope it extracts as a method. |
| 807 | if self.inside_class_like() && self.variant == Variant::Cpp { |
| 808 | self.extract_method(node); |
| 809 | } else { |
| 810 | self.extract_function(node); |
| 811 | } |
| 812 | skip_children = true; |
| 813 | } else if self.variant == Variant::Cpp && kind == "class_specifier" { |
| 814 | self.extract_class(node); |
| 815 | skip_children = true; |
| 816 | } else if kind == "struct_specifier" { |
| 817 | self.extract_aggregate(node, "struct"); |
| 818 | skip_children = true; |
| 819 | } else if kind == "union_specifier" { |
| 820 | self.extract_aggregate(node, "union"); |
| 821 | skip_children = true; |
| 822 | } else if kind == "enum_specifier" { |
| 823 | self.extract_enum(node); |
| 824 | skip_children = true; |
| 825 | } else if kind == "type_definition" |
| 826 | || (self.variant == Variant::Cpp && kind == "alias_declaration") |
| 827 | { |
| 828 | skip_children = self.extract_type_alias(node); |
| 829 | } else if kind == "declaration" && !self.inside_class_like() { |
| 830 | self.extract_variable(node); |
| 831 | self.scan_fn_ref_subtree(node, 0); |
| 832 | skip_children = true; |
| 833 | } else if kind == "preproc_include" { |
| 834 | self.extract_import(node); |
| 835 | } else if kind == "call_expression" { |
no test coverage detected