Saltar al contenido
cd /languages
  • JVM tipada
  • Programación
  • Soporte de AST y símbolos

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

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.

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 y luego revisa la matriz de compatibilidad en la página de compatibilidad. Para bases de código JVM mixtas, lee también la guía de Java y la guía de Kotlin.

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.

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