Hopp til innhold
cd /languages
  • Native i stor skala
  • Programmering
  • AST- og symbolstøtte

C++ i Maguyva: klasse- og kallgrafer for store kodebaser

Maguyva støtter C++ med AST, symboler og graf, slik at AI-agenter kan følge klasser, navnerom, virtuelle overstyringer og kallere i store C++-kodebaser.

Hvorfor C++ trenger struktur, ikke tekstsøk

I C++ er navn ikke unike. send kan være en fri funksjon, et medlem av tre klasser og en overstyring i en fjerde. Navnerom, templates og definisjoner utenfor klassen, som Socket::send i en .cpp-fil, sprer én type over mange filer. Tekstsøk returnerer hvert treff, men forteller ikke en agent hvilket av dem et kall treffer.

Maguyva indekserer klasser, medlemmer og kall sammen med eierne deres, slik at en agent kan følge den reelle strukturen før den redigerer.

Hva Maguyva henter ut i C++

Maguyva dekker de vanlige filendelsene for C++-kildekode og headere, blant annet .cpp, .cc, .cxx, .hpp, .hh og .hxx. Klasser, structs og funksjoner hentes ut, og en definisjon utenfor klassen som void Socket::send() tilskrives eierklassen og navnerommet sitt. Virtuelle medlemmer registreres, og templateparametere er en del av signaturene.

Mottakertypingen følger parametere, lokale deklarasjoner, felt, områdebaserte for-løkker og auto, og ser gjennom unique_ptr, shared_ptr og optional, så et kall som conn->send() kan løses til riktig klasse. Basisklasseklausuler gir grunnlag for arv, og new-uttrykk teller som instansiering.

Den samme maskeringen av eksport- og annoteringsmakroer som i C gjelder. Rundt 273 navn i standardbiblioteket (std::cout, std::endl, printf og lignende) filtreres ut av relasjonene. Grafen registrerer kall, includes, arv, overstyringer, instansiering, typereferanser, lesinger og skrivinger samt throw-kanter.

Eksempler på prompter for agenter

  • «Hvilke klasser overstyrer Renderer::draw, og hvem kaller den?» (dependency_search)
  • «Vis meg OrderBook::match og alle som kaller den.» (find_symbol)
  • «Forklar hvordan en markedsdatamelding når strategimotoren.» (get_task_context)

Kjente begrensninger

  • .h står på listene over filendelser for C, C++ og Objective-C, så i trær som blander C og C++, deles headere mellom disse profilene.
  • Kropper i objektlignende makroer parses ikke, og kall til filtrerte navn i standardbiblioteket er ikke kanter i grafen. Bruk text_pattern_search for makroer og bruk av std::.

Neste steg

Koble til et repositorium med hurtigstarten, og se deretter støttematrisen på kompatibilitetssiden. Hvis deler av treet er ren C, bør du også lese veiledningen for C.

Best egnet

  • > Spillmotorer, handelssystemer, nettlesere og andre store C++-kodebaser der én endret header bygger om halve treet.
  • > Klassehierarkier med virtuelle metoder, der metoden som kjører, er definert et annet sted enn der den kalles.
  • > Agentstøttet refaktorering som trenger kallere og overstyringer før en signaturendring.

Agent-arbeidsflyter

  • > Finne alle overstyringer av en virtuell metode før basisklassen endres.
  • > Liste kallere i hele kodebasen til en funksjon eller klassemetode i et navnerom, for eksempel `net::Socket::send`.
  • > Spore hvor en klasse opprettes med `new`, og hvilke medlemmer den berører etterpå.

Motordetaljer

  • > Definisjoner utenfor klassen som `void Socket::send()` tilskrives eierklassen og navnerommet sitt, og virtuelle medlemmer registreres.
  • > Mottakertypingen følger parametere, lokale variabler, felt, områdebasert `for` og `auto`, og ser gjennom `unique_ptr`, `shared_ptr` og `optional`.
  • > Basisklasseklausuler gir grunnlag for arv, `new`-uttrykk teller som instansiering, og rundt 273 navn i standardbiblioteket filtreres ut av relasjonene.

Nyttige MCP-inngangspunkter

  • find_symbol

    Bruk det for et kvalifisert navn som `OrderBook::match` når du trenger definisjonen og kallerne.

  • dependency_search

    Bruk det på en basisklasse eller virtuell metode før en signaturendring for å finne overstyringer og kallere.

  • get_task_context

    Bruk det til prompter som «forklar hvordan en markedsdatamelding når strategimotoren».