# Groovy trên Maguyva: đồ thị mã cho Gradle và Jenkins

Canonical source: https://maguyva.ai/vi/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 hỗ trợ Groovy với AST, ký hiệu và đồ thị, để agent AI có thể lần theo lớp, closure và lời gọi trong ứng dụng Groovy, bản build Gradle và Jenkinsfile.

## Tổng quan hỗ trợ

- Cấp độ: Hỗ trợ AST và symbol
- Lập trình
- Phần mở rộng: .gradle, .groovy, .jenkinsfile
- Phân tích AST thật cho tìm kiếm nhận biết cú pháp và context cấu trúc.
- Các symbol có tên cung cấp dữ liệu cho tra cứu ngữ nghĩa và tham chiếu chéo. Điều hướng graph khả dụng khi bật trích xuất quan hệ.
- Ngôn ngữ này đóng góp symbol và quan hệ cho tìm kiếm nhận biết graph; các loại edge được hỗ trợ thay đổi theo cấu trúc riêng của ngôn ngữ.
- Cả phân tích AST và trích xuất symbol đều khả dụng.

## Phù hợp nhất

- Bản build Gradle viết bằng Groovy, với logic build dùng chung trải trên nhiều tệp `.gradle`.
- Pipeline Jenkins và thư viện dùng chung mà agent cần đọc trước khi thay đổi CI.
- Ứng dụng Groovy trên JVM và bộ kiểm thử Spock.

## Workflow agent

- Tìm mọi nơi gọi một bước trong thư viện dùng chung trước khi đổi đối số của nó.
- Lần theo những tập lệnh build nào gọi một helper được định nghĩa trong tệp `.gradle` dùng chung.
- Lập bản đồ các lớp kế thừa từ một lớp cơ sở trước khi tái cấu trúc.

## Groovy làm khó các công cụ AI hời hợt ở đâu

Groovy thường đọc như cấu hình. Trong một bản build Gradle, `dependencies { implementation ... }` là một chuỗi lời gọi phương thức kèm closure, và một Jenkinsfile khai báo cũng vậy. Builder biến những tên tùy ý thành lời gọi, còn GDK thêm các phương thức như `each` và `collect` vào mọi đối tượng. Một công cụ ghi lại mọi lời gọi sẽ chìm trong nhiễu.

Maguyva lọc bỏ lớp DSL và GDK, để các phương thức và lớp của chính bạn nổi bật lên.

## Maguyva trích xuất gì từ Groovy

Maguyva bao quát các tệp `.groovy` và `.gradle` cùng `Jenkinsfile`. Lớp, hàm và phương thức được trích xuất, còn import chuẩn hóa các alias `import static` và `as`. Khối closure ở cuối và toán tử điều hướng an toàn `?.` bị loại khỏi tên lời gọi, nên `repo?.save(order) { ... }` được ghi thành lời gọi tới `save`. Một lời gọi không có receiver bên trong lớp được phân giải tới phương thức của chính lớp đó.

Nhiễu được lọc theo từng lớp:

- Khoảng 140 tên của thư viện chuẩn, Gradle và Spock, như `dependencies`, `implementation`, `task`, `given`, `when`, `then` và `Mock`.
- Khoảng 260 phương thức GDK, như `each`, `collect`, `inject` và `eachLine`.
- Tên DSL của builder, gồm các bước Jenkins như `pipeline`, `stage`, `steps` và `sh`, khi được dùng theo kiểu builder thay vì gọi kèm dấu ngoặc.
- Các annotation biến đổi AST và annotation của framework như `@CompileStatic`, `@Immutable` và `@Autowired`, vốn không bao giờ được ghi thành lời gọi.

Đồ thị còn ghi lại kế thừa, việc khởi tạo đối tượng, và thao tác đọc và ghi.

## Ví dụ prompt cho agent

- "Ai gọi `deployToStaging`, và từ những pipeline nào?" (`find_symbol`, sau đó `dependency_search` theo chiều vào)
- "Những lớp nào kế thừa từ `BaseIntegrationSpec`?" (`dependency_search`)
- "Giải thích cách tác vụ phát hành build và xuất bản artifact." (`get_task_context`)

## Giới hạn đã biết

- Phương thức Groovy và hàm tự do dùng chung một nút cú pháp, nên preset `methods` trong `structural_search` không chọn được gì. Hãy dùng preset `functions` hoặc `find_symbol` thay thế.
- Một phương thức của bạn trùng tên với phương thức GDK hoặc DSL, như `collect` hay `stage`, có thể bị lọc theo. Nếu thấy thiếu một nơi gọi, hãy dùng `text_pattern_search`.

## Bước tiếp theo

Kết nối một kho mã bằng [hướng dẫn bắt đầu nhanh](/vi/docs/quickstart), sau đó xem ma trận hỗ trợ trên [trang tương thích](/vi/docs/compatibility). Với mã JVM mà bản build của bạn biên dịch, hãy đọc [hướng dẫn Java](/vi/languages/java) và [hướng dẫn Kotlin](/vi/languages/kotlin).

## Chi tiết engine

- Hỗ trợ Groovy bao quát các tệp `.groovy`, `.gradle` và `Jenkinsfile`. Khối closure và điều hướng an toàn `?.` bị loại khỏi tên lời gọi.
- Khoảng 140 tên của thư viện chuẩn, Gradle và Spock cùng khoảng 260 phương thức GDK bị lọc khỏi quan hệ.
- Tên DSL của builder, gồm các bước Jenkins như `stage` và `sh`, bị lọc khi dùng theo kiểu builder; annotation không bao giờ được ghi thành lời gọi.

## Điểm khởi đầu MCP hữu ích

- `find_symbol`: Dùng cho bước của thư viện dùng chung, helper build hoặc lớp khi bạn cần định nghĩa và nơi gọi.
- `dependency_search`: Dùng duyệt theo chiều vào để thấy tập lệnh và pipeline nào gọi một helper build.
- `text_pattern_search`: Dùng cho các lời gọi DSL và phương thức GDK bị lọc khỏi đồ thị.
