Skip to content

fix(parser): Go/Java/PHP call graph absent/broken → every function false-flagged dead #293

Description

@Wolfvin

Mengapa (falsifiable — repro dijalankan 2026-07-13)

CodeLens klaim 13-bahasa, tapi call-graph (dasar rc/dead-code/trace/impact) TIDAK berfungsi untuk Go, Java, PHP. Fungsi yang jelas dipanggil dapat ref_count=0/status=dead.

Repro (scan tiap fixture, cek backend.json). Tiap file: helper() dipanggil dari caller() DAN top-level:

Bahasa nodes edges helper rc/status
Go 3 0 rc=0 dead (SALAH)
Java 3 0 rc=0 dead (SALAH)
PHP 2 1 rc=0 dead (SALAH — edge tak resolve ke helper)
Ruby 2 3 rc=1 active ✓ (bekerja)

Mekanisme (dari inspeksi parser)

  • scripts/parsers/fallback_java.py (73 baris) — TIDAK ada kode ekstraksi call (call-refs=0) → nol edge by omission.
  • scripts/parsers/fallback_go.py (208 baris) — ADA kode call (call-refs=20) tapi hasil 0 resolving edge (bug/ineffective).
  • scripts/parsers/fallback_php.py (688 baris) — ADA kode, tapi edge tak resolve ke node callee (helper rc tetap 0).
  • scripts/parsers/fallback_ruby.py — bekerja (referensi implementasi yang benar).

Konteks

Untuk project Go/Java/PHP: audit --check dead-code false-positive MASAL (SETIAP fungsi kelihatan dead), search --mode symbol rc salah, context --check trace kosong, impact blast-radius salah. #220 nambah same-file-usage untuk bahasa ini — indikasi call-edge memang lemah — tapi cross-function call tetap wajib untuk analisis benar. Ini contoh konkret kritik breadth-over-depth (lihat RFC #279): N bahasa diklaim, call-graph jalan untuk sedikit.

Tujuan

Go/Java/PHP call extraction hasilkan edge yang resolve ke node callee (rc benar, dead-code akurat), pakai fallback_ruby.py sebagai referensi pola yang bekerja. ATAU (kalau selaras keputusan RFC #279) turunkan klaim dukungan + tandai bahasa ini "symbol-only, no call-graph" secara eksplisit di output + docs supaya user tak tertipu hasil dead-code palsu.

Constraint

Definition of Done

  • Untuk tiap bahasa yang diputuskan di-support: fungsi cross-called rc>=1 not dead + golden test
  • Atau: output/docs eksplisit tandai bahasa symbol-only (tak ada call-graph) sehingga dead-code tak menyesatkan
  • Ruby (yang bekerja) tetap tak regres

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    type: bug-fixRegression or broken behavior

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions