Siirry sisältöön
cd /languages
  • Applen alustat
  • Ohjelmointi
  • AST- ja symbolituki

Swift-tuki Maguyva-palvelussa: koodigraafit iOS:lle ja macOS-alustalle

Maguyva tukee Swiftiä AST-jäsennyksellä, symboleilla ja graafilla, jotta tekoälyagentit voivat seurata iOS- ja macOS-koodin protokollia, laajennuksia, alustajia ja tarkkailijoita.

Miksi Swift tarvitsee muutakin kuin tiedostohakua

Swift levittää yhden tyypin moneen paikkaan. Rakenne esitellään yhdessä tiedostossa, se saa toimintaa laajennuksista kolmessa muussa ja täyttää paketissa määriteltyjä protokollia. Tilamuutokset piiloutuvat laskettuihin ominaisuuksiin ja willSet / didSet-tarkkailijoihin. Tiedoston kerrallaan lukeva agentti ohittaa suurimman osan tästä.

Maguyva indeksoi rakenteen, jotta agentti näkee tyypin jäsenet, protokollien täyttämiset ja kutsujat yhdessä.

Mitä Maguyva poimii Swiftistä

Maguyva kattaa tiedostot .swift. Kutsuttaviin symboleihin kuuluvat funktiot, init ja deinit, alaindeksit, laskettujen ominaisuuksien getterit ja setterit sekä willSet / didSet-tarkkailijat, joten tilaa muuttavaa koodia voi hakea symboleina sen sijaan, että se hautautuisi ominaisuuksien runkoihin.

Rakenteissa, luettelotyypeissä, protokollissa ja laajennuksissa esitellyt jäsenet tarkennetaan omistavalla tyypillä (esimerkiksi CartStore.add), ja laajennuksessa lisätyt jäsenet kohdistetaan laajennettavaan tyyppiin. Määrittelyjen nimistä poistetaan geneeriset parametrit, protokollaluettelot ja jälkiliitteet ? / !, joten haut käyttävät pelkkää nimeä. Kutsut säilyttävät self.-etuliitteen ja luokkatarkennuksen, ja jälkisulkeumat lasketaan mukaan kutsun ariteettiin.

Graafi tallentaa kutsut, protokollien täyttämisen, periytymisen, ylikirjoitukset, ilmentymien luonnin, attribuutit, tyyppiviittaukset, luvut ja kirjoitukset sekä throw-kaaret.

Esimerkkikehotteita agenteille

  • “Mitkä tyypit täyttävät protokollan PaymentProvider, ja missä kukin niistä luodaan?” (dependency_search)
  • “Kuka kutsuu metodia CartStore.add, ja mistä näkymistä?” (find_symbol, sitten dependency_search incoming)
  • “Selitä, miten push-ilmoitus päätyy saapuneiden viestien näkymään.” (get_task_context)

Tunnetut rajoitukset

  • Vain .swift-lähdekoodi on liitetty. Storyboard- ja XIB-tiedostot eivät ole tiedostopäätteiden luettelossa, joten Interface Builderin kytkennät jäävät graafin ulkopuolelle.
  • Standardikirjaston ja Foundationin kutsut, kuten print, debugPrint, NSLog ja assertiot, suodatetaan pois suhteista, joten ne eivät ole graafin kaaria. Käytä niihin työkalua text_pattern_search.

Seuraavat vaiheet

Yhdistä repositorio pikaoppaan avulla ja tarkista sitten tukimatriisi yhteensopivuussivulta. Jos julkaiset saman tuotteen myös Androidille, lue Kotlin-opas.

Parhaiten sopii

  • > iOS- ja macOS-tiimit, joilla on suuria sovelluskohteita ja jaettuja Swift-paketteja.
  • > Protokollien ja laajennusten ympärille rakennetut koodikannat, joissa yhden tyypin toiminta on hajallaan monessa tiedostossa.
  • > Agenttityönkulut, jotka tarvitsevat vaikutusanalyysin ennen jaetun mallin, palvelun tai protokollan muuttamista.

Agenttien työnkulut

  • > Löytää kaikki protokollan täyttävät tyypit ennen kuin jotakin sen vaatimusta muutetaan.
  • > Jäljittää palvelumetodin kutsujat ViewModelien, koordinaattorien ja pakettien läpi.
  • > Paikantaa alustajat, lasketut ominaisuudet ja `didSet`-tarkkailijat, jotka koskevat tiettyä tilaa.

Moottorin yksityiskohdat

  • > Kutsuttaviin symboleihin kuuluvat funktiot, `init`, `deinit`, alaindeksit, laskettujen ominaisuuksien getterit ja setterit sekä `willSet` / `didSet`-tarkkailijat.
  • > Rakenteiden, luettelotyyppien, protokollien ja laajennusten jäsenet tarkennetaan omistavalla tyypillä, esimerkiksi `CartStore.add`.
  • > Määrittelyjen nimistä poistetaan geneeriset parametrit, protokollaluettelot ja jälkiliitteet `?` / `!`, ja kutsut säilyttävät `self.`-etuliitteen ja luokkatarkennuksen.

Hyödylliset MCP-liittymäkohdat

  • find_symbol

    Käytä sitä tyypin, protokollan tai metodin nimellä, kun tarvitset määrittelyn ja viittaukset.

  • dependency_search

    Käytä sitä protokollaan löytääksesi sen täyttävät tyypit tai incoming-suuntaan metodiin löytääksesi kutsujat.

  • get_task_context

    Käytä sitä kehotteisiin kuten "selitä, miten push-ilmoitus päätyy saapuneiden viestien näkymään".