Saltar al contenido
cd /languages
  • Guiado por convenciones
  • Programación
  • Soporte de AST y símbolos

Ruby en Maguyva: grafos de código para Rails y apps Ruby

Maguyva admite Ruby con AST, símbolos y grafo, para que los agentes de IA sigan clases, módulos, métodos singleton y constructores en bases de código Rails y Ruby.

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.

Qué extrae Maguyva en Ruby

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.

Mejor uso

  • > Monolitos Rails donde modelos, service objects, jobs y concerns se llaman entre muchos directorios.
  • > Gems y servicios Ruby con espacios de nombres de módulos profundos y clases base compartidas.
  • > Equipos que quieren acotar un cambio con un agente de IA antes de tocar un modelo o servicio del que depende media aplicación.

Flujos de trabajo del agente

  • > Encontrar todos los llamadores de un service object o de un método de modelo antes de cambiar su comportamiento.
  • > Rastrear dónde se instancia una clase con `.new` y qué métodos se ejecutan después.
  • > Mapear qué clases heredan de una clase base o incluyen un módulo antes de una refactorización.

Detalles del motor

  • > La compatibilidad con Ruby cubre `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` y `Rakefile`. Los métodos singleton se marcan como estáticos y las declaraciones `attr_*` cuentan como métodos de acceso.
  • > `ClassName.new` cuenta como instanciación, y la tipificación de receptores sigue las asignaciones locales y las variables de instancia.
  • > Las llamadas de metaprogramación como `define_method` y `send`, los helpers `T::` de Sorbet y las llamadas enumerables comunes se filtran de las relaciones.

Puntos de entrada MCP útiles

  • find_symbol

    Úsalo con una clase, módulo o método con espacio de nombres, como `Billing::ChargeCustomer.call`.

  • dependency_search

    Usa el recorrido incoming sobre un modelo o service object para ver llamadores y subclases antes de un cambio.

  • text_pattern_search

    Úsalo para rutas de `require`, cadenas de rutas y métodos definidos dinámicamente que el grafo no puede ver.