Pular para o conteúdo
cd /languages
  • Plataformas Apple
  • Programação
  • Suporte a AST e símbolos

Swift no Maguyva: grafos de código para iOS e macOS

O Maguyva oferece suporte a Swift com AST, símbolos e grafo, para que agentes de IA sigam protocolos, extensions, inicializadores e observers em código iOS e macOS.

Por que Swift precisa de mais que busca em arquivos

Swift espalha um mesmo tipo por muitos lugares. Uma struct é declarada em um arquivo, ganha comportamento de extensions em outros três e se conforma a protocolos definidos em um pacote. Mudanças de estado se escondem em propriedades computadas e observers willSet / didSet. Um agente que lê um arquivo por vez perde a maior parte disso.

O Maguyva indexa essa estrutura, para que um agente veja juntos os membros, as conformidades e os chamadores de um tipo.

O que o Maguyva extrai em Swift

O Maguyva cobre .swift. Os símbolos chamáveis incluem funções, init e deinit, subscripts, getters e setters de propriedades computadas e observers willSet / didSet, então o código que muda estado pode ser buscado como símbolo em vez de ficar enterrado no corpo das propriedades.

Membros declarados em structs, enums, protocolos e extensions são qualificados pelo tipo dono (por exemplo CartStore.add), e membros adicionados em uma extension são atribuídos ao tipo estendido. Os nomes de definição têm parâmetros genéricos, listas de conformidade a protocolos e sufixos ? / ! removidos, então as buscas usam o nome simples. As chamadas preservam self. e a qualificação de classe, e trailing closures contam na aridade da chamada.

O grafo registra chamadas, conformidade a protocolos, herança, sobrescritas, instanciação, atributos, referências de tipo, leituras e escritas, e arestas de throw.

Exemplos de prompts para agentes

  • “Quais tipos se conformam a PaymentProvider e onde cada um é criado?” (dependency_search)
  • “Quem chama CartStore.add e a partir de quais views?” (find_symbol, depois dependency_search incoming)
  • “Explique como uma notificação push chega à tela da caixa de entrada.” (get_task_context)

Limitações conhecidas

  • Apenas o código-fonte .swift é mapeado. Arquivos Storyboard e XIB não estão na lista de extensões, então as conexões do Interface Builder ficam fora do grafo.
  • Chamadas da biblioteca padrão e do Foundation como print, debugPrint, NSLog e asserções são filtradas das relações, então não são arestas do grafo. Use text_pattern_search para encontrá-las.

Próximos passos

Conecte um repositório pelo início rápido e depois confira a matriz de suporte na página de compatibilidade. Se você lança o mesmo produto no Android, leia o guia de Kotlin.

Uso ideal

  • > Equipes iOS e macOS com grandes targets de app e pacotes Swift compartilhados.
  • > Bases de código construídas em torno de protocolos e extensions, em que o comportamento de um tipo fica espalhado por muitos arquivos.
  • > Fluxos de trabalho com agentes que precisam de análise de impacto antes de mudar um modelo, serviço ou protocolo compartilhado.

Fluxos de trabalho de agente

  • > Encontrar todos os tipos que se conformam a um protocolo antes de mudar um de seus requisitos.
  • > Rastrear os chamadores de um método de serviço entre ViewModels, coordinators e pacotes.
  • > Localizar inicializadores, propriedades computadas e observers `didSet` que mexem em um estado.

Detalhes do motor

  • > Os símbolos chamáveis incluem funções, `init`, `deinit`, subscripts, getters e setters de propriedades computadas e observers `willSet` / `didSet`.
  • > Membros de structs, enums, protocolos e extensions são qualificados pelo tipo dono, como `CartStore.add`.
  • > Parâmetros genéricos, listas de conformidade a protocolos e sufixos `?` / `!` são removidos dos nomes de definição, e as chamadas preservam `self.` e a qualificação de classe.

Pontos de entrada MCP úteis

  • find_symbol

    Use com o nome de um tipo, protocolo ou método quando precisar da definição e das referências.

  • dependency_search

    Use em um protocolo para encontrar os tipos que se conformam a ele, ou em incoming em um método para encontrar os chamadores.

  • get_task_context

    Use para prompts como "explique como uma notificação push chega à tela da caixa de entrada".