Skip to content

feat(search,context): optional LSP-backed find-references for precision (--deep upgrade) #255

Description

@Wolfvin

Mengapa

Gap-analysis vs Serena MCP. Serena's find-references pakai LSP (AST/symbol table sejati) — presisi tinggi, tidak miss reference. CodeLens's find-references (search --mode symbol ref_count, context --check trace --direction up) pakai graph buatan sendiri yang APPROXIMATION — buktinya: sepanjang sesi ini serangkaian bug ref-count/trace ditemukan & fixed (#210, #219, #222, #223 module-level caller yang baru merged). Graph approximation terus punya edge case; LSP textDocument/references tidak.

Konteks

CodeLens SUDAH punya lsp_client.py dengan find_references(file, line, character) (verified: lsp_client.py:345, sudah call textDocument/references). hybrid_engine.py sudah pakai LSP untuk VERIFY dead-code & enhance impact (_filter_external_references). Jadi kemampuan LSP-references SUDAH ADA sebagian — tapi cuma dipakai internal untuk verifikasi, BUKAN di-expose sebagai jalur navigasi presisi untuk agent.

Tujuan

Saat --deep aktif (LSP tersedia), search --mode symbol / context --check trace --direction up gunakan LSP find_references sebagai sumber presisi (bukan cuma graph). Tanpa --deep atau tanpa LSP → tetap pakai graph (backward compatible, zero-config tetap jalan). Ini bukan ganti backend — ini upgrade opt-in yang manfaatkan LSP yang sudah ada untuk kasus presisi tinggi.

Constraint

  • JANGAN jadikan LSP mandatory — zero-config (tanpa LSP) HARUS tetap jalan pakai graph. LSP = enhancement opt-in via --deep, konsisten dgn arsitektur sekarang.
  • Reuse hybrid_engine.py/lsp_client.py — sudah ada find_references + _filter_external_references.
  • Perlu resolve symbol name → (file, line, character) untuk feed ke LSP — cek apakah _find_symbol_char di hybrid_engine sudah cukup.
  • Design doc kalau ubah alur navigasi.

Definition of Done

  • search --mode symbol X --deep (LSP ada) → references dari LSP, bandingkan vs graph-only, tunjukkan presisi lebih baik di kasus yang graph miss
  • Tanpa --deep atau tanpa LSP → graph-only, tidak ada regresi
  • Regression test kedua jalur (dengan/tanpa LSP)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions