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

Groovy у Maguyva: графи коду для Gradle і Jenkins

Maguyva підтримує Groovy з AST, символами та графом, щоб ШІ-агенти могли простежувати класи, замикання й виклики в застосунках на Groovy, збірках Gradle і файлах Jenkinsfile.

Де Groovy збиває з пантелику поверхові ШІ-інструменти

Groovy часто читається як конфігурація. У збірці Gradle dependencies { implementation ... } є ланцюжком викликів методів із замиканнями, і декларативний Jenkinsfile влаштований так само. Білдери перетворюють довільні імена на виклики, а GDK додає кожному об’єктові методи на кшталт each і collect. Інструмент, що записує кожен виклик, тоне в цьому шумі.

Maguyva відфільтровує шар DSL і GDK, щоб ваші власні методи й класи було видно.

Що Maguyva витягує з Groovy

Maguyva охоплює файли .groovy і .gradle, а також Jenkinsfile. Витягуються класи, функції та методи, а імпорти нормалізують псевдоніми import static і as. Кінцеві блоки замикань і оператор безпечної навігації ?. вилучаються з імен викликів, тож repo?.save(order) { ... } записується як виклик save. Виклик без отримувача всередині класу розв’язується у власний метод цього класу.

Шум відфільтровується пошарово:

  • Близько 140 імен стандартної бібліотеки, Gradle і Spock, як-от dependencies, implementation, task, given, when, then і Mock.
  • Близько 260 методів GDK, як-от each, collect, inject і eachLine.
  • Імена DSL білдерів, зокрема кроки Jenkins на кшталт pipeline, stage, steps і sh, коли їх використано в стилі білдера, а не викликано з дужками.
  • Анотації AST-перетворень і фреймворків, як-от @CompileStatic, @Immutable і @Autowired, які ніколи не записуються як виклики.

Граф також фіксує успадкування, створення екземплярів, читання й запис.

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

  • «Хто викликає deployToStaging і з яких конвеєрів?» (find_symbol, потім dependency_search за вхідними зв’язками)
  • «Які класи успадковують від BaseIntegrationSpec?» (dependency_search)
  • «Поясни, як задача випуску збирає й публікує артефакти.» (get_task_context)

Відомі обмеження

  • Методи Groovy та вільні функції використовують той самий синтаксичний вузол, тому пресет methods у structural_search нічого не вибирає. Використовуйте натомість пресет functions або find_symbol.
  • Ваш метод, ім’я якого збігається з методом GDK чи DSL, як-от collect або stage, може бути відфільтрований разом із ними. Якщо здається, що код виклику зник, використовуйте text_pattern_search.

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

Під’єднайте репозиторій за швидким стартом, потім перегляньте матрицю підтримки на сторінці сумісності. Для коду на JVM, який компілюють ваші збірки, прочитайте посібник із Java і посібник із Kotlin.

Найкраще підходить

  • > Збірки Gradle на Groovy, де спільна логіка збирання розкидана по багатьох файлах `.gradle`.
  • > Конвеєри Jenkins і спільні бібліотеки, які агентам треба прочитати перед зміною CI.
  • > Застосунки на Groovy для JVM і набори тестів Spock.

Робочі процеси агента

  • > Знайти всі виклики кроку спільної бібліотеки, перш ніж змінювати його аргументи.
  • > Простежити, які скрипти збирання викликають допоміжну функцію, оголошену в спільному файлі `.gradle`.
  • > Скласти карту класів, що успадковують від базового класу, перед рефакторингом.

Деталі рушія

  • > Підтримка Groovy охоплює файли `.groovy`, `.gradle` і `Jenkinsfile`. Блоки замикань і безпечна навігація `?.` вилучаються з імен викликів.
  • > Близько 140 імен стандартної бібліотеки, Gradle і Spock та близько 260 методів GDK відфільтровано зі зв'язків.
  • > Імена DSL білдерів, зокрема кроки Jenkins на кшталт `stage` і `sh`, відфільтровуються, коли використані в стилі білдера; анотації ніколи не записуються як виклики.

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

  • find_symbol

    Використовуйте для кроку спільної бібліотеки, допоміжної функції збирання чи класу, коли потрібні визначення й виклики.

  • dependency_search

    Використовуйте обхід вхідних зв'язків, щоб побачити, які скрипти й конвеєри викликають допоміжну функцію збирання.

  • text_pattern_search

    Використовуйте для викликів DSL і методів GDK, відфільтрованих із графа.