Cari kod dengan graf kod
Panduan ini menunjukkan cara memasukkan repo ke dalam graf kod dan kemudian menggunakannya untuk menjawab soalan yang sebenarnya anda hadapi sebelum refaktor: apa yang bergantung pada ini?
Graf kod ialah pangkalan data simbol dan tepi yang dibina dengan menghuraikan checkout berdaftar anda menggunakan tree-sitter. Alatnya dihadapi ejen — anda mengaksesnya dengan meminta ejen.
Sebelum anda bermula
Bahagian bertajuk “Sebelum anda bermula”Graf mengindeks Dart, JavaScript, TypeScript, TSX, PHP, Python, Rust, Zig, C, C++, Go, Java, Ruby, C#, Swift, Kotlin, R, Assembly, MATLAB dan Ada. Fail dalam bahasa lain tidak dihuraikan, jadi ia tidak muncul dalam search_code, code_symbol, code_callers, code_callees atau code_impact.
Dua lagi perkara menentukan apa yang diindeks:
- Dalam work tree git, penghitungan menurut
git ls-files --cached --others --exclude-standard, jadi setiap.gitignore, fail abaikan bersarang,.git/info/excludedan fail pengecualian global dihormati. Itulah yang mengekalkannode_modulesdan output binaan di luar graf. - Dart yang dijana tetap dibuang. Fail yang dijana biasanya dikomit, jadi git sahaja tidak akan mengecualikannya, dan ia sentiasa berubah pada setiap larian penjanaan kod.
Indekskan repo
Bahagian bertajuk “Indekskan repo”Mendaftarkan checkout mencetuskan RepoAdded, yang memulakan pipeline index_code untuknya secara automatik. Lihat Tambah repositori ke ruang kerja.
Untuk mengindeks semula secara manual:
- Buka Tetapan → Ruang kerja → Repositori.
- Klik butang Indeks kod pada baris repo itu.
- Semasa ia berjalan, butang itu menunjukkan fail yang selesai daripada jumlah keseluruhan, dengan kawalan batal. Apabila ia selesai, ia bertukar menjadi tanda semak dengan bilangan simbol.
Graf dipartisyen mengikut ruang kerja, repo dan checkout: checkout yang dipautkan ialah satu partisyen, dan setiap worktree ruang mendapat partisyen sendiri (dikunci pada id repo terasingnya).
Dua pengehadan patut anda ketahui, kerana ia menjelaskan penantian yang kelihatan seperti tergantung:
- Pemantau fail hanya membenarkan satu larian indeks pada satu masa pada hos — checkout kedua menunggu. Pipeline
index_codedihadkan secara berasingan kepada satu larian bagi setiap ruang kerja, jadi dua repo dalam ruang kerja yang sama beratur; ruang kerja yang berbeza boleh mengindeks secara selari. Pengindeks itu sendiri menjalankan dua larian checkout yang sama secara bersiri supaya permulaan pipeline dan sapuan pemantau tidak boleh menghuraikannya dua kali. - Worktree milik ruang dorman (tiada mesej dalam minggu lalu) tidak dipantau dan tidak diindeks. Checkout yang dipautkan kekal dipantau. Keputusan melangkau disemak semula selepas lima minit, jadi ruang yang menjadi aktif semula akan diambil semula.
Cari simbol
Bahagian bertajuk “Cari simbol”Minta ejen mencari. Alatnya ialah search_code dan ia memerlukan kedua-dua ruang kerja dan repo:
search_code(workspace_id: "...", repo_id: "...", query: "authentication middleware")Id repo datang daripada list_repos. Argumen mode yang pilihan ialah keyword, semantic atau hybrid dan lalainya hybrid — BM25 ke atas nama, tandatangan dan komen doc, digabungkan dengan keserupaan vektor.
Setiap hasil membawa id, nama, nama berkelayakan, jenis, laluan fail, baris mula dan baris akhir simbol itu serta tandatangannya apabila ada. id itulah kunci yang anda suapkan kepada setiap alat lain pada halaman ini.
Apabila anda tahu nama tepatnya, cari terus sebagai ganti:
code_symbol(workspace_id: "...", repo_id: "...", name: "MyClass")Jejak panggilan
Bahagian bertajuk “Jejak panggilan”Kedua-duanya mengambil symbol_id daripada hasil carian, serta limit yang pilihan (lalai 50):
code_callers(workspace_id: "...", symbol_id: "...")code_callees(workspace_id: "...", symbol_id: "...")code_callers memulangkan simbol yang mempunyai tepi masuk ke simbol ini; code_callees memulangkan simbol yang bergantung padanya.
Semak apa yang akan dipecahkan oleh sesuatu perubahan
Bahagian bertajuk “Semak apa yang akan dipecahkan oleh sesuatu perubahan”Inilah alat yang menjadi tujuan seluruh halaman ini:
code_impact(workspace_id: "...", symbol_id: "...", depth: 3)Ia mengira jejari kebergantungan terbalik: segala-galanya yang bergantung secara langsung atau transitif pada simbol itu merentasi tepi calls, extends dan implements (imports, mixes-in dan rujukan generik disimpan dalam graf tetapi tidak dilalui di sini). depth ialah bilangan hop maksimum, antara 1 dan 6, dengan lalai 2.
Hasilnya ialah tiga medan:
root— simbol yang anda tanyakanimpacted— set yang boleh dicapai, termasuk root pada kedalaman 0, setiap satu membawadepth-nya dari rootedgeCount— bilangan tepi yang dilalui oleh traversal, sebagai kiraan dan bukan tepi itu sendiri
Jalankannya sebelum anda menamakan semula atau mengubah sesuatu tandatangan dan berikan senarai impacted itu kepada ejen sebagai skopnya.
Hasil disemak terhadap salinan kerja pemanggil sendiri
Bahagian bertajuk “Hasil disemak terhadap salinan kerja pemanggil sendiri”Bagi pemanggil ejen, id ruang disuntik secara automatik dan hasilnya disahkan terhadap salinan kerja ruang itu. Simbol yang failnya tidak lagi wujud dalam pokok pemanggil akan ditinggalkan dan respons membawa kiraan staleOmitted serta nota yang mengatakan indeks itu lapuk bagi simbol tersebut.
Inilah sebabnya anda dan ejen boleh mendapat jawapan yang berbeza bagi pertanyaan yang sama, dan sebabnya ejen dalam satu ruang boleh mendapat jawapan yang berbeza daripada ejen dalam ruang lain. Setiap perbualan dalam sesuatu ruang berkongsi satu worktree itu. Pengesahan gagal secara terbuka: jawapan yang lapuk lebih diutamakan daripada jawapan yang kosong.
Minta ejen menjalankan code_impact (atau review_studio.blastRadius) apabila anda mahukan jejari letupan sesuatu perubahan. Lihat Pengiraan semakan.
Carian semantik memerlukan model pembenaman
Bahagian bertajuk “Carian semantik memerlukan model pembenaman”Simbol dan fakta dibenamkan pada masa penulisan dan hanya apabila model pembenaman pada peranti dipasang. Sehingga itu, mode: "semantic" dan separuh semantik bagi hibrid tiada apa-apa untuk dipadankan dan carian pada praktiknya hanya berdasarkan kata kunci.
Pasang model itu di Tetapan → Pelayan → Diagnostik & privasi → Carian semantik sebelum anda mengindeks. Simbol mendapat vektor apabila failnya diinges.
Perhatikan juga bahawa sebarang pembinaan semula binari pelayan akan menempatkan semula dylib tatabahasa dan mengubah mtime-nya, yang membatalkan setiap titik semak indeks dan memaksa satu laluan semula penuh bagi setiap checkout pada larian seterusnya. Ia mengira semula hash, tetapi ia tidak mengekstrak semula fail yang tidak berubah.
Apa yang ada dalam graf
Bahagian bertajuk “Apa yang ada dalam graf”Jenis simbol: function, method, class, field, enum, constructor, getter, setter, typedef, extension, mixin, variable.
Jenis tepi: calls, imports, extends, implements, mixes in, references.
Tandatangan kanonik bagi alat ini terdapat dalam Alat MCP.