Pular para o conteúdo
cd /languages
  • JVM tipada
  • Programação
  • Suporte a AST e símbolos

Scala no Maguyva: grafos de código para serviços JVM e Spark

O Maguyva oferece suporte a Scala com AST, símbolos e grafo, para que agentes de IA sigam traits, objects, case classes e chamadas tipadas em código JVM e Spark.

Onde Scala derruba ferramentas de IA superficiais

Em Scala, um nome carrega muita coisa. Um trait, seu companion object e uma case class podem compartilhar um mesmo conceito. O pattern matching vincula novos nomes dentro de cláusulas case, e um método chamado sem receiver dentro de uma classe é uma chamada em this. Um agente que lê um arquivo por vez vê os nomes, mas não o que eles resolvem.

O Maguyva resolve mais disso na indexação, para que um agente possa perguntar quem chama um método e receber uma resposta com a qual consiga agir.

O que o Maguyva extrai em Scala

O Maguyva cobre arquivos .scala e .sc. Classes, objects e traits são extraídos como tipos, e o preset functions do structural_search cobre declarações e definições def, além de lambdas. As assinaturas registram parâmetros repetidos (*), e os imports perdem o prefixo _root_.

As relações de chamada mantêm nomes qualificados pela classe, e uma chamada sem receiver dentro de uma classe é resolvida para o próprio método dessa classe. A tipagem de receivers segue parâmetros, parâmetros de classe, definições val e var, patterns tipados e de case class dentro de cláusulas case, os tipos de retorno de métodos de classes, objects e traits, aliases de tipo e cláusulas extends. new em um tipo com inicial maiúscula conta como instanciação.

Nenhum tipo de relação está marcado como não aplicável para Scala, então o grafo também registra herança, overrides, referências de tipo, leituras e escritas, fluxo de controle e arestas de exceção.

Exemplos de prompts para agentes

  • “Quem chama PaymentService.capture, e de quais rotas?” (find_symbol, depois dependency_search incoming)
  • “Quais classes e objects estendem EventHandler?” (dependency_search)
  • “Rastreie como um evento de pedido chega ao gravador do razão contábil.” (get_task_context)

Limitações conhecidas

  • Cerca de 320 nomes da biblioteca padrão são filtrados das relações: operações de coleção como map, flatMap e foldLeft, mais helpers de Option, Either, Try, Future e Predef. Uma chamada em this, ou em um valor cujo tipo resolve para uma das suas classes, é mantida mesmo quando o nome está nessa lista. Use text_pattern_search se ainda parecer faltar um chamador.
  • Parâmetros de tipo curtos como A, F e CC, e tipos raiz como Any, Unit e Nothing, são filtrados das referências de tipo.

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 bases de código JVM mistas, leia também o guia de Java e o guia de Kotlin.

Uso ideal

  • > Serviços JVM escritos em Scala, em que traits, companion objects e case classes espalham um mesmo conceito por muitos arquivos.
  • > Jobs Spark e de engenharia de dados que os agentes precisam ler junto com as bibliotecas compartilhadas que eles chamam.
  • > Repositórios mistos de Scala e Java que os agentes precisam pesquisar como uma única base de código.

Fluxos de trabalho de agente

  • > Encontrar todos os chamadores de um método de serviço antes de mudar sua assinatura.
  • > Listar quais classes e objects estendem um trait antes de adicionar um membro abstrato.
  • > Rastrear como uma requisição passa de uma rota HTTP pelos serviços até a camada de dados.

Detalhes do motor

  • > O suporte a Scala cobre `.scala` e `.sc`. Classes, objects e traits são tipos, e chamadas sem receiver dentro de uma classe são resolvidas para os métodos dela.
  • > A tipagem de receivers segue parâmetros, parâmetros de classe, definições `val` e `var`, patterns `case`, tipos de retorno de métodos e cláusulas `extends`.
  • > As chamadas mantêm nomes qualificados pela classe, `new` conta como instanciação e cerca de 320 nomes da biblioteca padrão são filtrados das relações.

Pontos de entrada MCP úteis

  • find_symbol

    Use para um trait, um object ou um método de serviço quando precisar da definição e das referências.

  • dependency_search

    Use a travessia incoming em um trait ou método para ver implementações e chamadores antes de mudar uma assinatura.

  • get_task_context

    Use para prompts como "rastreie como um evento de pedido chega ao gravador do razão contábil".