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

Canonical source: https://maguyva.ai/pt-br/languages/scala

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

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.

## Panorama de suporte

- Nível: Suporte a AST e símbolos
- Programação
- Extensões: .sc, .scala
- Parsing real de AST para busca com consciência de sintaxe e contexto estrutural.
- Símbolos nomeados alimentam a busca semântica e as referências cruzadas. A navegação por grafo fica disponível quando a extração de relações está habilitada.
- Esta linguagem fornece símbolos e relações para a busca orientada por grafo; os tipos de aresta compatíveis variam de acordo com seus construtos nativos.
- A análise de AST e a extração de símbolos estão disponíveis.

## 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.

## 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](/pt-br/docs/quickstart) e depois confira a matriz de suporte na [página de compatibilidade](/pt-br/docs/compatibility). Para bases de código JVM mistas, leia também o [guia de Java](/pt-br/languages/java) e o [guia de Kotlin](/pt-br/languages/kotlin).

## 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".
