fix(php): add fallback for self:: static calls when enclosing_class_q… - #2164
Carnival-z wants to merge 2 commits into
Conversation
…n is NULL Problem: PHP LSP's resolve_static_call() returns early when enclosing_class_qn is NULL, causing self::/static::/parent:: calls to fall back to low-confidence heuristic strategies (unique_name 0.75 or suffix_match 0.55) instead of high-confidence php_self_static (0.95). Root Cause: When process_class_decl doesn't populate enclosing_class_qn (e.g., complex method bodies with closures), resolve_static_call short-circuits without generating any LSP resolution, leaving pass_calls.c to use registry fallbacks. Fix: Add fallback logic to infer class_qn from enclosing_func_qn when handling self::/static:: scopes. Extract class QN by stripping the last .method segment from "Project.path.Class.method" → "Project.path.Class", then continue with normal method lookup and emit php_self_static strategy at 0.95 confidence. Impact: - PHP only (no other languages affected) - Improves self:: call resolution from 0.55-0.75 → 0.95 confidence - Verified on iCMS v8.0.0: AdminAdmincp.do_index self::setContext/tableData/view Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
… strategies Problem: weak name-only matching (unique_name/suffix_match) can fabricate spurious cross-language edges when no imports are present, e.g., Python builtin 'get' matching every unrelated project 'get' function. Change: Add strict import requirement in resolve_name_lookup() - return empty result when import_vals is NULL/empty, forcing reliance on high-confidence strategies (import_map 0.95, same_module 0.90) only. Trade-off: - Eliminates false positive cross-language edges - May miss legitimate same-language calls in import-sparse codebases - Reduces noise in call graphs at the cost of coverage Impact: - unique_name: was 0.75 → 0.375 (degraded) → now rejected entirely - suffix_match: was 0.55 (module distance) → now rejected entirely - High-confidence strategies unaffected Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
Thanks for opening this — it has been seen, and it is queued. This note is automated, but it is not a brush-off: it exists so you know where your PR stands instead of having to guess from silence. Current review status: working through a backlog. What that means for this PR, concretely:
Things that will genuinely speed it up whenever review does happen:
If this fixes a bug, a reproduction we can run is worth more than a description of the symptom. Thanks for contributing, and sorry in advance for the wait. |
|
Thank you for the PHP investigation. The current diff also changes shared |
…n is NULL
Problem:
PHP LSP's resolve_static_call() returns early when enclosing_class_qn is NULL, causing self::/static::/parent:: calls to fall back to low-confidence heuristic strategies (unique_name 0.75 or suffix_match 0.55) instead of high-confidence php_self_static (0.95).
Root Cause:
When process_class_decl doesn't populate enclosing_class_qn (e.g., complex method bodies with closures), resolve_static_call short-circuits without generating any LSP resolution, leaving pass_calls.c to use registry fallbacks.
Fix:
Add fallback logic to infer class_qn from enclosing_func_qn when handling self::/static:: scopes. Extract class QN by stripping the last .method segment from "Project.path.Class.method" → "Project.path.Class", then continue with normal method lookup and emit php_self_static strategy at 0.95 confidence.
Impact:
What does this PR do?
Checklist
git commit -s) — required, CI rejectsunsigned commits (DCO, see CONTRIBUTING.md)
make -f Makefile.cbm test)make -f Makefile.cbm lint-ci)