Naar inhoud springen
cd /languages
  • Conventiegedreven
  • Programmeren
  • AST- en symboolondersteuning

Ruby in Maguyva: codegrafen voor Rails- en Ruby-apps

Maguyva ondersteunt Ruby met AST, symbolen en graaf, zodat AI-agents klassen, modules, singletonmethoden en constructoraanroepen volgen in Rails en Ruby.

Waarom Ruby-repositories lastig zijn voor oppervlakkige AI-tools

Ruby leunt zwaar op conventies en metaprogrammering. Methoden worden gegenereerd door attr_accessor, klassen worden in andere bestanden heropend en namespaces nesten meerdere modules diep. Het leesbare oppervlak verbergt welke methode een aanroep echt bereikt, en botte tekstzoekopdrachten leveren elke call en perform in de app op.

Maguyva geeft een agent klassen, modules, methoden en hun aanroepers als structuur, zodat hij een wijziging door de app kan volgen in plaats van te gokken.

Wat Maguyva in Ruby extraheert

Maguyva dekt .rb-, .rbw-, .rake- en .gemspec-bestanden, plus Gemfile en Rakefile. Instance-methoden en singletonmethoden (def self.call) worden geëxtraheerd, waarbij singletonmethoden als statisch worden gemarkeerd. Declaraties met attr_reader, attr_writer en attr_accessor tellen als accessormethoden, en symbolen worden gekwalificeerd met hun module- en klasse-namespace.

ClassName.new en Namespace::ClassName.new tellen als instantiëring, en receivertypering volgt lokale toewijzingen en @instance_variables, zodat een aanroep op een toegewezen object naar zijn klasse kan worden opgelost. De graaf legt ook overerving vast, module-inclusie, overrides, raise- en rescue-randen, en lees- en schrijfacties.

Metaprogrammeringsaanroepen (define_method, send, method_missing, class_eval en vergelijkbare), de T::-typehelpers van Sorbet en gangbare enumerable-aanroepen (each, collect, reject en vergelijkbare) worden uit de relaties gefilterd, zodat de applicatiecode opvalt.

Voorbeeldprompts voor agents

  • “Wie roept Billing::ChargeCustomer.call aan, en vanuit welke jobs en controllers?” (find_symbol, daarna dependency_search incoming)
  • “Welke models erven van ApplicationRecord en includen Auditable?” (dependency_search)
  • “Volg wat er gebeurt nadat een bestelling als betaald is gemarkeerd.” (get_task_context)

Bekende beperkingen

  • require en load zijn in Ruby gewone methodeaanroepen, dus de preset imports in structural_search selecteert niets. Gebruik text_pattern_search om ze op te sommen.
  • Methoden die tijdens runtime met define_method worden aangemaakt of door method_missing worden afgehandeld, worden niet als symbolen geëxtraheerd, en die aanroepen worden als metaprogrammeringsruis gefilterd.
  • Ruby kent geen decoratorsyntaxis, dus decoratorrelaties zijn gemarkeerd als niet van toepassing.

Volgende stappen

Koppel een repository via de snelstart en bekijk daarna de ondersteuningsmatrix op de compatibiliteitspagina. Vergelijk voor andere repositories in dynamische talen met de Python-gids.

Beste toepassing

  • > Rails-monolieten waarin models, service objects, jobs en concerns elkaar over veel mappen heen aanroepen.
  • > Gems en Ruby-services met diepe module-namespaces en gedeelde basisklassen.
  • > Teams die een wijziging met een AI-agent willen afbakenen voordat ze een model of service aanraken waar de halve app van afhangt.

Agentworkflows

  • > Elke aanroeper van een service object of modelmethode vinden voordat het gedrag verandert.
  • > Nagaan waar een klasse met `.new` wordt geïnstantieerd en welke methoden daarna draaien.
  • > Vóór een refactoring in kaart brengen welke klassen van een basisklasse erven of een module includen.

Enginedetails

  • > Ruby-ondersteuning dekt `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` en `Rakefile`. Singletonmethoden worden als statisch gemarkeerd, en `attr_*`-declaraties tellen als accessormethoden.
  • > `ClassName.new` telt als instantiëring, en receivertypering volgt lokale toewijzingen en instance-variabelen.
  • > Metaprogrammeringsaanroepen zoals `define_method` en `send`, de `T::`-helpers van Sorbet en gangbare enumerable-aanroepen worden uit de relaties gefilterd.

Nuttige MCP-instappunten

  • find_symbol

    Gebruik het voor een klasse, module of methode met namespace, zoals `Billing::ChargeCustomer.call`.

  • dependency_search

    Gebruik vóór een wijziging incoming-traversal op een model of service object om aanroepers en subklassen te zien.

  • text_pattern_search

    Gebruik het voor `require`-paden, routestrings en dynamisch gedefinieerde methoden die de graaf niet ziet.