extractStaticMemberRef — php's class_constant_access_expression + scoped_property_access_expression (member_access_expression is evaluated but its variable_name receiver never passes).
(&mut self, node: Node<'t>)
| 1113 | /// scoped_property_access_expression (member_access_expression is |
| 1114 | /// evaluated but its variable_name receiver never passes). |
| 1115 | fn extract_static_member_ref(&mut self, node: Node<'t>) { |
| 1116 | if !matches!( |
| 1117 | node.kind(), |
| 1118 | "class_constant_access_expression" | "scoped_property_access_expression" |
| 1119 | | "member_access_expression" |
| 1120 | ) { |
| 1121 | return; |
| 1122 | } |
| 1123 | if self.stack.is_empty() { |
| 1124 | return; |
| 1125 | } |
| 1126 | let owner = self.top_row(); |
| 1127 | if let Some(parent) = node.parent() { |
| 1128 | if matches!( |
| 1129 | parent.kind(), |
| 1130 | "function_call_expression" | "member_call_expression" | "scoped_call_expression" |
| 1131 | ) { |
| 1132 | let callee = parent |
| 1133 | .child_by_field_name("function") |
| 1134 | .or_else(|| parent.child_by_field_name("method")) |
| 1135 | .or_else(|| parent.named_child(0)); |
| 1136 | if let Some(callee) = callee { |
| 1137 | if callee.start_byte() == node.start_byte() { |
| 1138 | return; |
| 1139 | } |
| 1140 | } |
| 1141 | } |
| 1142 | } |
| 1143 | let recv = node |
| 1144 | .child_by_field_name("object") |
| 1145 | .or_else(|| node.child_by_field_name("expression")) |
| 1146 | .or_else(|| node.child_by_field_name("scope")) |
| 1147 | .or_else(|| node.named_child(0)); |
| 1148 | let Some(recv) = recv else { return }; |
| 1149 | if matches!( |
| 1150 | recv.kind(), |
| 1151 | "identifier" | "type_identifier" | "simple_identifier" | "name" | "scoped_type_identifier" |
| 1152 | ) { |
| 1153 | let text = self.text(recv); |
| 1154 | if capitalized_re().is_match(text) { |
| 1155 | self.push_ref_at(owner, &text.to_string(), edge_kind_index("references").unwrap(), recv); |
| 1156 | } |
| 1157 | } |
| 1158 | } |
| 1159 | |
| 1160 | /// extractInheritance — base_clause takes ONLY the first base (interface |
| 1161 | /// multi-extends drops the rest); class_interface_clause takes ALL |
no test coverage detected