Hopp til innhold
cd /languages
  • Konvensjonsdrevet
  • Programmering
  • AST- og symbolstøtte

Ruby i Maguyva: kodegrafer for Rails- og Ruby-apper

Maguyva støtter Ruby med AST, symboler og graf, slik at AI-agenter kan følge klasser, moduler, singleton-metoder og konstruktørkall i Rails- og Ruby-kodebaser.

Hvorfor Ruby-repositorier er vanskelige for overfladiske AI-verktøy

Ruby lener seg tungt på konvensjoner og metaprogrammering. Metoder genereres av attr_accessor, klasser åpnes på nytt i andre filer, og navnerom nøster flere moduler i dybden. Den lesbare overflaten skjuler hvilken metode et kall faktisk treffer, og et grovt tekstsøk returnerer hver call og perform i appen.

Maguyva gir agenten klasser, moduler, metoder og kallerne deres som struktur, slik at den kan følge en endring gjennom appen i stedet for å gjette.

Hva Maguyva henter ut i Ruby

Maguyva dekker .rb-, .rbw-, .rake- og .gemspec-filer samt Gemfile og Rakefile. Instansmetoder og singleton-metoder (def self.call) hentes ut, og singleton-metoder merkes som statiske. Deklarasjoner med attr_reader, attr_writer og attr_accessor teller som accessor-metoder, og symboler kvalifiseres med modul- og klassenavnerommet sitt.

ClassName.new og Namespace::ClassName.new teller som instansiering, og mottakertypingen følger lokale tilordninger og @instance_variables, så et kall på et tilordnet objekt kan løses til klassen. Grafen registrerer også arv, modulinkludering, overstyringer, raise- og rescue-kanter samt lesinger og skrivinger.

Metaprogrammeringskall (define_method, send, method_missing, class_eval og lignende), Sorbets T::-typehjelpere og vanlige enumerable-kall (each, collect, reject og lignende) filtreres ut av relasjonene, slik at applikasjonskoden kommer tydelig frem.

Eksempler på prompter for agenter

  • «Hvem kaller Billing::ChargeCustomer.call, og fra hvilke jobber og kontrollere?» (find_symbol, deretter dependency_search incoming)
  • «Hvilke modeller arver fra ApplicationRecord og inkluderer Auditable?» (dependency_search)
  • «Spor hva som skjer etter at en ordre er merket som betalt.» (get_task_context)

Kjente begrensninger

  • require og load er vanlige metodekall i Ruby, så forhåndsinnstillingen imports i structural_search velger ingenting. Bruk text_pattern_search for å liste dem.
  • Metoder som opprettes under kjøring med define_method eller håndteres av method_missing, hentes ikke ut som symboler, og disse kallene filtreres som metaprogrammeringsstøy.
  • Ruby har ingen dekoratorsyntaks, så dekoratorrelasjoner er merket som ikke aktuelle.

Neste steg

Koble til et repositorium med hurtigstarten, og se deretter støttematrisen på kompatibilitetssiden. For andre repositorier i dynamiske språk kan du sammenligne med veiledningen for Python.

Best egnet

  • > Rails-monolitter der modeller, tjenesteobjekter, jobber og concerns kaller hverandre på tvers av mange kataloger.
  • > Gems og Ruby-tjenester med dype modulnavnerom og delte basisklasser.
  • > Team som vil avgrense en endring med en AI-agent før de rører en modell eller tjeneste som halve appen er avhengig av.

Agent-arbeidsflyter

  • > Finne alle som kaller et tjenesteobjekt eller en modellmetode før atferden endres.
  • > Spore hvor en klasse instansieres med `.new`, og hvilke metoder som kjører etterpå.
  • > Kartlegge hvilke klasser som arver fra en basisklasse eller inkluderer en modul før en refaktorering.

Motordetaljer

  • > Ruby-støtten dekker `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` og `Rakefile`. Singleton-metoder merkes som statiske, og `attr_*`-deklarasjoner teller som accessor-metoder.
  • > `ClassName.new` teller som instansiering, og mottakertypingen følger lokale tilordninger og instansvariabler.
  • > Metaprogrammeringskall som `define_method` og `send`, Sorbets `T::`-hjelpere og vanlige enumerable-kall filtreres ut av relasjonene.

Nyttige MCP-inngangspunkter

  • find_symbol

    Bruk det for en klasse, en modul eller en metode med navnerom, som `Billing::ChargeCustomer.call`.

  • dependency_search

    Bruk incoming-traversering på en modell eller et tjenesteobjekt før en endring for å se kallere og subklasser.

  • text_pattern_search

    Bruk det for `require`-stier, rutestrenger og dynamisk definerte metoder som grafen ikke ser.