Vai al contenuto
cd /languages
  • Piattaforme Apple
  • Programmazione
  • Supporto AST e simboli

Swift in Maguyva: grafi del codice per iOS e macOS

Maguyva supporta Swift con AST, simboli e grafo, così gli agenti IA seguono protocolli, extension, inizializzatori e observer nel codice iOS e macOS.

Perché Swift richiede più di una ricerca nei file

Swift distribuisce un tipo in molti punti. Una struct viene dichiarata in un file, riceve comportamento da extension in altri tre e si conforma a protocolli definiti in un package. I cambi di stato si nascondono in proprietà calcolate e observer willSet / didSet. Un agente che legge un file alla volta perde gran parte di tutto questo.

Maguyva indicizza questa struttura, così un agente vede insieme i membri, le conformità e i chiamanti di un tipo.

Cosa estrae Maguyva in Swift

Maguyva copre .swift. I simboli invocabili includono funzioni, init e deinit, subscript, getter e setter delle proprietà calcolate e observer willSet / didSet, così il codice che modifica lo stato è ricercabile come simbolo invece di restare sepolto nei corpi delle proprietà.

I membri dichiarati in struct, enum, protocolli ed extension sono qualificati dal tipo proprietario (ad esempio CartStore.add), e i membri aggiunti in un’extension sono attribuiti al tipo esteso. Dai nomi delle definizioni vengono rimossi parametri generici, liste di conformità ai protocolli e suffissi ? / !, così le ricerche usano il nome semplice. Le chiamate mantengono self. e la qualificazione di classe, e le trailing closure contano nell’arità della chiamata.

Il grafo registra chiamate, conformità ai protocolli, ereditarietà, override, istanziazione, attributi, riferimenti di tipo, letture e scritture, e archi throw.

Esempi di prompt per agenti

  • “Quali tipi sono conformi a PaymentProvider e dove viene creato ciascuno?” (dependency_search)
  • “Chi chiama CartStore.add e da quali view?” (find_symbol, poi dependency_search incoming)
  • “Spiega come una notifica push arriva alla schermata della posta in arrivo.” (get_task_context)

Limiti noti

  • Solo i sorgenti .swift sono associati. I file Storyboard e XIB non sono nell’elenco delle estensioni, quindi i collegamenti di Interface Builder restano fuori dal grafo.
  • Le chiamate della libreria standard e di Foundation come print, debugPrint, NSLog e le asserzioni vengono filtrate dalle relazioni, quindi non sono archi del grafo. Usa text_pattern_search per trovarle.

Prossimi passi

Collega un repository con la guida rapida, poi consulta la matrice di supporto nella pagina di compatibilità. Se distribuisci lo stesso prodotto anche su Android, leggi la guida a Kotlin.

Il più adatto per

  • > Team iOS e macOS con grandi target di app e package Swift condivisi.
  • > Basi di codice costruite attorno a protocolli ed extension, in cui il comportamento di un tipo è sparso su molti file.
  • > Workflow con agenti che richiedono un'analisi d'impatto prima di modificare un modello, un servizio o un protocollo condiviso.

Workflow degli agenti

  • > Trovare tutti i tipi conformi a un protocollo prima di cambiarne un requisito.
  • > Tracciare i chiamanti di un metodo di servizio tra ViewModel, coordinator e package.
  • > Individuare inizializzatori, proprietà calcolate e observer `didSet` che toccano uno stato.

Dettagli del motore

  • > I simboli invocabili includono funzioni, `init`, `deinit`, subscript, getter e setter delle proprietà calcolate e observer `willSet` / `didSet`.
  • > I membri di struct, enum, protocolli ed extension sono qualificati dal tipo proprietario, come `CartStore.add`.
  • > Parametri generici, liste di conformità ai protocolli e suffissi `?` / `!` vengono rimossi dai nomi delle definizioni, e le chiamate mantengono `self.` e la qualificazione di classe.

Punti di ingresso MCP utili

  • find_symbol

    Usalo con il nome di un tipo, protocollo o metodo quando ti servono definizione e riferimenti.

  • dependency_search

    Usalo su un protocollo per trovare i tipi conformi, o in incoming su un metodo per trovare i chiamanti.

  • get_task_context

    Usalo per prompt come "spiega come una notifica push arriva alla schermata della posta in arrivo".