(&mut self, obj: Node<'t>)
| 593 | } |
| 594 | |
| 595 | fn extract_rtk_endpoints(&mut self, obj: Node<'t>) { |
| 596 | for i in 0..obj.named_child_count() { |
| 597 | let Some(member) = obj.named_child(i) else { continue }; |
| 598 | if member.kind() != "pair" { |
| 599 | continue; |
| 600 | } |
| 601 | let key = member.child_by_field_name("key"); |
| 602 | let value = member.child_by_field_name("value"); |
| 603 | let (Some(key), Some(value)) = (key, value) else { continue }; |
| 604 | if value.kind() != "call_expression" { |
| 605 | continue; |
| 606 | } |
| 607 | let Some(callee) = value.child_by_field_name("function") else { continue }; |
| 608 | if callee.kind() != "member_expression" { |
| 609 | continue; |
| 610 | } |
| 611 | let method = self.text(callee.child_by_field_name("property").unwrap_or(callee)); |
| 612 | if method != "query" && method != "mutation" && method != "infiniteQuery" { |
| 613 | continue; |
| 614 | } |
| 615 | let key_name = util::object_key_name(self.text(key)); |
| 616 | if let Some(handler) = self.rtk_endpoint_handler(value) { |
| 617 | self.extract_function(handler, Some(key_name)); |
| 618 | } else { |
| 619 | // Config-only endpoint: bare node spanning the builder call. |
| 620 | let (sig, _) = util::slice_utf16(self.text(value), 80); |
| 621 | let row = self.create_node( |
| 622 | "function", |
| 623 | &key_name, |
| 624 | value, |
| 625 | Extra { signature: Some(sig), ..Extra::default() }, |
| 626 | ); |
| 627 | if let Some(row) = row { |
| 628 | self.stack.push(Scope { row, kind: "function", name: key_name }); |
| 629 | self.visit_function_body(value); |
| 630 | self.stack.pop(); |
| 631 | } |
| 632 | } |
| 633 | } |
| 634 | } |
| 635 | |
| 636 | fn rtk_endpoint_handler(&self, call: Node<'t>) -> Option<Node<'t>> { |
| 637 | let args = call.child_by_field_name("arguments")?; |
no test coverage detected