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
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 daricaller()DAN top-level:helperrc/statusMekanisme (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-codefalse-positive MASAL (SETIAP fungsi kelihatan dead),search --mode symbolrc salah,context --check tracekosong,impactblast-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.pysebagai 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
fallback_ruby.py(yang bekerja). Jangan bikin format node/edge baru.tests/test_graph_accuracy_golden.py): fungsi cross-called → rc>=1 not dead; genuinely-dead → dead.Definition of Done