Pular para o conteúdo
cd /languages
  • Guiado por convenções
  • Programação
  • Suporte a AST e símbolos

Ruby no Maguyva: grafos de código para Rails e apps Ruby

O Maguyva oferece suporte a Ruby com AST, símbolos e grafo, para que agentes de IA sigam classes, módulos, métodos singleton e construtores em bases Rails e Ruby.

Por que repositórios Ruby complicam ferramentas de IA superficiais

Ruby se apoia em convenções e metaprogramação. Métodos são gerados por attr_accessor, classes são reabertas em outros arquivos, e namespaces aninham vários módulos. A superfície legível esconde qual método uma chamada realmente alcança, e uma busca textual bruta devolve cada call e cada perform do app.

O Maguyva entrega ao agente classes, módulos, métodos e seus chamadores como estrutura, para que ele siga uma mudança pelo app em vez de adivinhar.

O que o Maguyva extrai em Ruby

O Maguyva cobre arquivos .rb, .rbw, .rake e .gemspec, além de Gemfile e Rakefile. Métodos de instância e métodos singleton (def self.call) são extraídos, e os métodos singleton são marcados como estáticos. Declarações attr_reader, attr_writer e attr_accessor contam como métodos de acesso, e os símbolos são qualificados pelo namespace de módulo e classe.

ClassName.new e Namespace::ClassName.new contam como instanciação, e a tipagem de receivers segue atribuições locais e @instance_variables, de modo que uma chamada em um objeto atribuído pode ser resolvida para a sua classe. O grafo também registra herança, inclusão de módulos, sobrescritas, arestas de raise e rescue, e leituras e escritas.

Chamadas de metaprogramação (define_method, send, method_missing, class_eval e semelhantes), os helpers de tipo T:: do Sorbet e chamadas enumeráveis comuns (each, collect, reject e semelhantes) são filtrados das relações para que o código da aplicação se destaque.

Exemplos de prompts para agentes

  • “Quem chama Billing::ChargeCustomer.call e a partir de quais jobs e controllers?” (find_symbol, depois dependency_search incoming)
  • “Quais models herdam de ApplicationRecord e incluem Auditable?” (dependency_search)
  • “Rastreie o que acontece depois que um pedido é marcado como pago.” (get_task_context)

Limitações conhecidas

  • Em Ruby, require e load são chamadas de método comuns, então o preset imports de structural_search não seleciona nada. Use text_pattern_search para listá-las.
  • Métodos criados em tempo de execução com define_method ou tratados por method_missing não são extraídos como símbolos, e essas chamadas são filtradas como ruído de metaprogramação.
  • Ruby não tem sintaxe de decorators, então relações de decorator estão marcadas como não aplicáveis.

Próximos passos

Conecte um repositório pelo início rápido e depois confira a matriz de suporte na página de compatibilidade. Para outros repositórios em linguagens dinâmicas, compare com o guia de Python.

Uso ideal

  • > Monólitos Rails em que models, service objects, jobs e concerns se chamam através de muitos diretórios.
  • > Gems e serviços Ruby com namespaces de módulos profundos e classes base compartilhadas.
  • > Equipes que querem delimitar uma mudança com um agente de IA antes de mexer em um model ou serviço do qual metade do app depende.

Fluxos de trabalho de agente

  • > Encontrar todos os chamadores de um service object ou método de model antes de mudar seu comportamento.
  • > Rastrear onde uma classe é instanciada com `.new` e quais métodos rodam em seguida.
  • > Mapear quais classes herdam de uma classe base ou incluem um módulo antes de uma refatoração.

Detalhes do motor

  • > O suporte a Ruby cobre `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` e `Rakefile`. Métodos singleton são marcados como estáticos, e declarações `attr_*` contam como métodos de acesso.
  • > `ClassName.new` conta como instanciação, e a tipagem de receivers segue atribuições locais e variáveis de instância.
  • > Chamadas de metaprogramação como `define_method` e `send`, os helpers `T::` do Sorbet e chamadas enumeráveis comuns são filtrados das relações.

Pontos de entrada MCP úteis

  • find_symbol

    Use com uma classe, módulo ou método com namespace, como `Billing::ChargeCustomer.call`.

  • dependency_search

    Use a travessia incoming em um model ou service object para ver chamadores e subclasses antes de uma mudança.

  • text_pattern_search

    Use para caminhos de `require`, strings de rotas e métodos definidos dinamicamente que o grafo não enxerga.