# Groovy บน Maguyva: กราฟโค้ดสำหรับ Gradle และ Jenkins

Canonical source: https://maguyva.ai/th/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 สัญลักษณ์ และกราฟ เพื่อให้เอเจนต์ AI ติดตามคลาส โคลเชอร์ และการเรียกในแอป Groovy บิลด์ Gradle และไฟล์ Jenkinsfile ได้

## ภาพรวมการรองรับ

- ระดับ: รองรับ AST และสัญลักษณ์
- การเขียนโปรแกรม
- นามสกุลไฟล์: .gradle, .groovy, .jenkinsfile
- การแยกวิเคราะห์ AST จริงสำหรับการค้นหาที่รู้จักไวยากรณ์และบริบทเชิงโครงสร้าง
- สัญลักษณ์ที่มีชื่อป้อนข้อมูลให้การค้นหาเชิงความหมายและการอ้างอิงไขว้ การนำทางกราฟจะใช้งานได้เมื่อเปิดใช้การสกัดความสัมพันธ์
- ภาษานี้ส่งสัญลักษณ์และความสัมพันธ์ไปยังการค้นหาแบบรู้บริบทกราฟ โดยประเภทเอดจ์ที่รองรับจะแตกต่างกันตามโครงสร้างเฉพาะของภาษา
- รองรับทั้งการแยกวิเคราะห์ AST และการสกัดสัญลักษณ์

## เหมาะที่สุดสำหรับ

- บิลด์ Gradle ที่เขียนด้วย Groovy โดยมีตรรกะการบิลด์ร่วมกระจายอยู่ในหลายไฟล์ `.gradle`
- ไปป์ไลน์ Jenkins และไลบรารีที่ใช้ร่วมกัน ซึ่งเอเจนต์ต้องอ่านก่อนเปลี่ยน CI
- แอปพลิเคชัน Groovy บน JVM และชุดทดสอบ Spock

## เวิร์กโฟลว์ของเอเจนต์

- ค้นหาผู้เรียกทั้งหมดของสเต็ปในไลบรารีที่ใช้ร่วมกันก่อนเปลี่ยนอาร์กิวเมนต์
- ติดตามว่าสคริปต์บิลด์ใดเรียกตัวช่วยที่ประกาศไว้ในไฟล์ `.gradle` ที่ใช้ร่วมกัน
- ทำแผนที่คลาสที่สืบทอดจากคลาสฐานก่อนรีแฟกเตอร์

## จุดที่ Groovy ทำให้เครื่องมือ AI แบบผิวเผินสะดุด

Groovy มักอ่านแล้วเหมือนการตั้งค่า ในบิลด์ Gradle `dependencies { implementation ... }` คือลำดับการเรียกเมธอดพร้อมโคลเชอร์ และ Jenkinsfile แบบประกาศก็เป็นเช่นเดียวกัน บิลเดอร์เปลี่ยนชื่อใดก็ได้ให้เป็นการเรียก และ GDK เพิ่มเมธอดอย่าง `each` และ `collect` ให้ทุกออบเจกต์ เครื่องมือที่บันทึกทุกการเรียกจะจมอยู่ในสัญญาณรบกวนนี้

Maguyva กรองเลเยอร์ DSL และ GDK ออก เพื่อให้เมธอดและคลาสของคุณเองโดดเด่นขึ้นมา

## Maguyva ดึงอะไรจาก Groovy ได้บ้าง

Maguyva ครอบคลุมไฟล์ `.groovy` และ `.gradle` รวมถึง `Jenkinsfile` คลาส ฟังก์ชัน และเมธอดถูกดึงออกมา และการอิมพอร์ตปรับนามแฝง `import static` และ `as` ให้เป็นมาตรฐาน บล็อกโคลเชอร์ท้ายการเรียกและตัวดำเนินการนำทางอย่างปลอดภัย `?.` จะถูกตัดออกจากชื่อการเรียก ดังนั้น `repo?.save(order) { ... }` จึงถูกบันทึกเป็นการเรียก `save` การเรียกที่ไม่มีรีซีฟเวอร์ภายในคลาสจะถูกรีโซลฟ์ไปยังเมธอดของคลาสนั้นเอง

สัญญาณรบกวนถูกกรองเป็นชั้น ๆ

- ชื่อจากไลบรารีมาตรฐาน Gradle และ Spock ประมาณ 140 ชื่อ เช่น `dependencies`, `implementation`, `task`, `given`, `when`, `then` และ `Mock`
- เมธอด GDK ประมาณ 260 เมธอด เช่น `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`

## ขั้นตอนถัดไป

เชื่อมต่อรีโพซิทอรีด้วย[คู่มือเริ่มต้นใช้งาน](/th/docs/quickstart) แล้วดูตารางการรองรับได้ที่[หน้าความเข้ากันได้](/th/docs/compatibility) สำหรับโค้ด JVM ที่บิลด์ของคุณคอมไพล์ ให้อ่าน[คู่มือภาษา Java](/th/languages/java) และ[คู่มือภาษา Kotlin](/th/languages/kotlin)

## รายละเอียดเอนจิน

- การรองรับ Groovy ครอบคลุมไฟล์ `.groovy`, `.gradle` และ `Jenkinsfile` บล็อกโคลเชอร์ และการนำทางอย่างปลอดภัย `?.` จะถูกตัดออกจากชื่อการเรียก
- ชื่อจากไลบรารีมาตรฐาน Gradle และ Spock ประมาณ 140 ชื่อ และเมธอด GDK ประมาณ 260 เมธอดถูกกรองออกจากความสัมพันธ์
- ชื่อใน DSL ของบิลเดอร์ รวมถึงสเต็ปของ Jenkins อย่าง `stage` และ `sh` ถูกกรองออกเมื่อใช้แบบบิลเดอร์ คำอธิบายประกอบไม่เคยถูกบันทึกเป็นการเรียก

## จุดเริ่มต้น MCP ที่มีประโยชน์

- `find_symbol`: ใช้กับสเต็ปในไลบรารีที่ใช้ร่วมกัน ตัวช่วยการบิลด์ หรือคลาสเมื่อต้องการนิยามและผู้เรียก
- `dependency_search`: ใช้การท่องกราฟขาเข้าเพื่อดูว่าสคริปต์และไปป์ไลน์ใดเรียกตัวช่วยการบิลด์
- `text_pattern_search`: ใช้กับการเรียก DSL และเมธอด GDK ที่ถูกกรองออกจากกราฟ
