Por qué los repositorios Ruby complican a las herramientas de IA superficiales
Ruby se apoya en convenciones y metaprogramación. Los métodos se generan con attr_accessor, las clases se reabren en otros archivos y los espacios de nombres anidan varios módulos. La superficie legible oculta a qué método llega realmente una llamada, y una búsqueda de texto tosca devuelve cada call y cada perform de la aplicación.
Maguyva entrega al agente clases, módulos, métodos y sus llamadores como estructura, para que siga un cambio por toda la aplicación en lugar de adivinar.
Maguyva cubre archivos .rb, .rbw, .rake y .gemspec, además de Gemfile y Rakefile. Se extraen métodos de instancia y métodos singleton (def self.call), y los métodos singleton se marcan como estáticos. Las declaraciones attr_reader, attr_writer y attr_accessor cuentan como métodos de acceso, y los símbolos se califican con su espacio de nombres de módulo y clase.
ClassName.new y Namespace::ClassName.new cuentan como instanciación, y la tipificación de receptores sigue las asignaciones locales y las @instance_variables, de modo que una llamada sobre un objeto asignado puede resolverse a su clase. El grafo también registra herencia, inclusión de módulos, sobrescrituras, aristas de raise y rescue, y lecturas y escrituras.
Las llamadas de metaprogramación (define_method, send, method_missing, class_eval y similares), los helpers de tipos T:: de Sorbet y las llamadas enumerables comunes (each, collect, reject y similares) se filtran de las relaciones para que destaque el código de la aplicación.
Ejemplos de prompts para agentes
- “¿Quién llama a
Billing::ChargeCustomer.call y desde qué jobs y controladores?” (find_symbol y luego dependency_search incoming)
- “¿Qué modelos heredan de
ApplicationRecord e incluyen Auditable?” (dependency_search)
- “Rastrea qué ocurre después de que un pedido se marca como pagado.” (
get_task_context)
Limitaciones conocidas
- En Ruby,
require y load son llamadas a métodos comunes, así que el preset imports de structural_search no selecciona nada. Usa text_pattern_search para listarlas.
- Los métodos creados en tiempo de ejecución con
define_method o atendidos por method_missing no se extraen como símbolos, y esas llamadas se filtran como ruido de metaprogramación.
- Ruby no tiene sintaxis de decoradores, así que las relaciones de decorador están marcadas como no aplicables.
Próximos pasos
Conecta un repositorio con el inicio rápido y luego revisa la matriz de compatibilidad en la página de compatibilidad. Para otros repositorios en lenguajes dinámicos, compáralo con la guía de Python.