Hoppa till innehåll
cd /languages
  • Nativ kod i stor skala
  • Programmering
  • Stöd för AST och symboler

C++ i Maguyva: klass- och anropsgrafer för stora kodbaser

Maguyva stöder C++ med AST, symboler och graf, så att AI-agenter kan följa klasser, namnrymder, virtuella överskrivningar och anropare i stora C++-kodbaser.

Varför C++ behöver struktur, inte textsökning

I C++ är namn inte unika. send kan vara en fri funktion, en medlem i tre klasser och en överskrivning i en fjärde. Namnrymder, templates och definitioner utanför klassen, som Socket::send i en .cpp-fil, sprider en typ över många filer. Textsökning returnerar varje träff men säger inte till en agent vilken av dem ett anrop når.

Maguyva indexerar klasser, medlemmar och anrop tillsammans med sina ägare, så att en agent kan följa den verkliga strukturen innan den redigerar.

Vad Maguyva extraherar i C++

Maguyva täcker de vanliga filändelserna för C++-källkod och headers, bland annat .cpp, .cc, .cxx, .hpp, .hh och .hxx. Klasser, structs och funktioner extraheras, och en definition utanför klassen som void Socket::send() tillskrivs sin ägarklass och namnrymd. Virtuella medlemmar registreras, och templateparametrar ingår i signaturerna.

Mottagartypningen följer parametrar, lokala deklarationer, fält, intervallbaserade for-loopar och auto, och ser igenom unique_ptr, shared_ptr och optional, så ett anrop som conn->send() kan lösas till rätt klass. Basklassatser matar arvet, och new-uttryck räknas som instansiering.

Samma maskering av export- och annoteringsmakron som i C gäller. Omkring 273 namn i standardbiblioteket (std::cout, std::endl, printf och liknande) filtreras bort ur relationerna. Grafen registrerar anrop, includes, arv, överskrivningar, instansiering, typreferenser, läsningar och skrivningar samt throw-kanter.

Exempel på prompter för agenter

  • “Vilka klasser skriver över Renderer::draw, och vem anropar den?” (dependency_search)
  • “Visa mig OrderBook::match och alla som anropar den.” (find_symbol)
  • “Förklara hur ett marknadsdatameddelande når strategimotorn.” (get_task_context)

Kända begränsningar

  • .h finns i filändelselistorna för C, C++ och Objective-C, så i träd som blandar C och C++ delas headers mellan de profilerna.
  • Kroppar i objektliknande makron parsas inte, och anrop till filtrerade namn i standardbiblioteket är inte kanter i grafen. Använd text_pattern_search för makron och användning av std::.

Nästa steg

Anslut ett repo med snabbstarten och kontrollera sedan stödmatrisen på kompatibilitetssidan. Om delar av trädet är ren C, läs även guiden för C.

Bäst lämpad för

  • > Spelmotorer, handelssystem, webbläsare och andra stora C++-kodbaser där en ändrad header bygger om halva trädet.
  • > Klasshierarkier med virtuella metoder, där metoden som körs är definierad någon annanstans än där den anropas.
  • > Agentstödd refaktorering som behöver anropare och överskrivningar före en signaturändring.

Agentarbetsflöden

  • > Hitta alla överskrivningar av en virtuell metod innan basklassen ändras.
  • > Lista anropare i hela kodbasen till en funktion eller klassmetod i en namnrymd, till exempel `net::Socket::send`.
  • > Spåra var en klass skapas med `new` och vilka medlemmar den rör därefter.

Motordetaljer

  • > Definitioner utanför klassen som `void Socket::send()` tillskrivs sin ägarklass och namnrymd, och virtuella medlemmar registreras.
  • > Mottagartypningen följer parametrar, lokala variabler, fält, intervallbaserad `for` och `auto`, och ser igenom `unique_ptr`, `shared_ptr` och `optional`.
  • > Basklassatser matar arvet, `new`-uttryck räknas som instansiering, och omkring 273 namn i standardbiblioteket filtreras bort ur relationerna.

Användbara MCP-ingångar

  • find_symbol

    Använd det för ett kvalificerat namn som `OrderBook::match` när du behöver definitionen och anroparna.

  • dependency_search

    Använd det på en basklass eller virtuell metod före en signaturändring för att hitta överskrivningar och anropare.

  • get_task_context

    Använd det för prompter som "förklara hur ett marknadsdatameddelande når strategimotorn".