Passer au contenu
cd /languages
  • Cœur système
  • Programmation
  • Prise en charge de l’AST et des symboles

C dans Maguyva : des graphes d'appels pour le code système et embarqué

Maguyva prend en charge C avec AST, symboles et graphe, pour que les agents IA suivent fonctions, structs, includes et appelants dans le code système, firmware et bibliothèque.

Pourquoi C demande un graphe d’appels, pas grep

C n’a ni classes ni modules pour organiser le code. La structure vit dans les appels de fonctions, les en-têtes et les structs, et un même nom peut apparaître dans des commentaires, des macros et des littéraux de chaîne. Des macros d’export et d’annotation enveloppent les déclarations, ce qui fait trébucher les outils qui ne savent analyser que du C pur. Pour un agent, la première étape sûre, c’est le graphe d’appels.

Maguyva construit ce graphe pour qu’un agent voie ce qu’une fonction atteint et ce qui l’atteint avant de proposer un changement.

Ce que Maguyva extrait en C

Maguyva couvre .c et .h. Les définitions de fonctions sont extraites comme symboles, et les structs et unions peuvent être sélectionnées comme définitions de type dans la recherche structurelle. Les directives #include deviennent des relations d’import.

Les macros d’export et de visibilité (des motifs comme FOO_API, DLLEXPORT ou LIBEXPORT) et les macros d’annotation de thread safety (comme GUARDED_BY et REQUIRES) sont masquées avant l’analyse, si bien que les déclarations qu’elles enveloppent sont toujours reconnues comme des déclarations. Le corps des macros de type fonction est analysé ; celui des macros de type objet ne l’est pas.

Le graphe enregistre les appels, les includes, l’instanciation par littéraux composés, les références de type, les lectures et écritures, et le flux de contrôle. Environ 124 appels de la bibliothèque standard C (printf, malloc, free, memcpy, strlen et similaires) sont filtrés des relations pour faire ressortir le code du projet.

Exemples de prompts pour agents

  • « Qui appelle uart_write, directement ou via d’autres fonctions ? » (dependency_search en incoming)
  • « Quels fichiers incluent config.h, et lesquelles de ses structs utilisent-ils ? » (dependency_search, puis find_symbol)
  • « Explique comment un paquet passe de l’interruption de réception au parseur de protocole. » (get_task_context)

Limites connues

  • C n’a ni classes ni exceptions ; les relations d’héritage, d’implémentation d’interface, de surcharge, de levée et de capture sont donc marquées comme non applicables.
  • .h figure dans les listes d’extensions de C, C++ et Objective-C ; les en-têtes multilangages sont donc partagés entre ces profils.
  • Les appels aux fonctions filtrées de la bibliothèque standard ne sont pas des arêtes du graphe. Utilisez text_pattern_search quand il vous faut chaque malloc ou memcpy.

É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é. Pour le code C++ du même arbre, lisez le guide C++.

Idéal pour

  • > Les équipes firmware, embarqué et système d'exploitation, où un petit changement sur une fonction partagée peut atteindre des chemins matériels.
  • > Les bibliothèques C de longue date avec en-têtes publics, macros d'export et nombreuses unités de traduction internes.
  • > Les revues assistées par agent où la question est : « Qui appelle ceci, et par quels en-têtes ? »

Workflows d'agent

  • > Trouver tous les appelants d'une fonction avant d'en modifier la signature ou la gestion d'erreurs.
  • > Cartographier les fichiers qui incluent un en-tête et les structs qu'ils utilisent.
  • > Suivre une requête depuis un gestionnaire d'interruption ou un point d'entrée à travers les fonctions qu'elle atteint.

Détails du moteur

  • > La prise en charge de C couvre `.c` et `.h`. Les définitions de fonctions sont des symboles, les structs et unions des définitions de type, et `#include` devient une relation d'import.
  • > Les macros d'export, de visibilité et d'annotation de thread safety sont masquées avant l'analyse, si bien que les déclarations enveloppées sont analysées. Le corps des macros de type fonction est analysé ; celui des macros de type objet ne l'est pas.
  • > Environ 124 appels de la bibliothèque standard comme `printf`, `malloc` et `memcpy` sont filtrés. Les relations d'héritage, de surcharge et d'exception sont marquées comme non applicables.

Points d'entrée MCP utiles

  • find_symbol

    Utilisez-le pour un nom de fonction ou de struct quand vous avez besoin de la définition et de chaque référence.

  • dependency_search

    Utilisez la traversée incoming sur une fonction partagée avant d'en modifier la signature ou la gestion d'erreurs.

  • get_task_context

    Utilisez-le pour des prompts comme « explique comment un paquet passe de l'interruption de réception au parseur de protocole ».