The visitNode hook (scala.ts:131-198). Returns true when consumed.
(&mut self, node: Node<'t>)
| 591 | |
| 592 | /// The visitNode hook (scala.ts:131-198). Returns true when consumed. |
| 593 | fn hook(&mut self, node: Node<'t>) -> bool { |
| 594 | match node.kind() { |
| 595 | "val_definition" | "var_definition" => { |
| 596 | let is_val = node.kind() == "val_definition"; |
| 597 | let name = match self.val_var_name(node) { |
| 598 | Some(n) => n.to_string(), |
| 599 | None => return false, |
| 600 | }; |
| 601 | // Enclosing-definition NODE-TYPE walk (scala.ts:146-156). |
| 602 | let mut enclosing: Option<&'static str> = None; |
| 603 | let mut p = node.parent(); |
| 604 | while let Some(parent) = p { |
| 605 | match parent.kind() { |
| 606 | "class_definition" => { |
| 607 | enclosing = Some("class_definition"); |
| 608 | break; |
| 609 | } |
| 610 | "trait_definition" => { |
| 611 | enclosing = Some("trait_definition"); |
| 612 | break; |
| 613 | } |
| 614 | "enum_definition" => { |
| 615 | enclosing = Some("enum_definition"); |
| 616 | break; |
| 617 | } |
| 618 | "given_definition" => { |
| 619 | enclosing = Some("given_definition"); |
| 620 | break; |
| 621 | } |
| 622 | "object_definition" => { |
| 623 | enclosing = Some("object_definition"); |
| 624 | break; |
| 625 | } |
| 626 | _ => p = parent.parent(), |
| 627 | } |
| 628 | } |
| 629 | let is_instance_field = matches!( |
| 630 | enclosing, |
| 631 | Some("class_definition") | Some("trait_definition") | Some("enum_definition") |
| 632 | | Some("given_definition") |
| 633 | ); |
| 634 | let kind: &'static str = if is_instance_field { |
| 635 | "field" |
| 636 | } else if is_val { |
| 637 | "constant" |
| 638 | } else { |
| 639 | "variable" |
| 640 | }; |
| 641 | let type_node = node.child_by_field_name("type"); |
| 642 | let signature = type_node.map(|t| { |
| 643 | format!("{} {}: {}", if is_val { "val" } else { "var" }, name, self.text(t)) |
| 644 | }); |
| 645 | let visibility = self.visibility_of(node); |
| 646 | let created = self.create_node( |
| 647 | kind, |
| 648 | &name, |
| 649 | node, |
| 650 | Extra { signature, visibility, ..Default::default() }, |
no test coverage detected