Vai al contenuto
cd /languages
  • Guidato dalle convenzioni
  • Programmazione
  • Supporto AST e simboli

Ruby in Maguyva: grafi del codice per Rails e app Ruby

Maguyva supporta Ruby con AST, simboli e grafo, così gli agenti IA seguono classi, moduli, metodi singleton e costruttori nelle basi di codice Rails e Ruby.

Perché i repository Ruby mettono in difficoltà gli strumenti di IA superficiali

Ruby si appoggia molto su convenzioni e metaprogrammazione. I metodi vengono generati da attr_accessor, le classi vengono riaperte in altri file e i namespace annidano moduli su più livelli. La superficie leggibile nasconde quale metodo raggiunge davvero una chiamata, e una ricerca testuale grezza restituisce ogni call e ogni perform dell’app.

Maguyva fornisce all’agente classi, moduli, metodi e i loro chiamanti come struttura, così può seguire una modifica attraverso l’app invece di tirare a indovinare.

Cosa estrae Maguyva in Ruby

Maguyva copre i file .rb, .rbw, .rake e .gemspec, oltre a Gemfile e Rakefile. Vengono estratti metodi di istanza e metodi singleton (def self.call), con i metodi singleton contrassegnati come statici. Le dichiarazioni attr_reader, attr_writer e attr_accessor contano come metodi di accesso, e i simboli sono qualificati dal namespace di modulo e classe.

ClassName.new e Namespace::ClassName.new contano come istanziazione, e la tipizzazione dei receiver segue le assegnazioni locali e le @instance_variables, così una chiamata su un oggetto assegnato può essere risolta nella sua classe. Il grafo registra anche ereditarietà, inclusione di moduli, override, archi raise e rescue, e letture e scritture.

Le chiamate di metaprogrammazione (define_method, send, method_missing, class_eval e simili), gli helper di tipo T:: di Sorbet e le chiamate enumerabili comuni (each, collect, reject e simili) vengono filtrati dalle relazioni, così il codice applicativo risalta.

Esempi di prompt per agenti

  • “Chi chiama Billing::ChargeCustomer.call e da quali job e controller?” (find_symbol, poi dependency_search incoming)
  • “Quali model ereditano da ApplicationRecord e includono Auditable?” (dependency_search)
  • “Traccia cosa succede dopo che un ordine viene segnato come pagato.” (get_task_context)

Limiti noti

  • In Ruby require e load sono normali chiamate di metodo, quindi il preset imports di structural_search non seleziona nulla. Usa text_pattern_search per elencarle.
  • I metodi creati a runtime con define_method o gestiti da method_missing non vengono estratti come simboli, e quelle chiamate vengono filtrate come rumore di metaprogrammazione.
  • Ruby non ha una sintassi per i decoratori, quindi le relazioni di decoratore sono contrassegnate come non applicabili.

Prossimi passi

Collega un repository con la guida rapida, poi consulta la matrice di supporto nella pagina di compatibilità. Per altri repository in linguaggi dinamici, confrontalo con la guida a Python.

Il più adatto per

  • > Monoliti Rails in cui model, service object, job e concern si chiamano attraverso molte directory.
  • > Gem e servizi Ruby con namespace di moduli profondi e classi base condivise.
  • > Team che vogliono delimitare una modifica con un agente IA prima di toccare un model o un servizio da cui dipende mezza app.

Workflow degli agenti

  • > Trovare tutti i chiamanti di un service object o di un metodo di model prima di cambiarne il comportamento.
  • > Tracciare dove una classe viene istanziata con `.new` e quali metodi vengono eseguiti dopo.
  • > Mappare quali classi ereditano da una classe base o includono un modulo prima di un refactoring.

Dettagli del motore

  • > Il supporto a Ruby copre `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` e `Rakefile`. I metodi singleton sono contrassegnati come statici e le dichiarazioni `attr_*` contano come metodi di accesso.
  • > `ClassName.new` conta come istanziazione, e la tipizzazione dei receiver segue le assegnazioni locali e le variabili di istanza.
  • > Le chiamate di metaprogrammazione come `define_method` e `send`, gli helper `T::` di Sorbet e le chiamate enumerabili comuni vengono filtrati dalle relazioni.

Punti di ingresso MCP utili

  • find_symbol

    Usalo con una classe, un modulo o un metodo con namespace, come `Billing::ChargeCustomer.call`.

  • dependency_search

    Usa la navigazione incoming su un model o un service object per vedere chiamanti e sottoclassi prima di una modifica.

  • text_pattern_search

    Usalo per i percorsi di `require`, le stringhe delle route e i metodi definiti dinamicamente che il grafo non vede.