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

Canonical source: https://maguyva.ai/ru/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 поддерживает Scala с AST, символами и графом, чтобы ИИ-агенты могли прослеживать трейты, объекты, case-классы и типизированные вызовы в коде для JVM и Spark.

## Сводка поддержки

- Уровень: Поддержка AST и символов
- Программирование
- Расширения: .sc, .scala
- Настоящий AST-разбор для синтаксически осведомлённого поиска и структурного контекста.
- Именованные символы обеспечивают семантический поиск и перекрёстные ссылки. Навигация по графу доступна, когда включено извлечение связей.
- Этот язык добавляет символы и связи в поиск с учётом графа; поддерживаемые типы рёбер зависят от присущих ему конструкций.
- Доступны и AST-разбор, и извлечение символов.

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

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

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

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

## Где 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` отфильтрованы из ссылок на типы.

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

Подключите репозиторий по [быстрому старту](/ru/docs/quickstart), затем изучите матрицу поддержки на [странице совместимости](/ru/docs/compatibility). Для смешанных кодовых баз на JVM прочитайте и [руководство по Java](/ru/languages/java), и [руководство по Kotlin](/ru/languages/kotlin).

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

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

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

- `find_symbol`: Используйте для трейта, объекта или метода сервиса, когда нужны определение и ссылки.
- `dependency_search`: Используйте обход входящих связей для трейта или метода, чтобы увидеть реализации и вызовы перед изменением сигнатуры.
- `get_task_context`: Используйте для промптов вроде «проследи, как событие заказа доходит до записи в реестр».
