Přeskočit na obsah
cd /languages
  • Řízeno konvencemi
  • Programování
  • Podpora AST a symbolů

Ruby v Maguyva: grafy kódu pro Rails a aplikace v Ruby

Maguyva podporuje Ruby s AST, symboly a grafem, takže AI agenti sledují třídy, moduly, singletonové metody a konstruktory v kódových základnách Rails a Ruby.

Proč jsou repozitáře v Ruby pro povrchní AI nástroje obtížné

Ruby silně spoléhá na konvence a metaprogramování. Metody generuje attr_accessor, třídy se znovu otevírají v jiných souborech a jmenné prostory vnořují moduly do několika úrovní. Čitelný povrch skrývá, ke které metodě volání skutečně dojde, a hrubé textové vyhledávání vrátí každé call a perform v aplikaci.

Maguyva dá agentovi třídy, moduly, metody a jejich volající jako strukturu, aby mohl změnu sledovat celou aplikací a nemusel hádat.

Co Maguyva v Ruby extrahuje

Maguyva pokrývá soubory .rb, .rbw, .rake a .gemspec a také Gemfile a Rakefile. Extrahují se metody instancí a singletonové metody (def self.call), přičemž singletonové metody se označí jako statické. Deklarace attr_reader, attr_writer a attr_accessor se počítají jako přístupové metody a symboly se kvalifikují jmenným prostorem modulu a třídy.

ClassName.new a Namespace::ClassName.new se počítají jako vytvoření instance a typování příjemců sleduje lokální přiřazení a @instance_variables, takže volání na přiřazeném objektu lze vyřešit na jeho třídu. Graf zaznamenává také dědičnost, vkládání modulů, přepisy, hrany raise a rescue a čtení a zápisy.

Volání metaprogramování (define_method, send, method_missing, class_eval a podobné), typové pomocníky T:: ze Sorbetu a běžná volání Enumerable (each, collect, reject a podobné) se z vazeb odfiltrují, aby vynikl kód aplikace.

Ukázkové prompty pro agenty

  • „Kdo volá Billing::ChargeCustomer.call a ze kterých úloh a kontrolérů?“ (find_symbol, pak dependency_search incoming)
  • „Které modely dědí z ApplicationRecord a vkládají Auditable?“ (dependency_search)
  • „Sleduj, co se stane poté, co je objednávka označena jako zaplacená.“ (get_task_context)

Známá omezení

  • V Ruby jsou require a load běžná volání metod, takže preset imports v structural_search nic nevybere. K jejich výpisu použijte text_pattern_search.
  • Metody vytvořené za běhu přes define_method nebo obsluhované přes method_missing se neextrahují jako symboly a tato volání se odfiltrují jako šum metaprogramování.
  • Ruby nemá syntaxi dekorátorů, proto jsou vazby dekorátorů označeny jako nepoužitelné.

Další kroky

Připojte repozitář podle rychlého startu a pak si prohlédněte matici podpory na stránce kompatibility. U dalších repozitářů v dynamických jazycích porovnejte s průvodcem jazykem Python.

Nejlépe se hodí pro

  • > Monolity v Rails, kde se modely, servisní objekty, úlohy a concerns volají napříč mnoha adresáři.
  • > Gemy a služby v Ruby s hlubokými jmennými prostory modulů a sdílenými základními třídami.
  • > Týmy, které chtějí s AI agentem ohraničit změnu dřív, než sáhnou na model nebo službu, na které závisí půlka aplikace.

Workflow agentů

  • > Najít všechny volající servisního objektu nebo metody modelu, než se změní jejich chování.
  • > Dohledat, kde se třída vytváří přes `.new` a které metody se pak spouštějí.
  • > Před refaktoringem zmapovat, které třídy dědí ze základní třídy nebo vkládají modul.

Podrobnosti enginu

  • > Podpora Ruby pokrývá `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` a `Rakefile`. Singletonové metody se označují jako statické a deklarace `attr_*` se počítají jako přístupové metody.
  • > `ClassName.new` se počítá jako vytvoření instance a typování příjemců sleduje lokální přiřazení a proměnné instance.
  • > Volání metaprogramování jako `define_method` a `send`, pomocníci `T::` ze Sorbetu a běžná volání Enumerable se z vazeb odfiltrují.

Užitečné vstupní body MCP

  • find_symbol

    Použijte pro třídu, modul nebo metodu se jmenným prostorem, například `Billing::ChargeCustomer.call`.

  • dependency_search

    Před změnou použijte procházení incoming na modelu nebo servisním objektu a uvidíte volající i podtřídy.

  • text_pattern_search

    Použijte pro cesty `require`, řetězce rout a dynamicky definované metody, které graf nevidí.