Mengapa (falsifiable — repro dijalankan 2026-07-13)
Fungsi yang dilewatkan sebagai nilai atribut JSX (onClick={handleClick}, onSubmit={handleSubmit}) dapat ref_count=0 / status=dead, padahal jelas dipakai sebagai event handler. Ini pola PALING umum di React — dan React/frontend adalah use-case utama CodeLens (scope: react/css/html).
Repro (scan, cek backend.json). File src/App.tsx:
function handleClick() { return 1; }
function handleSubmit() { return 2; }
function directlyCalled() { return 3; }
export function App() {
directlyCalled();
return <div onClick={handleClick}><form onSubmit={handleSubmit} /></div>;
}
Hasil aktual:
handleClick (di onClick={handleClick}): rc=0 DEAD (SALAH — dipakai)
handleSubmit (di onSubmit={handleSubmit}): rc=0 DEAD (SALAH)
directlyCalled (dipanggil directlyCalled()): rc=1 active ✓
Konteks
ref_count dihitung dari CALLS edge. Handler dilewatkan sebagai prop JSX = REFERENSI, bukan CALL — jadi nol edge → rc=0 → false-dead. Same-file-usage (#220) hanya cover 7 bahasa non-TS, jadi tak menyelamatkan TSX. Dampak: audit --check dead-code di HAMPIR SEMUA komponen React false-positive massal (setiap event handler kelihatan dead); search --mode symbol rc salah; impact blast-radius handler salah.
Tujuan
Referensi fungsi di dalam JSX expression container ({identifier} sebagai nilai atribut, DAN {handler} di posisi lain seperti {items.map(renderItem)}) dihitung sebagai usage sehingga handler tidak false-flagged dead dan rc mencerminkan pemakaian nyata. Cek parser TSX (ts_backend_parser.py/fallback_js_backend.py) atau dead-code layer untuk lokasi yang tepat.
Constraint
Definition of Done
Mengapa (falsifiable — repro dijalankan 2026-07-13)
Fungsi yang dilewatkan sebagai nilai atribut JSX (
onClick={handleClick},onSubmit={handleSubmit}) dapatref_count=0/status=dead, padahal jelas dipakai sebagai event handler. Ini pola PALING umum di React — dan React/frontend adalah use-case utama CodeLens (scope: react/css/html).Repro (scan, cek backend.json). File
src/App.tsx:Hasil aktual:
handleClick(dionClick={handleClick}): rc=0 DEAD (SALAH — dipakai)handleSubmit(dionSubmit={handleSubmit}): rc=0 DEAD (SALAH)directlyCalled(dipanggildirectlyCalled()): rc=1 active ✓Konteks
ref_countdihitung dari CALLS edge. Handler dilewatkan sebagai prop JSX = REFERENSI, bukan CALL — jadi nol edge → rc=0 → false-dead. Same-file-usage (#220) hanya cover 7 bahasa non-TS, jadi tak menyelamatkan TSX. Dampak:audit --check dead-codedi HAMPIR SEMUA komponen React false-positive massal (setiap event handler kelihatan dead);search --mode symbolrc salah;impactblast-radius handler salah.Tujuan
Referensi fungsi di dalam JSX expression container (
{identifier}sebagai nilai atribut, DAN{handler}di posisi lain seperti{items.map(renderItem)}) dihitung sebagai usage sehingga handler tidak false-flagged dead dan rc mencerminkan pemakaian nyata. Cek parser TSX (ts_backend_parser.py/fallback_js_backend.py) atau dead-code layer untuk lokasi yang tepat.Constraint
tests/test_graph_accuracy_golden.py: handler viaonClick={fn}→ rc>=1 not dead; fungsi genuinely-unused → tetap dead (control).Definition of Done
handleClick/handleSubmit(via JSX prop) → rc>=1, NOT deaddirectlyCalledtetap rc>=1 (tak regres)