Passer au contenu
cd /languages
  • Natif à grande échelle
  • Programmation
  • Prise en charge de l’AST et des symboles

C++ dans Maguyva : graphes de classes et d'appels pour grands projets

Maguyva prend en charge C++ avec AST, symboles et graphe, pour que les agents IA suivent classes, namespaces, redéfinitions virtuelles et appelants dans de grandes bases C++.

Pourquoi C++ demande de la structure, pas de la recherche textuelle

En C++, les noms ne sont pas uniques. send peut être une fonction libre, un membre de trois classes et une redéfinition dans une quatrième. Les namespaces, les templates et les définitions hors classe comme Socket::send dans un fichier .cpp répartissent un type sur de nombreux fichiers. La recherche textuelle renvoie toutes les correspondances ; elle ne dit pas à un agent laquelle un appel atteint.

Maguyva indexe classes, membres et appels avec leurs propriétaires, pour qu’un agent suive la vraie structure avant de modifier quoi que ce soit.

Ce que Maguyva extrait en C++

Maguyva couvre les extensions courantes de sources et d’en-têtes C++, dont .cpp, .cc, .cxx, .hpp, .hh et .hxx. Les classes, structs et fonctions sont extraites, et une définition hors classe comme void Socket::send() est rattachée à sa classe et à son namespace propriétaires. Les membres virtuels sont enregistrés, et les paramètres de template font partie des signatures.

Le typage des receveurs suit les paramètres, les déclarations locales, les champs, les boucles for sur intervalle et auto, et voit à travers unique_ptr, shared_ptr et optional, si bien qu’un appel comme conn->send() peut se résoudre vers la bonne classe. Les clauses de classe de base alimentent l’héritage, et les expressions new comptent comme instanciation.

Le même masquage des macros d’export et d’annotation qu’en C s’applique. Environ 273 noms de la bibliothèque standard (std::cout, std::endl, printf et similaires) sont filtrés des relations. Le graphe enregistre les appels, les includes, l’héritage, les redéfinitions, l’instanciation, les références de type, les lectures et écritures, et les arêtes throw.

Exemples de prompts pour agents

  • « Quelles classes redéfinissent Renderer::draw, et qui l’appelle ? » (dependency_search)
  • « Montre-moi OrderBook::match et tous ses appelants. » (find_symbol)
  • « Explique comment un message de données de marché atteint le moteur de stratégie. » (get_task_context)

Limites connues

  • .h figure dans les listes d’extensions de C, C++ et Objective-C ; dans les arbres mêlant C et C++, les en-têtes sont donc partagés entre ces profils.
  • Le corps des macros de type objet n’est pas analysé, et les appels aux noms filtrés de la bibliothèque standard ne sont pas des arêtes du graphe. Utilisez text_pattern_search pour les macros et les usages de std::.

Étapes suivantes

Connectez un dépôt avec le démarrage rapide, puis consultez la matrice de prise en charge sur la page de compatibilité. Si une partie de l’arbre est en C pur, lisez aussi le guide C.

Idéal pour

  • > Moteurs de jeu, systèmes de trading, navigateurs et autres grandes bases C++ où modifier un en-tête recompile la moitié de l'arbre.
  • > Les hiérarchies de classes à méthodes virtuelles, où la méthode exécutée est définie ailleurs qu'à l'endroit de l'appel.
  • > Les refactorings assistés par agent qui ont besoin des appelants et des redéfinitions avant un changement de signature.

Workflows d'agent

  • > Trouver toutes les redéfinitions d'une méthode virtuelle avant de modifier la classe de base.
  • > Lister dans toute la base de code les appelants d'une fonction ou méthode de classe avec namespace, comme `net::Socket::send`.
  • > Retracer où une classe est construite avec `new` et quels membres elle touche ensuite.

Détails du moteur

  • > Les définitions hors classe comme `void Socket::send()` sont rattachées à leur classe et à leur namespace propriétaires, et les membres virtuels sont enregistrés.
  • > Le typage des receveurs suit les paramètres, les variables locales, les champs, les `for` sur intervalle et `auto`, et voit à travers `unique_ptr`, `shared_ptr` et `optional`.
  • > Les clauses de classe de base alimentent l'héritage, les expressions `new` comptent comme instanciation, et environ 273 noms de la bibliothèque standard sont filtrés des relations.

Points d'entrée MCP utiles

  • find_symbol

    Utilisez-le pour un nom qualifié comme `OrderBook::match` quand vous avez besoin de la définition et des appelants.

  • dependency_search

    Utilisez-le sur une classe de base ou une méthode virtuelle pour trouver surcharges et appelants avant un changement de signature.

  • get_task_context

    Utilisez-le pour des prompts comme « explique comment un message de données de marché atteint le moteur de stratégie ».