Miksi Ruby-repositoriot ovat vaikeita pinnallisille tekoälytyökaluille
Ruby nojaa vahvasti konventioihin ja metaohjelmointiin. Metodeja syntyy attr_accessor-esittelyistä, luokat avataan uudelleen muissa tiedostoissa, ja nimiavaruudet sisäkkäistävät moduuleja monta tasoa. Luettava pinta kätkee, mihin metodiin kutsu todella päätyy, ja karkea tekstihaku palauttaa sovelluksen jokaisen call- ja perform-kutsun.
Maguyva antaa agentille luokat, moduulit, metodit ja niiden kutsujat rakenteena, jotta se voi seurata muutosta sovelluksen läpi arvailematta.
Mitä Maguyva poimii Rubysta
Maguyva kattaa tiedostot .rb, .rbw, .rake ja .gemspec sekä tiedostot Gemfile ja Rakefile. Ilmentymämetodit ja singleton-metodit (def self.call) poimitaan, ja singleton-metodit merkitään staattisiksi. Esittelyt attr_reader, attr_writer ja attr_accessor lasketaan saantimetodeiksi, ja symbolit tarkennetaan moduulin ja luokan nimiavaruudella.
ClassName.new ja Namespace::ClassName.new lasketaan ilmentymän luonniksi, ja vastaanottajan tyypitys seuraa paikallisia sijoituksia ja muuttujia @instance_variables, joten sijoitettuun olioon kohdistuvan kutsun voi ratkaista sen luokkaan. Graafi tallentaa myös periytymisen, moduulien sisällyttämisen, ylikirjoitukset, raise- ja rescue-kaaret sekä luvut ja kirjoitukset.
Metaohjelmoinnin kutsut (define_method, send, method_missing, class_eval ja vastaavat), Sorbetin T::-tyyppiapurit ja yleiset Enumerable-kutsut (each, collect, reject ja vastaavat) suodatetaan pois suhteista, jotta sovelluskoodi erottuu.
Esimerkkikehotteita agenteille
- “Kuka kutsuu metodia
Billing::ChargeCustomer.call, ja mistä taustatöistä ja kontrollereista?” (find_symbol, sitten dependency_search incoming)
- “Mitkä mallit perivät luokan
ApplicationRecord ja sisällyttävät moduulin Auditable?” (dependency_search)
- “Jäljitä, mitä tapahtuu, kun tilaus on merkitty maksetuksi.” (
get_task_context)
Tunnetut rajoitukset
- Rubyssa
require ja load ovat tavallisia metodikutsuja, joten työkalun structural_search esiasetus imports ei valitse mitään. Käytä niiden listaamiseen työkalua text_pattern_search.
- Ajon aikana
define_method-kutsulla luotuja tai method_missing-metodin käsittelemiä metodeja ei poimita symboleina, ja nämä kutsut suodatetaan metaohjelmoinnin kohinana.
- Rubyssa ei ole dekoraattorisyntaksia, joten dekoraattorisuhteet on merkitty soveltumattomiksi.
Seuraavat vaiheet
Yhdistä repositorio pikaoppaan avulla ja tarkista sitten tukimatriisi yhteensopivuussivulta. Muiden dynaamisten kielten repositorioiden osalta vertaa Python-oppaaseen.