Перейти к содержимому
cd /languages
  • Типизированная JVM
  • Программирование
  • Поддержка AST и символов

Scala в Maguyva: графы кода для сервисов на JVM и Spark

Maguyva поддерживает Scala с AST, символами и графом, чтобы ИИ-агенты могли прослеживать трейты, объекты, case-классы и типизированные вызовы в коде для JVM и Spark.

Где Scala сбивает с толку поверхностные ИИ-инструменты

В Scala одно имя несёт большую нагрузку. Трейт, его объект-компаньон и case-класс могут разделять одно понятие. Сопоставление с образцом связывает новые имена внутри предложений case, а метод, вызванный без получателя внутри класса, на деле является вызовом на this. Агент, читающий файлы по одному, видит имена, но не то, во что они разрешаются.

Maguyva разрешает больше на этапе индексации, поэтому, когда агент спрашивает, кто вызывает метод, он получает ответ, по которому можно действовать.

Что Maguyva извлекает из Scala

Maguyva охватывает файлы .scala и .sc. Классы, объекты и трейты извлекаются как типы, а пресет functions в structural_search охватывает объявления и определения def и лямбды. Сигнатуры фиксируют повторяющиеся (*) параметры, а префикс _root_ удаляется из импортов.

Связи вызовов сохраняют имена, квалифицированные классом, а вызов без получателя внутри класса разрешается в собственный метод этого класса. Типизация получателя отслеживает параметры, параметры класса, определения val и var, типизированные образцы и образцы case-классов в предложениях case, возвращаемые типы методов классов, объектов и трейтов, псевдонимы типов и предложения extends. new для типа с заглавной буквы считается созданием экземпляра.

Ни один тип связей не помечен как неприменимый для Scala, поэтому граф также фиксирует наследование, переопределения, ссылки на типы, чтение и запись, поток управления и рёбра исключений.

Примеры промптов для агентов

  • «Кто вызывает PaymentService.capture и из каких маршрутов?» (find_symbol, затем dependency_search по входящим связям)
  • «Какие классы и объекты расширяют EventHandler?» (dependency_search)
  • «Проследи, как событие заказа доходит до записи в реестр.» (get_task_context)

Известные ограничения

  • Около 320 имён стандартной библиотеки отфильтрованы из связей: операции над коллекциями, такие как map, flatMap и foldLeft, и вспомогательные Option, Either, Try, Future и Predef. Вызов на this или на значении, тип которого разрешается в один из ваших классов, сохраняется, даже если имя есть в этом списке. Если вызывающий код всё равно кажется пропавшим, используйте text_pattern_search.
  • Короткие параметры типов, такие как A, F и CC, и корневые типы вроде Any, Unit и Nothing отфильтрованы из ссылок на типы.

Следующие шаги

Подключите репозиторий по быстрому старту, затем изучите матрицу поддержки на странице совместимости. Для смешанных кодовых баз на JVM прочитайте и руководство по Java, и руководство по Kotlin.

Лучше всего подходит

  • > Сервисы для JVM на Scala, где трейты, объекты-компаньоны и case-классы распределяют одно понятие по многим файлам.
  • > Задачи Spark и инженерии данных, которые агентам нужно читать вместе с вызываемыми ими общими библиотеками.
  • > Смешанные репозитории на Scala и Java, в которых агенты должны искать как в одной кодовой базе.

Сценарии работы агента

  • > Найти все вызовы метода сервиса, прежде чем менять его сигнатуру.
  • > Перечислить классы и объекты, расширяющие трейт, прежде чем добавлять абстрактный член.
  • > Проследить, как запрос проходит от HTTP-маршрута через сервисы до слоя данных.

Детали движка

  • > Поддержка Scala охватывает файлы `.scala` и `.sc`. Классы, объекты и трейты являются типами; вызовы без получателя внутри класса разрешаются в собственные методы класса.
  • > Типизация получателя отслеживает параметры, параметры класса, определения `val` и `var`, образцы `case`, возвращаемые типы методов и предложения `extends`.
  • > Вызовы сохраняют имена, квалифицированные классом, `new` считается созданием экземпляра, а около 320 имён стандартной библиотеки отфильтрованы из связей.

Полезные точки входа MCP

  • find_symbol

    Используйте для трейта, объекта или метода сервиса, когда нужны определение и ссылки.

  • dependency_search

    Используйте обход входящих связей для трейта или метода, чтобы увидеть реализации и вызовы перед изменением сигнатуры.

  • get_task_context

    Используйте для промптов вроде «проследи, как событие заказа доходит до записи в реестр».