Passer au contenu
cd /languages
  • Plateformes Apple
  • Programmation
  • Prise en charge de l’AST et des symboles

Swift dans Maguyva : des graphes de code pour iOS et macOS

Maguyva prend en charge Swift avec AST, symboles et graphe, pour que les agents IA suivent protocoles, extensions, initialiseurs et observateurs dans le code iOS et macOS.

Pourquoi Swift demande plus qu’une recherche de fichiers

Swift répartit un même type à de nombreux endroits. Une structure est déclarée dans un fichier, reçoit du comportement d’extensions situées dans trois autres et se conforme à des protocoles définis dans un paquet. Les changements d’état se cachent dans les propriétés calculées et les observateurs willSet / didSet. Un agent qui lit un fichier à la fois en manque la plus grande partie.

Maguyva indexe cette structure, pour qu’un agent voie ensemble les membres d’un type, ses conformités et ses appelants.

Ce que Maguyva extrait en Swift

Maguyva couvre .swift. Les symboles appelables comprennent les fonctions, init et deinit, les subscripts, les getters et setters des propriétés calculées, et les observateurs willSet / didSet : le code qui modifie l’état se recherche donc comme un symbole au lieu de rester enfoui dans le corps des propriétés.

Les membres déclarés dans les structures, énumérations, protocoles et extensions sont qualifiés par leur type propriétaire (par exemple CartStore.add), et les membres ajoutés dans une extension sont rattachés au type étendu. Les paramètres génériques, les listes de conformité aux protocoles et les suffixes ? / ! sont retirés des noms de définition, si bien que les recherches utilisent le nom simple. Les appels conservent self. et la qualification par la classe, et les closures finales comptent dans l’arité de l’appel.

Le graphe enregistre les appels, la conformité aux protocoles, l’héritage, les surcharges, l’instanciation, les attributs, les références de type, les lectures et écritures, et les arêtes throw.

Exemples de prompts pour agents

  • « Quels types sont conformes à PaymentProvider, et où chacun est-il créé ? » (dependency_search)
  • « Qui appelle CartStore.add, et depuis quelles vues ? » (find_symbol, puis dependency_search en incoming)
  • « Explique comment une notification push arrive jusqu’à l’écran de la boîte de réception. » (get_task_context)

Limites connues

  • Seules les sources .swift sont associées. Les fichiers Storyboard et XIB ne figurent pas dans la liste des extensions ; les connexions Interface Builder restent donc hors du graphe.
  • Les appels de la bibliothèque standard et de Foundation comme print, debugPrint, NSLog et les assertions sont filtrés des relations et ne sont donc pas des arêtes du graphe. Utilisez text_pattern_search pour les retrouver.

É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 vous livrez le même produit sur Android, lisez le guide Kotlin.

Idéal pour

  • > Les équipes iOS et macOS avec de grandes cibles d'application et des paquets Swift partagés.
  • > Les bases de code construites autour de protocoles et d'extensions, où le comportement d'un type est réparti sur de nombreux fichiers.
  • > Les workflows d'agent qui exigent une analyse d'impact avant de modifier un modèle, un service ou un protocole partagé.

Workflows d'agent

  • > Trouver tous les types conformes à un protocole avant d'en modifier une exigence.
  • > Retracer les appelants d'une méthode de service à travers ViewModels, coordinateurs et paquets.
  • > Repérer les initialiseurs, propriétés calculées et observateurs `didSet` qui touchent un état donné.

Détails du moteur

  • > Les symboles appelables comprennent les fonctions, `init`, `deinit`, les subscripts, les getters et setters des propriétés calculées, et les observateurs `willSet` / `didSet`.
  • > Les membres des structures, énumérations, protocoles et extensions sont qualifiés par leur type propriétaire, par exemple `CartStore.add`.
  • > Les paramètres génériques, les listes de conformité et les suffixes `?` / `!` sont retirés des noms de définition, et les appels conservent `self.` et la qualification par la classe.

Points d'entrée MCP utiles

  • find_symbol

    Utilisez-le pour un nom de type, de protocole ou de méthode quand vous avez besoin de la définition et des références.

  • dependency_search

    Utilisez-le sur un protocole pour trouver les types conformes, ou en incoming sur une méthode pour trouver ses appelants.

  • get_task_context

    Utilisez-le pour des prompts comme « explique comment une notification push arrive jusqu'à l'écran de la boîte de réception ».