# Groovy в Maguyva: графы кода для Gradle и Jenkins

Canonical source: https://maguyva.ai/ru/languages/groovy

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 поддерживает Groovy с AST, символами и графом, чтобы ИИ-агенты могли прослеживать классы, замыкания и вызовы в приложениях на Groovy, сборках Gradle и файлах Jenkinsfile.

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

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

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

- Сборки Gradle на Groovy, где общая логика сборки разбросана по множеству файлов `.gradle`.
- Конвейеры Jenkins и общие библиотеки, которые агентам нужно прочитать перед изменением CI.
- Приложения на Groovy для JVM и наборы тестов Spock.

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

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

## Где 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`.

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

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

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

- Поддержка Groovy охватывает файлы `.groovy`, `.gradle` и `Jenkinsfile`. Блоки замыканий и безопасная навигация `?.` удаляются из имён вызовов.
- Около 140 имён стандартной библиотеки, Gradle и Spock и около 260 методов GDK отфильтрованы из связей.
- Имена DSL билдеров, включая шаги Jenkins вроде `stage` и `sh`, отфильтровываются при использовании в стиле билдера; аннотации никогда не записываются как вызовы.

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

- `find_symbol`: Используйте для шага общей библиотеки, вспомогательной функции сборки или класса, когда нужны определение и вызовы.
- `dependency_search`: Используйте обход входящих связей, чтобы увидеть, какие скрипты и конвейеры вызывают вспомогательную функцию сборки.
- `text_pattern_search`: Используйте для вызовов DSL и методов GDK, отфильтрованных из графа.
