Repository navigation
Call graph (rust): a self receiver reaches impl methods (Part of #3772) - #6448
Conversation
Rust impl methods carry no owner, so self.m() had no class to walk and resolved to none: 239 of the 424 resolved_outside edges on serde-rs/json. A self receiver in rust now reaches any definition; other receivers stay closed. Recall vs rust-analyzer 39.9% -> 60.1%, confident precision 92.1% -> 93.8%. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…3772) Only fan_in/fan_out/pagerank and the LLM brief move: the new rust self.m() edges change fan counts and global PageRank normalisation. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…057Z # Conflicts: # tests/golden_master_audit/12_scan_output_snapshots/llm_brief.json # tests/golden_master_zero_dep_audit/12_scan_output_snapshots/llm_brief.json
|
No description provided. |
|
PR #6448 @ 350a8a9: 1 failed check(s) == squid-protocol.gitgalaxy (action_required) -- dirty |
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
CI shepherd: the head of this PR (c24be65) is not the one a maintainer labelled |
|
No description provided. |
…057Z # Conflicts: # tests/golden_master_audit/12_scan_output_snapshots/llm_brief.json # tests/golden_master_audit/6_parsed_files_scanned_artifacts/files/11_scan_db_snapshot/pagerank.json # tests/golden_master_zero_dep_audit/12_scan_output_snapshots/llm_brief.json # tests/golden_master_zero_dep_audit/6_parsed_files_scanned_artifacts/files/11_scan_db_snapshot/pagerank.json
…3772) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
CI shepherd: the head of this PR (2031c35) is not the one a maintainer labelled |
|
No description provided. |
|
No description provided. |
|
No description provided. |
|
No description provided. |
|
No description provided. |
|
No description provided. |
|
No description provided. |
1 similar comment
|
No description provided. |
Summary
Level 2 call graph, Rust (#3785): rust-analyzer SCIP is the reference. Rust
implmethods carry noparent_class_name(class_startcovers only struct/enum/union/trait), soself.m()fell through the resolver's methods-only bucket and resolved to none. For rust, aselfreceiver now searchesbucket.all, so it reaches impl methods through the normal file/import/unique ladder.No gated metric dropped. The widening is gated by
_IMPL_SELF_LANGS = {"rust"}; a parametrized test pins that python, java and javascript are unchanged.Rejected: widening every receiver for rust took
externalfrom 40 to 138 and precision to about 71%, so onlyselfis widened.Class / Sibling gaps
Class: a receiver whose owner the extractor does not record (impl blocks), so the method bucket excludes the target. Fixed here for
selfreceivers in rust. Remaining siblings: (1) typed receivers (let x: Foothenx.m()) andFoo::m()path calls to impl methods need an impl-owner map inby_owner; (2) trait-method dispatch through generics; (3) CI gate and toolchain hook for the rust reference. Burned-estate programs needing these: none (call-graph work, no mainframe estate involved).Golden
Re-blessed with
golden-lock.sh crucible_check.py --update --yes. Only graph-derived files move (fan_in, fan_out, pagerank, llm_brief): the new rust edges change fan counts and global PageRank normalisation, which also shifts rounding in other languages' PageRank at the 1e-5 level. No extraction field moves.Gates
pr_gates.py --fast7/7,--ratchets9/9, call_resolver tests (95) and the pre-PR guard tests (301 total) pass, rust resolution baseline regenerated.Facts checked: the box had no rust toolchain; installed rustup 1.90.0 and rust-analyzer into scratch to reproduce.
Checklist: partial [c:b43cf8a0] -- CI gate and toolchain hook, typed receivers/owners left
Checklist: partial [c:a15ba693] -- known-pattern row added for rust
self.m(); other languages' rows not touchedLessons for agents
rustupinto a scratchRUSTUP_HOME/CARGO_HOME, add rust-analyzer, thenimport_graph_accuracy.py --fetch-only rustbefore triage.selfonly.call_graph_resolution.pytakes--regenerate, not--write-baseline.🤖 Generated with Claude Code