Перейти до вмісту
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

    Використовуйте для промптів на кшталт «простеж, як подія замовлення доходить до запису в реєстр».