MCPcopy Create free account
hub / github.com/colbymchenry/codegraph / maybe_capture_fn_refs

Method maybe_capture_fn_refs

codegraph-kernel/src/swift.rs:1256–1330  ·  view source on GitHub ↗
(&mut self, node: Node<'t>)

Source from the content-addressed store, hash-verified

1254 // --- function-as-value refs (SWIFT_SPEC, function-ref.ts:288) -------------------
1255
1256 fn maybe_capture_fn_refs(&mut self, node: Node<'t>) {
1257 enum Mode {
1258 Args,
1259 Rhs,
1260 List,
1261 Varinit,
1262 }
1263 let mode = match node.kind() {
1264 "value_arguments" => Mode::Args,
1265 "assignment" => Mode::Rhs, // field 'result'
1266 "array_literal" => Mode::List,
1267 "property_declaration" => Mode::Varinit, // field 'value'
1268 _ => return,
1269 };
1270 if self.stack.is_empty() {
1271 return;
1272 }
1273 let from = self.top_row();
1274
1275 let mut values: Vec<Node> = Vec::new();
1276 match mode {
1277 Mode::Args | Mode::List => {
1278 for i in 0..node.named_child_count() {
1279 if let Some(c) = node.named_child(i) {
1280 values.push(c);
1281 }
1282 }
1283 }
1284 Mode::Rhs => {
1285 if let Some(rhs) = node.child_by_field_name("result") {
1286 // Param-storage skip — swift's LHS field is `target`.
1287 let lhs = node
1288 .child_by_field_name("left")
1289 .or_else(|| node.child_by_field_name("lhs"))
1290 .or_else(|| node.child_by_field_name("target"))
1291 .or_else(|| {
1292 if node.named_child_count() >= 2 { node.named_child(0) } else { None }
1293 });
1294 let lhs_text = lhs.map(|l| self.text(l)).unwrap_or("");
1295 let lhs_last = util::lhs_last_name()
1296 .captures(lhs_text)
1297 .and_then(|c| c.get(1))
1298 .map(|m| m.as_str());
1299 let rhs_text = self.text(rhs).trim();
1300 if !(lhs_last.is_some() && lhs_last == Some(rhs_text)) {
1301 values.push(rhs);
1302 }
1303 }
1304 }
1305 Mode::Varinit => {
1306 // Destructuring gate: swift's name field is a `pattern` node —
1307 // never in the pattern-kind set → never skipped.
1308 let name_child = node
1309 .child_by_field_name("name")
1310 .or_else(|| node.child_by_field_name("pattern"));
1311 let is_destructuring = name_child
1312 .map(|nc| {
1313 matches!(

Callers 3

visit_nodeMethod · 0.45
scan_fn_ref_subtreeMethod · 0.45

Calls 4

textMethod · 0.65
getMethod · 0.65
top_rowMethod · 0.45

Tested by

no test coverage detected