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

Dart บน Maguyva: กราฟโค้ดสำหรับแอป Flutter และ Dart

Maguyva รองรับ Dart ด้วย AST สัญลักษณ์ และกราฟ เพื่อให้เอเจนต์ AI ติดตามคลาส มิกซ์อิน ส่วนขยาย และคอนสตรักเตอร์ในโค้ด Flutter และ Dart ได้

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

Dart กระจายไทป์เดียวไปไว้ในหลายโครงสร้าง คลาสหนึ่งอาจสืบทอดจากคลาสฐานหนึ่งคลาส อิมพลีเมนต์หลายอินเทอร์เฟซ และผสมพฤติกรรมจากมิกซ์อินผ่าน with เมธอดส่วนขยายเพิ่มสมาชิกให้ไทป์ที่ประกาศไว้ที่อื่น ส่วนคอนสตรักเตอร์แบบมีชื่อและคอนสตรักเตอร์ factory ก็ซ่อนว่าคลาสใดถูกสร้างขึ้นจริง การค้นหาข้อความเจอชื่อ แต่ไม่เจอโครงสร้างเบื้องหลัง

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

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

Maguyva ครอบคลุมไฟล์ .dart คลาส มิกซ์อิน และส่วนขยายถูกดึงออกมาเป็นไทป์ พรีเซ็ต functions ใน structural_search ครอบคลุมฟังก์ชัน เมธอด ฟังก์ชันภายใน แลมบ์ดา และคอนสตรักเตอร์แบบเจเนอเรทีฟ, const และ factory ซิกเนเจอร์บันทึกกลุ่มพารามิเตอร์ตามตำแหน่งแบบไม่บังคับและพารามิเตอร์แบบมีชื่อ รวมถึงสมาชิก static ส่วนต่อท้าย ? และ ! จะถูกตัดออกจากชื่อนิยาม

การอิมพอร์ตปรับไดเรกทีฟ import, part และ library ให้เป็นมาตรฐาน และตัดอนุประโยค show, hide และ as ทิ้ง การเรียกผ่านคำนำหน้าการอิมพอร์ต เช่น http.get หลัง import 'package:http/http.dart' as http ยังคงอยู่ในกราฟ

การระบุชนิดของรีซีฟเวอร์ติดตามพารามิเตอร์ ตัวแปรที่ประกาศไทป์หรือมีค่าเริ่มต้น getter และลูป for-in บนลิสต์ เซ็ต และอิเทอเรเบิล โดยถือว่า var และ dynamic เป็นไทป์ที่อนุมานได้ เมื่อรีโซลฟ์สมาชิกที่สืบทอดมา ระบบจะตามอนุประโยค extends, implements และ with ด้วย กราฟยังบันทึกการสร้างอินสแตนซ์ การอ้างอิงไทป์ การอ่านและเขียน และเส้นเชื่อมของเอกซ์เซปชัน

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

  • “ใครเรียก CartRepository.addItem และเรียกจากวิดเจ็ตไหนบ้าง” (find_symbol จากนั้น dependency_search ทิศทางขาเข้า)
  • “คลาสใดบ้างที่อิมพลีเมนต์ PaymentGateway” (dependency_search)
  • “ติดตามว่าปุ่มชำระเงินไปถึง API การชำระเงินได้อย่างไร” (get_task_context)

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

  • ชื่อจากไลบรารีหลักของ Dart ประมาณ 200 ชื่อถูกกรองออกจากความสัมพันธ์ รวมถึงตัวช่วยของคอลเลกชันอย่าง map, where และ forEach เมธอดของ Future และ Stream อย่าง then และ listen และไลบรารี dart: ใช้ text_pattern_search สำหรับสิ่งเหล่านี้
  • โหนดซิกเนเจอร์ของ Dart เก็บส่วนเนื้อหาไว้เป็นโหนดพี่น้อง ดังนั้นในผลลัพธ์ของ structural_search ฟังก์ชันภายในหรือแลมบ์ดาอาจซ้อนทับกับสิ่งที่เรียกใช้ได้ที่บรรจุมันอยู่ และ getter กับ setter จะแสดงเป็นซิกเนเจอร์ของเมธอด

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

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

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

  • > แอป Flutter ที่วิดเจ็ต คลาสสถานะ รีโพซิทอรี และเซอร์วิสเรียกกันข้ามหลายไฟล์
  • > แพ็กเกจ Dart ที่เพิ่มพฤติกรรมผ่านมิกซ์อินและเมธอดส่วนขยายให้กับไทป์ที่ประกาศไว้ที่อื่น
  • > โค้ด Dart ฝั่งเซิร์ฟเวอร์และบรรทัดคำสั่งที่ใช้โมเดลร่วมกับไคลเอนต์ Flutter

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

  • > ค้นหาผู้เรียกทั้งหมดของเมธอดในรีโพซิทอรีหรือเซอร์วิสก่อนเปลี่ยน API
  • > แสดงรายการคลาสที่อิมพลีเมนต์อินเทอร์เฟซก่อนเพิ่มสมาชิกใหม่
  • > ติดตามว่าการแตะบนวิดเจ็ตไปถึงเลเยอร์เครือข่ายได้อย่างไร

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

  • > การรองรับ Dart ครอบคลุมไฟล์ `.dart` คลาส มิกซ์อิน และส่วนขยายเป็นไทป์ คอนสตรักเตอร์รวมทั้งแบบเจเนอเรทีฟ, `const` และ `factory`
  • > การอิมพอร์ตปรับไดเรกทีฟ `import`, `part` และ `library` ให้เป็นมาตรฐาน การเรียกผ่านคำนำหน้าการอิมพอร์ตยังคงอยู่ในกราฟ
  • > การระบุชนิดของรีซีฟเวอร์ติดตามพารามิเตอร์ ตัวแปร getter และลูป `for`-`in` และชื่อจากไลบรารีหลักประมาณ 200 ชื่อถูกกรองออกจากความสัมพันธ์

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

  • find_symbol

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

  • dependency_search

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

  • get_task_context

    ใช้กับพรอมต์อย่าง "ติดตามว่าปุ่มชำระเงินไปถึง API การชำระเงินได้อย่างไร"

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

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

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