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)

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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions