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.
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.