Spring til indhold
cd /languages
  • Konventionsdrevet
  • Programmering
  • AST- og symbolunderstøttelse

Ruby i Maguyva: kodegrafer til Rails- og Ruby-apps

Maguyva understøtter Ruby med AST, symboler og graf, så AI-agenter kan følge klasser, moduler, singleton-metoder og konstruktørkald i Rails- og Ruby-kodebaser.

Hvorfor Ruby-repositories er svære for overfladiske AI-værktøjer

Ruby læner sig tungt op ad konventioner og metaprogrammering. Metoder genereres af attr_accessor, klasser genåbnes i andre filer, og navnerum indlejrer flere moduler. Den læsbare overflade skjuler, hvilken metode et kald faktisk rammer, og en grov tekstsøgning returnerer hvert call og perform i appen.

Maguyva giver agenten klasser, moduler, metoder og deres kaldere som struktur, så den kan følge en ændring gennem appen i stedet for at gætte.

Hvad Maguyva udtrækker i Ruby

Maguyva dækker .rb-, .rbw-, .rake- og .gemspec-filer samt Gemfile og Rakefile. Instansmetoder og singleton-metoder (def self.call) udtrækkes, og singleton-metoder markeres som statiske. Erklæringer med attr_reader, attr_writer og attr_accessor tæller som accessor-metoder, og symboler kvalificeres med deres modul- og klassenavnerum.

ClassName.new og Namespace::ClassName.new tæller som instansiering, og modtagertypningen følger lokale tildelinger og @instance_variables, så et kald på et tildelt objekt kan opløses til dets klasse. Grafen registrerer også nedarvning, modulinklusion, overskrivninger, raise- og rescue-kanter samt læsninger og skrivninger.

Metaprogrammeringskald (define_method, send, method_missing, class_eval og lignende), Sorbets T::-typehjælpere og almindelige enumerable-kald (each, collect, reject og lignende) filtreres fra relationerne, så applikationskoden træder frem.

Eksempler på prompts til agenter

  • “Hvem kalder Billing::ChargeCustomer.call, og fra hvilke jobs og controllers?” (find_symbol, derefter dependency_search incoming)
  • “Hvilke modeller arver fra ApplicationRecord og inkluderer Auditable?” (dependency_search)
  • “Spor, hvad der sker, efter at en ordre er markeret som betalt.” (get_task_context)

Kendte begrænsninger

  • require og load er almindelige metodekald i Ruby, så forudindstillingen imports i structural_search vælger intet. Brug text_pattern_search til at liste dem.
  • Metoder, der oprettes ved kørsel med define_method eller håndteres af method_missing, udtrækkes ikke som symboler, og de kald filtreres som metaprogrammeringsstøj.
  • Ruby har ingen dekoratorsyntaks, så dekoratorrelationer er markeret som ikke relevante.

Næste skridt

Tilslut et repository med hurtigstarten, og se derefter understøttelsesmatricen på kompatibilitetssiden. For andre repositories i dynamiske sprog, sammenlign med guiden til Python.

Bedst egnet til

  • > Rails-monolitter, hvor modeller, serviceobjekter, jobs og concerns kalder hinanden på tværs af mange mapper.
  • > Gems og Ruby-tjenester med dybe modul-navnerum og delte basisklasser.
  • > Teams, der vil afgrænse en ændring med en AI-agent, før de rører en model eller tjeneste, som halvdelen af appen afhænger af.

Agent-arbejdsgange

  • > Finde alle, der kalder et serviceobjekt eller en modelmetode, før adfærden ændres.
  • > Spore, hvor en klasse instansieres med `.new`, og hvilke metoder der kører bagefter.
  • > Kortlægge, hvilke klasser der arver fra en basisklasse eller inkluderer et modul, før en refaktorering.

Motordetaljer

  • > Ruby-understøttelsen dækker `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` og `Rakefile`. Singleton-metoder markeres som statiske, og `attr_*`-erklæringer tæller som accessor-metoder.
  • > `ClassName.new` tæller som instansiering, og modtagertypningen følger lokale tildelinger og instansvariabler.
  • > Metaprogrammeringskald som `define_method` og `send`, Sorbets `T::`-hjælpere og almindelige enumerable-kald filtreres fra relationerne.

Nyttige MCP-indgange

  • find_symbol

    Brug det til en klasse, et modul eller en metode med navnerum, som `Billing::ChargeCustomer.call`.

  • dependency_search

    Brug incoming-gennemløb på en model eller et serviceobjekt før en ændring for at se kaldere og subklasser.

  • text_pattern_search

    Brug det til `require`-stier, rutestrenge og dynamisk definerede metoder, som grafen ikke ser.