fix: restore call graph relationships and Steps effects (#1862)

* docs: record regression audit and validation

* test: cover audited call and extraction regressions

* test: cover audited calls and selector guards

* test: cover audited calls and selector guards

* test: cover audited calls and selector guards

* test: cover audited calls and selector guards

* test: cover audited calls and selector guards

* fix: retain qualified call sites and restore language-specific getters

* fix: resolve typed calls and bound store actions

* fix: retain qualified call sites in the native kernel

* docs: explain restored call and Steps coverage

* test: isolate watchdog and cover imported store aliases

* refactor: expose import lookup through resolver context

* refactor: remove import resolver cycle

* test: canonicalize Claude config temp paths

* docs: record review fixes and large TypeScript timings

* test: cover store cache edits and document verification

* perf: cache per-file store eligibility

* fix: observe large benchmarks without a wall timeout

* docs: explain completed indexing benchmarks

docs: explain completed indexing benchmarks
This commit is contained in:
Colby Mchenry
2026-09-15 05:30:09 +00:00
committed by GitHub
parent 3ed73bc127
commit 4297b8e2ed
19 changed files with 1209 additions and 44 deletions
+11 -9
View File
@@ -1174,14 +1174,6 @@ impl<'t> Walker<'t> {
if is_literal_receiver(r.kind()) {
return;
}
// `holder.values.get()` has no inferred property type
// (#1566). Dropping the receiver or merely preserving it
// would allow unrelated same-name method guesses. Emit
// nothing, as for host chains (#1707); argument calls are
// visited independently. Mirrors extractCall in TS.
if self.is_unresolved_member_chain(r) {
return;
}
}
let recv_ident = receiver.filter(|r| {
matches!(r.kind(), "identifier" | "simple_identifier" | "field_identifier")
@@ -1193,6 +1185,12 @@ impl<'t> Walker<'t> {
} else {
callee_name = method_name.to_string();
}
} else if receiver.is_some_and(|r| self.is_unresolved_member_chain(r)) {
// Retain the call site for effects without guessing a
// project method. Mirrors the TS extraction path.
let chain = self.text(func).replace("?.", ".");
let Some(chain) = Self::plain_member_name(&chain) else { return };
callee_name = chain;
} else if let Some(field) = receiver.and_then(|r| self.this_field_of(r)) {
// `this.<field>.<method>()` — keep the field so the
// resolver can read its declared type (#1496). Mirrors
@@ -1245,7 +1243,11 @@ impl<'t> Walker<'t> {
/// or member chain (`make`, `d.setdefault`), whitespace stripped (#1683).
fn plain_inner_callee(&self, call: Node<'t>) -> Option<String> {
let inner = call.child_by_field_name("function")?;
let text: String = self.text(inner).chars().filter(|c| !c.is_whitespace()).collect();
Self::plain_member_name(self.text(inner))
}
fn plain_member_name(source: &str) -> Option<String> {
let text: String = source.chars().filter(|c| !c.is_whitespace()).collect();
if text.is_empty() {
return None;
}