(&mut self, node: Node<'t>)
| 722 | } |
| 723 | |
| 724 | fn extract_method(&mut self, node: Node<'t>) { |
| 725 | // Gate (:1747): not inside class-like (no methodsAreTopLevel, no |
| 726 | // receiver, parent never object/object_expression) → extractFunction. |
| 727 | if !self.inside_class_like() { |
| 728 | self.extract_function(node); |
| 729 | return; |
| 730 | } |
| 731 | let name = self.extract_name(node); |
| 732 | // isMisparsedFunction — the unnamed ctor: body-only walk. |
| 733 | if self.is_unnamed_ctor(node) { |
| 734 | if let Some(body) = self.resolve_body(node) { |
| 735 | self.visit_body(body); |
| 736 | } |
| 737 | return; |
| 738 | } |
| 739 | let docstring = preceding_docstring(node, self.src); |
| 740 | let signature = self.signature_of(node); |
| 741 | let visibility = self.visibility_of(node); |
| 742 | let is_async = self.is_async_of(node); |
| 743 | let is_static = self.is_static_of(node); |
| 744 | let return_type = self.return_type_of(node); |
| 745 | let body = self.resolve_body(node); |
| 746 | let end_line_override = body.map(|b| b.end_position().row as u32 + 1); |
| 747 | // Operators mint method "<anonymous>" — extractMethod has NO skip. |
| 748 | let row = self.create_node( |
| 749 | "method", |
| 750 | &name, |
| 751 | node, |
| 752 | Extra { |
| 753 | docstring, |
| 754 | signature, |
| 755 | visibility, |
| 756 | is_async: Some(is_async), |
| 757 | is_static: Some(is_static), |
| 758 | return_type, |
| 759 | end_line_override, |
| 760 | }, |
| 761 | ); |
| 762 | let Some(row) = row else { return }; |
| 763 | self.extract_type_annotations(node, row); |
| 764 | self.extract_decorators_for(node, row); |
| 765 | self.stack.push(Scope { row, kind: "method", name }); |
| 766 | if let Some(body) = body { |
| 767 | self.visit_body(body); |
| 768 | } |
| 769 | self.stack.pop(); |
| 770 | } |
| 771 | |
| 772 | // --- extractClass (:1679) — classes, mixins, extensions --------------- |
| 773 |
no test coverage detected