Saltar al contenido
cd /languages
  • Plataformas de Apple
  • Programación
  • Soporte de AST y símbolos

Swift en Maguyva: grafos de código para iOS y macOS

Maguyva admite Swift con AST, símbolos y grafo, para que los agentes de IA sigan protocolos, extensiones, inicializadores y observadores en código iOS y macOS.

Por qué Swift necesita más que una búsqueda de archivos

Swift reparte un mismo tipo en muchos lugares. Un struct se declara en un archivo, obtiene comportamiento de extensiones en otros tres y se ajusta a protocolos definidos en un paquete. Los cambios de estado se esconden en propiedades calculadas y en observadores willSet / didSet. Un agente que lee un archivo a la vez se pierde la mayor parte.

Maguyva indexa esa estructura para que un agente vea juntos los miembros, las conformidades y los llamadores de un tipo.

Qué extrae Maguyva en Swift

Maguyva cubre .swift. Los símbolos invocables incluyen funciones, init y deinit, subscripts, getters y setters de propiedades calculadas, y observadores willSet / didSet, así que el código que cambia el estado se puede buscar como símbolo en lugar de quedar enterrado en el cuerpo de las propiedades.

Los miembros declarados dentro de structs, enums, protocolos y extensiones se califican con su tipo propietario (por ejemplo CartStore.add), y los miembros añadidos en una extensión se atribuyen al tipo extendido. A los nombres de definición se les quitan los parámetros genéricos, las listas de conformidad a protocolos y los sufijos ? / !, de modo que las búsquedas usan el nombre simple. Las llamadas conservan self. y la calificación de clase, y los trailing closures cuentan en la aridad de la llamada.

El grafo registra llamadas, conformidad a protocolos, herencia, sobrescrituras, instanciación, atributos, referencias de tipo, lecturas y escrituras, y aristas de throw.

Ejemplos de prompts para agentes

  • “¿Qué tipos se ajustan a PaymentProvider y dónde se crea cada uno?” (dependency_search)
  • “¿Quién llama a CartStore.add y desde qué vistas?” (find_symbol y luego dependency_search incoming)
  • “Explica cómo llega una notificación push a la pantalla de la bandeja de entrada.” (get_task_context)

Limitaciones conocidas

  • Solo se asigna el código fuente .swift. Los archivos Storyboard y XIB no están en la lista de extensiones, así que las conexiones de Interface Builder quedan fuera del grafo.
  • Las llamadas de la biblioteca estándar y de Foundation como print, debugPrint, NSLog y las aserciones se filtran de las relaciones, así que no son aristas del grafo. Usa text_pattern_search para encontrarlas.

Próximos pasos

Conecta un repositorio con el inicio rápido y luego revisa la matriz de compatibilidad en la página de compatibilidad. Si publicas el mismo producto en Android, lee la guía de Kotlin.

Mejor uso

  • > Equipos de iOS y macOS con grandes targets de app y paquetes Swift compartidos.
  • > Bases de código construidas en torno a protocolos y extensiones, donde el comportamiento de un tipo se reparte en muchos archivos.
  • > Flujos de trabajo con agentes que necesitan análisis de impacto antes de cambiar un modelo, servicio o protocolo compartido.

Flujos de trabajo del agente

  • > Encontrar todos los tipos que se ajustan a un protocolo antes de cambiar uno de sus requisitos.
  • > Rastrear los llamadores de un método de servicio entre ViewModels, coordinadores y paquetes.
  • > Localizar inicializadores, propiedades calculadas y observadores `didSet` que tocan un estado.

Detalles del motor

  • > Los símbolos invocables incluyen funciones, `init`, `deinit`, subscripts, getters y setters de propiedades calculadas, y observadores `willSet` / `didSet`.
  • > Los miembros de structs, enums, protocolos y extensiones se califican con su tipo propietario, como `CartStore.add`.
  • > A los nombres de definición se les quitan los parámetros genéricos, las listas de conformidad a protocolos y los sufijos `?` / `!`, y las llamadas conservan `self.` y la calificación de clase.

Puntos de entrada MCP útiles

  • find_symbol

    Úsalo con el nombre de un tipo, protocolo o método cuando necesites la definición y las referencias.

  • dependency_search

    Úsalo sobre un protocolo para encontrar los tipos que se ajustan a él, o en incoming sobre un método para encontrar sus llamadores.

  • get_task_context

    Úsalo para prompts como "explica cómo llega una notificación push a la pantalla de la bandeja de entrada".