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

Canonical source: https://maguyva.ai/uk/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` відфільтровано з посилань на типи.

## Наступні кроки

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

## Деталі рушія

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

## Корисні точки входу MCP

- `find_symbol`: Використовуйте для трейту, об'єкта чи методу сервісу, коли потрібні визначення й посилання.
- `dependency_search`: Використовуйте обхід вхідних зв'язків для трейту чи методу, щоб побачити реалізації та виклики перед зміною сигнатури.
- `get_task_context`: Використовуйте для промптів на кшталт «простеж, як подія замовлення доходить до запису в реєстр».
