Skip to content

fix(php): member-call follow-ups — FCC relation, union refusal, qualified receiver types, use-claim refusal - #2505

Closed
filipechagas wants to merge 22 commits into
Graphify-Labs:v8from
lawnstarter:upstream-feat/php-member-call-followups
Closed

fix(php): member-call follow-ups — FCC relation, union refusal, qualified receiver types, use-claim refusal#2505
filipechagas wants to merge 22 commits into
Graphify-Labs:v8from
lawnstarter:upstream-feat/php-member-call-followups

fix(php): refuse a member call whose receiver type the file claims (#21)

e1b1650
Select commit
Loading
Failed to load commit list.
Graphify Labs / Graphify succeeded Aug 6, 2026 in 0s

Graphify — looks good

Looks safe to merge — no coupling regressions and no blocking issues, checked against the code graph (not a self-assessment).

Details

Graphify reviewed this change.

Looks safe to merge — no coupling regressions and no blocking issues, checked against the code graph (not a self-assessment).


Graphify review — findings

This pull request centers on PHP member-call resolution in what appears to be a code-graph extraction tool, changing how instance-method calls on typed receivers are resolved (e.g., binding $this->prop->method() to the property's declared type) and introducing a new PhpNameResolver that reads use statements to resolve claimed type names against the corpus. It also reworks confidence tagging (EXTRACTED vs INFERRED), routes PHP 8.1 first-class callables to indirect_call instead of calls, scopes member-call resolvers to same-language definitions, and handles additional PHP syntax cases (DNF types, group use function/use const, union/intersection receivers). Surface area spans the PHP and Objective-C extractors/resolvers, the extraction engine, watch/CLI paths, a version bump that rolls the AST cache, and a substantial set of tests plus extensive CHANGELOG and docs updates. The changed test files cover watch behavior, PHP name resolution, member calls, first-class callables, and group-use kind labels.

No blocking issues surfaced.

Analysis details — impact, health, verification

Impact & health

Graphify review

Impact — 2474 functions depend on the 1357 functions this change touches.

Health — this change adds coupling hotspots:

  • worse: extract() — 392 callers, 40 callees
  • worse: _rebuild_code() — 92 callers, 51 callees
  • worse: _extract_generic() — 18 callers, 23 callees
  • worse: walk() — 1 callers, 54 callees
  • new: _full_then_incremental() — 9 callers, 3 callees
  • worse: walk_calls() — 1 callers, 14 callees
  • new: _php_method_receiver_types() — 1 callers, 7 callees
  • new: _resolve_php_member_calls() — 0 callers, 7 callees

Verification — 2474 functions in the blast radius were not formally verified this run (proofs are advisory here).

Gate & verification

graphify gate

PASS — objectively clean (no health regressions, tests not run — proofs not run this pass (advisory)). Grounded, not self-assessed.

Advisory (not blocking):

  • verification_scope: 2431 function(s) in the blast radius were not formally verified this run