You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[TS/JS] A spread call ...f() records qualifier <expr>, so a bare call resolves as an untyped receiver and finds nothing #3787
In a spread argument or property, ...parseCaseValue(value) and { ...makeBig(i) }, the detector records the callee's qualifier as <expr>, as if the call were (expression).parseCaseValue(). The resolver treats <expr> as an untyped receiver, which only a method can answer. The same-file function parseCaseValue is a binding, reachable only by a bare call, so the pair resolves to none (external) and draws no edge.
The same happens to a qualified call behind a spread (...errorUtil.errToObj(message)): the qualifier should be errorUtil.
explain_call.py on packages/bench/compile-vs-arktype.ts:parseArgs, callee parseCaseValue:
parseCaseValue: none -- no definition this caller can reach (external) qualifier '<expr>'
packages/bench/compile-vs-arktype.ts:45 parseCaseValue owner=- shape=binding kind=function reach=bare same-file
Source:packages/bench/compile-vs-arktype.ts:72 is requestedCases.push(...parseCaseValue(value));, and packages/bench/memory/leaks.ts:71 is bigSchema.parse({ ...makeBig(i), n: "not-a-number" });.
Fix
In the TS/JS qualifier capture (calls_out_qualifiers), a ... spread operator before the callee isn't a member access. ...f() is a bare call (qualifier ""), and ...ns.f() has qualifier ns. Add extraction tests for both, then measure with callgraph_check.py.
Activity
Call-graph comparison tooling: reference contract + cache, triage, on…
test(golden): re-bless on merged main (#3787/#3788 fp-ts link + pager…
fix(call-graph): TS/JS spread qualifier, namespace-import aliases, pa…