Hoppa till innehåll
cd /languages
  • Konventionsdrivet
  • Programmering
  • Stöd för AST och symboler

Ruby i Maguyva: kodgrafer för Rails- och Ruby-appar

Maguyva stöder Ruby med AST, symboler och graf, så att AI-agenter kan följa klasser, moduler, singletonmetoder och konstruktoranrop i Rails- och Ruby-kodbaser.

Varför Ruby-repon är svåra för ytliga AI-verktyg

Ruby lutar sig tungt mot konventioner och metaprogrammering. Metoder genereras av attr_accessor, klasser öppnas igen i andra filer och namnrymder nästlar flera moduler djupt. Den läsbara ytan döljer vilken metod ett anrop faktiskt når, och en trubbig textsökning returnerar varje call och perform i appen.

Maguyva ger agenten klasser, moduler, metoder och deras anropare som struktur, så att den kan följa en ändring genom appen i stället för att gissa.

Vad Maguyva extraherar i Ruby

Maguyva täcker .rb-, .rbw-, .rake- och .gemspec-filer samt Gemfile och Rakefile. Instansmetoder och singletonmetoder (def self.call) extraheras, och singletonmetoder markeras som statiska. Deklarationer med attr_reader, attr_writer och attr_accessor räknas som accessormetoder, och symboler kvalificeras med sin modul- och klassnamnrymd.

ClassName.new och Namespace::ClassName.new räknas som instansiering, och mottagartypningen följer lokala tilldelningar och @instance_variables, så ett anrop på ett tilldelat objekt kan lösas till sin klass. Grafen registrerar också arv, modulinkludering, överskrivningar, raise- och rescue-kanter samt läsningar och skrivningar.

Metaprogrammeringsanrop (define_method, send, method_missing, class_eval och liknande), Sorbets T::-typhjälpare och vanliga enumerable-anrop (each, collect, reject och liknande) filtreras bort ur relationerna så att applikationskoden syns.

Exempel på prompter för agenter

  • “Vem anropar Billing::ChargeCustomer.call, och från vilka jobb och controllers?” (find_symbol, sedan dependency_search incoming)
  • “Vilka modeller ärver från ApplicationRecord och inkluderar Auditable?” (dependency_search)
  • “Spåra vad som händer efter att en order markerats som betald.” (get_task_context)

Kända begränsningar

  • require och load är vanliga metodanrop i Ruby, så förinställningen imports i structural_search väljer ingenting. Använd text_pattern_search för att lista dem.
  • Metoder som skapas vid körning med define_method eller hanteras av method_missing extraheras inte som symboler, och de anropen filtreras som metaprogrammeringsbrus.
  • Ruby saknar dekoratorsyntax, så dekoratorrelationer är markerade som ej tillämpliga.

Nästa steg

Anslut ett repo med snabbstarten och kontrollera sedan stödmatrisen på kompatibilitetssidan. För andra repon i dynamiska språk, jämför med guiden för Python.

Bäst lämpad för

  • > Rails-monoliter där modeller, serviceobjekt, jobb och concerns anropar varandra över många kataloger.
  • > Gems och Ruby-tjänster med djupa modulnamnrymder och delade basklasser.
  • > Team som vill avgränsa en ändring med en AI-agent innan de rör en modell eller tjänst som halva appen beror på.

Agentarbetsflöden

  • > Hitta alla som anropar ett serviceobjekt eller en modellmetod innan beteendet ändras.
  • > Spåra var en klass instansieras med `.new` och vilka metoder som körs därefter.
  • > Kartlägga vilka klasser som ärver från en basklass eller inkluderar en modul före en refaktorering.

Motordetaljer

  • > Ruby-stödet täcker `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` och `Rakefile`. Singletonmetoder markeras som statiska, och `attr_*`-deklarationer räknas som accessormetoder.
  • > `ClassName.new` räknas som instansiering, och mottagartypningen följer lokala tilldelningar och instansvariabler.
  • > Metaprogrammeringsanrop som `define_method` och `send`, Sorbets `T::`-hjälpare och vanliga enumerable-anrop filtreras bort ur relationerna.

Användbara MCP-ingångar

  • find_symbol

    Använd det för en klass, modul eller metod med namnrymd, som `Billing::ChargeCustomer.call`.

  • dependency_search

    Använd incoming-traversering på en modell eller ett serviceobjekt före en ändring för att se anropare och subklasser.

  • text_pattern_search

    Använd det för `require`-sökvägar, routesträngar och dynamiskt definierade metoder som grafen inte ser.