ข้ามไปที่เนื้อหา
cd /languages
  • JVM ยุคใหม่
  • การเขียนโปรแกรม
  • รองรับ AST และสัญลักษณ์

Kotlin บน Maguyva: กราฟโค้ดสำหรับ Android และ JVM

Maguyva รองรับ Kotlin ด้วย AST สัญลักษณ์ และกราฟ เพื่อให้เอเจนต์ AI ติดตามคลาส ฟังก์ชันส่วนขยาย และโครูทีนในโค้ด Android และ JVM

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

Kotlin กระชับเพราะซ่อนการเชื่อมต่อไว้ apply, let, also, run และ with เปลี่ยนความหมายของ this และ it ฟังก์ชันส่วนขยายเพิ่มพฤติกรรมให้ชนิดข้อมูลที่นิยามไว้ที่อื่น โครูทีนย้ายงานไปมาระหว่าง launch, async และ withContext เอเจนต์ที่อ่านทีละไฟล์จะเห็นการเรียก แต่ไม่เห็นรีซีฟเวอร์ที่อยู่เบื้องหลัง

Maguyva รีโซลฟ์โครงสร้างเหล่านี้ได้มากขึ้นตั้งแต่ตอนทำดัชนี เพื่อให้เอเจนต์ถามได้ว่าใครเรียกฟังก์ชันหนึ่ง และได้คำตอบที่แท้จริง

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

Maguyva ครอบคลุม .kt และ .kts ฟังก์ชัน คลาส ออบเจกต์ และคอมแพเนียนออบเจกต์ถูกดึงออกมา และซิกเนเจอร์ของฟังก์ชันบันทึกรีซีฟเวอร์ของส่วนขยาย ชื่อพารามิเตอร์ ค่าเริ่มต้น และพารามิเตอร์ vararg

ความสัมพันธ์การเรียกเก็บชื่อที่ระบุคลาสไว้ OrderRepository.save จึงไม่ปนกับ save ตัวอื่น การระบุชนิดของรีซีฟเวอร์ติดตาม this ภายใน apply และ run, it ภายใน let และ also และอาร์กิวเมนต์ของ with การเรียกภายในฟังก์ชันขอบเขตจึงถูกรีโซลฟ์ไปยังชนิดข้อมูลที่ถูกต้อง ตัวสร้างโครูทีนและตัวดำเนินการของ Flow (launch, async, withContext, coroutineScope, supervisorScope, flow, emit, delay, Channel) ถูกเก็บไว้ในกราฟโดยตั้งใจ

กราฟยังบันทึกการสืบทอด การอิมพลีเมนต์อินเทอร์เฟซ การ override การสร้างอินสแตนซ์ แอนโนเทชัน การอ้างอิงชนิดข้อมูล การอ่านและการเขียน และเส้นเชื่อมการ throw และ catch เอกซ์เซปชันด้วย

ตัวอย่างพรอมต์สำหรับเอเจนต์

  • “ใครเรียก CheckoutUseCase.invoke และเรียกจาก ViewModel ใดบ้าง” (find_symbol แล้วตามด้วย dependency_search ทิศทางขาเข้า)
  • “ติดตามโฟลว์การซิงก์จาก SyncWorker ไปจนถึงไคลเอนต์เครือข่าย” (get_task_context)
  • “คลาสใดบ้างที่อิมพลีเมนต์ PaymentGateway” (dependency_search)

ข้อจำกัดที่ทราบ

  • การเรียกไลบรารีมาตรฐานและแพลตฟอร์มของ Kotlin ราว 250 รายการถูกกรองออกจากความสัมพันธ์ ตัวช่วยอย่าง listOf, map, filter และ println จึงไม่เป็นเส้นเชื่อมในกราฟ ใช้ text_pattern_search สำหรับกรณีเหล่านี้

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

เชื่อมต่อรีโพซิทอรีด้วยคู่มือเริ่มต้นใช้งาน แล้วดูตารางการรองรับได้ที่หน้าความเข้ากันได้ สำหรับโค้ดเบสที่ผสมกัน ให้อ่านคู่มือภาษา Java ด้วย

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

  • > ทีม Android ที่มีแอปหลายโมดูลขนาดใหญ่ ซึ่ง ViewModel, repository และยูสเคส เรียกกันข้ามขอบเขตโมดูล
  • > Kotlin ฝั่งเซิร์ฟเวอร์และบริการ Kotlin/JVM ที่ผสม Kotlin กับโค้ด Java รุ่นเก่า
  • > งาน build ของ Gradle ที่เขียนด้วยสคริปต์ Kotlin (`.kts`) ซึ่งเอเจนต์ต้องอ่านควบคู่กับโค้ดแอป

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

  • > หาผู้เรียกทุกรายของคลาส repository หรือยูสเคสก่อนเปลี่ยน API
  • > ติดตามโฟลว์ของโครูทีนจาก `launch` ใน ViewModel ผ่าน `withContext` ไปจนถึงชั้นข้อมูล
  • > ทำแผนที่คลาสที่อิมพลีเมนต์อินเทอร์เฟซหรือ override เมธอดฐาน ก่อนการรีแฟกเตอร์

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

  • > การรองรับ Kotlin ครอบคลุม `.kt` และ `.kts` ซิกเนเจอร์บันทึกรีซีฟเวอร์ของส่วนขยาย ชื่อพารามิเตอร์ ค่าเริ่มต้น และพารามิเตอร์ `vararg`
  • > การระบุชนิดของรีซีฟเวอร์ติดตาม `this` ใน `apply` และ `run`, `it` ใน `let` และ `also` และอาร์กิวเมนต์ของ `with` ส่วนการเรียกเก็บชื่อที่ระบุคลาสไว้
  • > ตัวสร้างโครูทีนและตัวดำเนินการของ Flow เช่น `launch`, `withContext` และ `flow` ยังอยู่ในกราฟ ขณะที่การเรียกไลบรารีมาตรฐานราว 250 รายการถูกกรองออก

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

  • find_symbol

    ใช้กับคลาส ยูสเคส หรือฟังก์ชันส่วนขยาย เมื่อต้องการนิยามและการอ้างอิง

  • dependency_search

    ก่อนเปลี่ยน API ใช้การท่องกราฟทิศทางขาเข้าบนคลาส repository หรืออินเทอร์เฟซ เพื่อดูผู้เรียกและการอิมพลีเมนต์

  • get_task_context

    ใช้กับพรอมต์อย่าง “ติดตามโฟลว์การซิงก์จาก `SyncWorker` ไปจนถึงไคลเอนต์เครือข่าย”

คู่มือที่เกี่ยวข้อง

ส่วนอื่นของรีโพที่เกี่ยวข้อง

ดูคู่มือทั้งหมด