Siirry sisältöön
cd /languages
  • Pitkäikäinen työpöytä
  • Ohjelmointi
  • AST- ja symbolituki

Pascal- ja Delphi-tuki Maguyva-palvelussa: yksikkö- ja luokkagraafit

Maguyva tukee Pascal- ja Delphi-yksiköitä AST-jäsennyksellä, symboleilla ja graafilla, jotta tekoälyagentit voivat kartoittaa uses-lausekkeet, luokat ja proseduurit ennen muutoksia.

Miksi Pascal-koodikanta tarvitsee ensin kartan

Delphi- ja Free Pascal -sovellukset kasvavat usein muutaman suuren yksikön ympärille, joita kaikki muu käyttää. Lomakkeet perivät kantalomakkeita, komponentit kantakomponentteja, ja liiketoimintasäännöt ovat proseduureissa, joita tusina näkymää kutsuu. Koodi on helppolukuista tiedosto kerrallaan, mutta muutokset menevät pieleen juuri riippuvuuksissa.

Maguyva antaa agentille ensin yksikkö- ja luokkarakenteen, jotta se voi kertoa, mihin muutos vaikuttaa, ennen kuin se kirjoittaa mitään.

Mitä Maguyva poimii Pascalista

Maguyva kattaa lähdeyksiköt .pas ja .pp. Proseduurien ja funktioiden määrittelyt poimitaan kutsuttavina symboleina, ja määrittelyjen nimistä poistetaan avainsanat procedure, function, var ja const. Luokat ja rajapinnat voi valita tyyppimäärittelyinä rakenteellisessa haussa.

Tuonnit muodostetaan uses-lausekkeista; avainsana poistetaan, jolloin graafiin tallentuvat yksiköiden nimet. Kutsut normalisoidaan poistamalla jäsenetuliitteet, argumentit ja ympäröivät sulkeet, joten kutsu Self.Save(x) tallentuu muotoon Save.

Graafi tallentaa kutsut, periytymisen, rajapintojen toteutukset, ylikirjoitukset, ilmentymien luonnin, tyyppiviittaukset, luvut ja kirjoitukset sekä poikkeusten nostamisen ja käsittelyn kaaret. Noin 107 ajonaikaisen kirjaston rutiinia (WriteLn, ReadLn, Inc, Dec, Ord ja vastaavat) suodatetaan pois suhteista.

Esimerkkikehotteita agenteille

  • “Mitkä yksiköt käyttävät yksikköä DataModuleMain, ja mitä ne kutsuvat siitä?” (dependency_search incoming)
  • “Mitkä lomakkeet perivät lomakkeen TBaseEditForm, ja mitä metodeja ne ylikirjoittavat?” (find_symbol, sitten dependency_search)
  • “Selitä, miten lasku kirjataan painikkeen käsittelijästä tietokantayksikköön asti.” (get_task_context)

Tunnetut rajoitukset

  • Pascaliin on liitetty vain .pas ja .pp. Delphin projekti- ja lomaketiedostot, kuten .dpr ja .dfm, eivät ole tiedostopäätteiden luettelossa, joten lomakkeiden asettelut ja projektin kytkennät jäävät graafin ulkopuolelle.
  • Metodit käyttävät samaa syntaksia kuin vapaat proseduurit, joten työkalun structural_search esiasetus methods ei valitse mitään. Käytä esiasetusta functions.
  • Suodatettujen ajonaikaisen kirjaston rutiinien kutsut eivät näy graafin kaarina. Käytä niihin työkalua text_pattern_search.

Seuraavat vaiheet

Yhdistä repositorio pikaoppaan avulla ja tarkista sitten tukimatriisi yhteensopivuussivulta. Jos sovellus linkittää C-kirjastoja, lue myös C-opas.

Parhaiten sopii

  • > Tiimit, jotka ylläpitävät Delphi- tai Lazarus/Free Pascal -sovelluksia, joiden alkuperäiset tekijät ovat jo kauan sitten siirtyneet muualle.
  • > Object Pascal -koodikannat, joissa on syviä luokkahierarkioita, rajapintoja ja suuria jaettuja yksiköitä.
  • > Modernisointi- tai siirtotyö, jonka ensimmäinen tuotos on kartta yksiköistä ja niiden riippuvuuksista.

Agenttien työnkulut

  • > Listata kaikki yksiköt, jotka mainitsevat jaetun yksikön `uses`-lausekkeessaan, ennen kuin sitä muutetaan.
  • > Löytää luokat, jotka perivät kantalomakkeen tai kantakomponentin, ja metodit, jotka ne ylikirjoittavat.
  • > Jäljittää, mitkä proseduurit kutsuvat rutiinia, ennen kuin sen parametreja muutetaan.

Moottorin yksityiskohdat

  • > Pascal-tuki kattaa yksiköt `.pas` ja `.pp`. Delphin projekti- ja lomaketiedostot, kuten `.dpr` ja `.dfm`, eivät ole tiedostopäätteiden luettelossa.
  • > `uses`-lausekkeista tulee tuontisuhteita, ja kutsut normalisoidaan poistamalla jäsenetuliitteet, argumentit ja ympäröivät sulkeet.
  • > Noin 107 ajonaikaisen kirjaston rutiinia, kuten `WriteLn`, `Inc` ja `Ord`, suodatetaan pois suhteista, jotta sovelluskoodi erottuu.

Hyödylliset MCP-liittymäkohdat

  • find_symbol

    Käytä sitä luokan, lomakkeen tai proseduurin nimellä, kun tarvitset määrittelyn ja viittaukset.

  • dependency_search

    Käytä incoming-läpikäyntiä jaettuun yksikköön tai kantaluokkaan nähdäksesi, mitkä yksiköt ja jälkeläiset riippuvat siitä.

  • get_task_context

    Käytä sitä kehotteisiin kuten "selitä, miten lasku kirjataan painikkeen käsittelijästä tietokantayksikköön asti".