Søk i kode med kodegrafen
Denne veiledningen viser deg hvordan du får et repo inn i kodegrafen og deretter bruker den til å svare på spørsmålet du faktisk har før en refaktorering: hva er det som avhenger av dette?
Kodegrafen er en database over symboler og kanter, bygget ved å parse de registrerte checkout-ene dine med tree-sitter. Verktøyene er agentvendte – du når dem ved å spørre en agent.
Før du begynner
Seksjon med tittelen «Før du begynner»Grafen indekserer Dart, JavaScript, TypeScript, TSX, PHP, Python, Rust, Zig, C, C++, Go, Java, Ruby, C#, Swift, Kotlin, R, Assembly, MATLAB og Ada. Filer i andre språk parses ikke, og vises derfor ikke i search_code, code_symbol, code_callers, code_callees eller code_impact.
To ting til er med på å avgjøre hva som blir indeksert:
- I et git-arbeidstre overlates oppramsingen til
git ls-files --cached --others --exclude-standard, så alle.gitignore-filer, nøstede ignore-filer,.git/info/excludeog den globale exclude-filen respekteres. Det er dette som holdernode_modulesog byggeutdata ute av grafen. - Generert Dart droppes uansett. Genererte filer er som regel sjekket inn, så git alene ville ikke utelate dem, og de endres ved hver kodegen-kjøring.
Få indeksert et repo
Seksjon med tittelen «Få indeksert et repo»Å registrere en checkout utløser RepoAdded, som starter index_code-pipelinen for den automatisk. Se Legg til repoer i et arbeidsområde.
Slik reindekserer du manuelt:
- Åpne Innstillinger → Arbeidsområde → Arkiv.
- Klikk på Indekser kode-knappen på raden til repoet.
- Mens den kjører, viser knappen antall ferdige filer av totalen, med en avbryt-kontroll. Når den er ferdig, går den over til en hake med antall symboler.
Grafen er partisjonert etter arbeidsområde, repo og checkout: den koblede checkout-en er én partisjon, og hvert område-arbeidstre får sin egen (med nøkkel fra id-en til det isolerte repoet).
Det er verdt å kjenne til to begrensninger, fordi de forklarer en ventetid som ser ut som at noe har hengt seg:
- Filvokteren slipper inn bare én indekseringskjøring om gangen på verten – en andre checkout må vente.
index_code-pipelinen er i tillegg begrenset til én kjøring per arbeidsområde, så to repoer i samme arbeidsområde stiller seg i kø; ulike arbeidsområder kan indeksere parallelt. Indeksereren serialiserer selv to kjøringer av samme checkout, slik at en pipelinestart og en gjennomgang fra vokteren ikke kan parse den to ganger. - Arbeidstrær som tilhører dvalende områder (ingen melding den siste uken), blir verken overvåket eller indeksert. Koblede checkout-er overvåkes fortsatt. En beslutning om å hoppe over noe vurderes på nytt etter fem minutter, så et område som blir aktivt igjen, blir fanget opp.
Finn et symbol
Seksjon med tittelen «Finn et symbol»Be en agent om å søke. Verktøyet er search_code, og det trenger både et arbeidsområde og et repo:
search_code(workspace_id: "...", repo_id: "...", query: "authentication middleware")Repo-id-er kommer fra list_repos. Det valgfrie mode-argumentet er keyword, semantic eller hybrid og har hybrid som standard – BM25 over navn, signaturer og dokumentasjonskommentarer, slått sammen med vektorlikhet.
Hvert resultat inneholder symbolets id, navn, kvalifiserte navn, art, filsti, start- og sluttlinje og signaturen hvis det har en. id-en er håndtaket du gir til alle andre verktøy på denne siden.
Når du kjenner det eksakte navnet, slå det opp direkte i stedet:
code_symbol(workspace_id: "...", repo_id: "...", name: "MyClass")Spor kall
Seksjon med tittelen «Spor kall»Begge tar en symbol_id fra et søkeresultat, pluss en valgfri limit (standard 50):
code_callers(workspace_id: "...", symbol_id: "...")code_callees(workspace_id: "...", symbol_id: "...")code_callers returnerer symbolene med en inngående kant til dette; code_callees returnerer dem det avhenger av.
Sjekk hva en endring vil bryte
Seksjon med tittelen «Sjekk hva en endring vil bryte»Dette er verktøyet hele siden finnes for:
code_impact(workspace_id: "...", symbol_id: "...", depth: 3)Det beregner radiusen for omvendte avhengigheter: alt som direkte eller transitivt avhenger av symbolet langs calls-, extends- og implements-kanter (imports, mixes-in og generiske referanser lagres i grafen, men det gås ikke langs dem her). depth er maksimalt antall hopp, mellom 1 og 6, med 2 som standard.
Resultatet er tre felt:
root– symbolet du spurte omimpacted– det nåbare settet, inkludert roten på dybde 0, der hvert element bærer sindepthfra rotenedgeCount– hvor mange kanter gjennomgangen krysset, som et antall i stedet for kantene selv
Kjør det før du gir nytt navn til noe eller endrer en signatur, og gi agenten listen over påvirkede symboler som omfang.
Resultatene verifiseres mot kallerens egen arbeidskopi
Seksjon med tittelen «Resultatene verifiseres mot kallerens egen arbeidskopi»For en agent som kaller, injiseres område-id-en automatisk, og resultatene verifiseres mot arbeidskopien til det området. Et symbol der filen ikke lenger finnes i kallerens tre, utelates, og svaret inneholder et staleOmitted-antall pluss en merknad om at indeksen er utdatert for disse symbolene.
Det er derfor du og en agent kan få ulike svar på det samme søket, og derfor en agent i ett område kan få et annet svar enn en agent i et annet. Hver samtale i et område deler det samme arbeidstreet. Verifiseringen feiler åpent: et utdatert svar foretrekkes framfor et tomt.
Be en agent kjøre code_impact (eller review_studio.blastRadius) når du vil ha påvirkningsradiusen til en endring. Se Gjennomgangsberegning.
Semantisk søk krever embedding-modellen
Seksjon med tittelen «Semantisk søk krever embedding-modellen»Symboler og fakta embeddes ved skrivetidspunktet, og bare når embedding-modellen på enheten er installert. Inntil da har mode: "semantic" og den semantiske halvdelen av hybrid ingenting å matche mot, og søket er i praksis kun nøkkelord.
Installer modellen under Innstillinger → Server → Diagnostikk og personvern → Semantisk søk før du indekserer. Symboler får en vektor når filen deres leses inn.
Merk også at enhver ny bygging av serverbinæren legger ut grammatikk-dylib-ene på nytt og endrer mtime-ene deres, noe som ugyldiggjør alle indekssjekkpunkter og tvinger en full ny gjennomgang av hver checkout ved neste kjøring. Den hasher på nytt, men trekker ikke ut uendrede filer på nytt.
Hva som ligger i grafen
Seksjon med tittelen «Hva som ligger i grafen»Symboltyper: function, method, class, field, enum, constructor, getter, setter, typedef, extension, mixin, variable.
Kanttyper: calls, imports, extends, implements, mixes in, references.
De kanoniske signaturene for disse verktøyene finnes i MCP-verktøy.