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

Ruby-tuki Maguyva-palvelussa: koodigraafit Rails- ja Ruby-sovelluksille

Maguyva tukee Rubya AST-jäsennyksellä, symboleilla ja graafilla, jotta tekoälyagentit voivat seurata luokkia, moduuleja, singleton-metodeja ja konstruktorikutsuja Rails- ja Ruby-koodikannoissa.

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.

Parhaiten sopii

  • > Rails-monoliitit, joissa mallit, palveluoliot, taustatyöt ja concernit kutsuvat toisiaan monen hakemiston yli.
  • > Gemit ja Ruby-palvelut, joissa on syviä moduulinimiavaruuksia ja jaettuja kantaluokkia.
  • > Tiimit, jotka haluavat rajata muutoksen tekoälyagentin avulla ennen kuin koskevat malliin tai palveluun, josta puolet sovelluksesta riippuu.

Agenttien työnkulut

  • > Löytää kaikki palveluolion tai mallin metodin kutsujat ennen kuin niiden toimintaa muutetaan.
  • > Jäljittää, missä luokasta luodaan ilmentymä `.new`-kutsulla ja mitkä metodit suoritetaan seuraavaksi.
  • > Kartoittaa ennen refaktorointia, mitkä luokat perivät kantaluokan tai sisällyttävät moduulin.

Moottorin yksityiskohdat

  • > Ruby-tuki kattaa tiedostot `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` ja `Rakefile`. Singleton-metodit merkitään staattisiksi, ja `attr_*`-esittelyt lasketaan saantimetodeiksi.
  • > `ClassName.new` lasketaan ilmentymän luonniksi, ja vastaanottajan tyypitys seuraa paikallisia sijoituksia ja ilmentymämuuttujia.
  • > Metaohjelmoinnin kutsut kuten `define_method` ja `send`, Sorbetin `T::`-apurit ja yleiset Enumerable-kutsut suodatetaan pois suhteista.

Hyödylliset MCP-liittymäkohdat

  • find_symbol

    Käytä sitä nimiavaruuden sisältävälle luokalle, moduulille tai metodille, kuten `Billing::ChargeCustomer.call`.

  • dependency_search

    Käytä ennen muutosta incoming-läpikäyntiä malliin tai palveluolioon nähdäksesi kutsujat ja aliluokat.

  • text_pattern_search

    Käytä sitä `require`-polkuihin, reittimerkkijonoihin ja dynaamisesti määriteltyihin metodeihin, joita graafi ei näe.