# Scala en Maguyva: grafos de código para servicios JVM y Spark

Canonical source: https://maguyva.ai/es/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).

Maguyva admite Scala con AST, símbolos y grafo, para que los agentes de IA sigan traits, objects, case classes y llamadas tipadas en código JVM y Spark.

## Resumen de soporte

- Nivel: Soporte de AST y símbolos
- Programación
- Extensiones: .sc, .scala
- Análisis AST real para búsqueda con reconocimiento de sintaxis y contexto estructural.
- Los símbolos con nombre alimentan la búsqueda semántica y las referencias cruzadas. La navegación por grafo está disponible cuando la extracción de relaciones está habilitada.
- Este lenguaje aporta símbolos y relaciones a la búsqueda basada en grafos; los tipos de arista disponibles varían según sus construcciones nativas.
- Están disponibles tanto el análisis AST como la extracción de símbolos.

## Mejor uso

- Servicios JVM escritos en Scala, donde traits, companion objects y case classes reparten un concepto entre muchos archivos.
- Jobs de Spark y de ingeniería de datos que los agentes deben leer junto con las bibliotecas compartidas que llaman.
- Repositorios mixtos de Scala y Java que los agentes deben buscar como una sola base de código.

## Flujos de trabajo del agente

- Encontrar todos los llamadores de un método de servicio antes de cambiar su firma.
- Listar qué clases y objects extienden un trait antes de añadir un miembro abstracto.
- Rastrear cómo una petición pasa de una ruta HTTP a los servicios y luego a la capa de datos.

## Dónde Scala hace tropezar a las herramientas de IA superficiales

En Scala un nombre carga mucho. Un trait, su companion object y una case class pueden compartir un mismo concepto. El pattern matching enlaza nombres nuevos dentro de las cláusulas `case`, y un método llamado sin receptor dentro de una clase es una llamada sobre `this`. Un agente que lee un archivo a la vez ve los nombres, pero no a qué se resuelven.

Maguyva resuelve más de eso al indexar, para que un agente pueda preguntar quién llama a un método y obtener una respuesta sobre la que pueda actuar.

## Qué extrae Maguyva en Scala

Maguyva cubre archivos `.scala` y `.sc`. Las clases, los objects y los traits se extraen como tipos, y el preset `functions` de `structural_search` cubre declaraciones y definiciones `def`, además de lambdas. Las firmas registran parámetros repetidos (`*`), y las importaciones pierden el prefijo `_root_`.

Las relaciones de llamada conservan los nombres calificados por clase, y una llamada sin receptor dentro de una clase se resuelve al propio método de esa clase. El tipado de receptores sigue parámetros, parámetros de clase, definiciones `val` y `var`, patrones tipados y de case class dentro de cláusulas `case`, los tipos de retorno de métodos de clases, objects y traits, los alias de tipo y las cláusulas `extends`. `new` sobre un tipo con mayúscula inicial cuenta como instanciación.

Ningún tipo de relación está marcado como no aplicable para Scala, así que el grafo también registra herencia, overrides, referencias de tipo, lecturas y escrituras, flujo de control y aristas de excepciones.

## Ejemplos de prompts para agentes

- "¿Quién llama a `PaymentService.capture` y desde qué rutas?" (`find_symbol`, luego `dependency_search` incoming)
- "¿Qué clases y objects extienden `EventHandler`?" (`dependency_search`)
- "Rastrea cómo un evento de pedido llega al escritor del libro mayor." (`get_task_context`)

## Limitaciones conocidas

- Unos 320 nombres de la biblioteca estándar se filtran de las relaciones: operaciones de colecciones como `map`, `flatMap` y `foldLeft`, más helpers de `Option`, `Either`, `Try`, `Future` y `Predef`. Una llamada sobre `this`, o sobre un valor cuyo tipo se resuelve a una de tus clases, se conserva aunque su nombre esté en esa lista. Usa `text_pattern_search` si aun así parece faltar un llamador.
- Los parámetros de tipo cortos como `A`, `F` y `CC`, y los tipos raíz como `Any`, `Unit` y `Nothing`, se filtran de las referencias de tipo.

## Próximos pasos

Conecta un repositorio con el [inicio rápido](/es/docs/quickstart) y luego revisa la matriz de compatibilidad en la [página de compatibilidad](/es/docs/compatibility). Para bases de código JVM mixtas, lee también la [guía de Java](/es/languages/java) y la [guía de Kotlin](/es/languages/kotlin).

## Detalles del motor

- El soporte de Scala cubre `.scala` y `.sc`. Las clases, los objects y los traits son tipos, y las llamadas sin receptor dentro de una clase se resuelven a sus propios métodos.
- El tipado de receptores sigue parámetros, parámetros de clase, definiciones `val` y `var`, patrones `case`, tipos de retorno de métodos y cláusulas `extends`.
- Las llamadas conservan los nombres calificados por clase, `new` cuenta como instanciación y unos 320 nombres de la biblioteca estándar se filtran de las relaciones.

## Puntos de entrada MCP útiles

- `find_symbol`: Úsalo para un trait, un object o un método de servicio cuando necesites la definición y las referencias.
- `dependency_search`: Usa el recorrido incoming sobre un trait o un método para ver implementaciones y llamadores antes de cambiar una firma.
- `get_task_context`: Úsalo para prompts como "rastrea cómo un evento de pedido llega al escritor del libro mayor".
