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

Lua บน Maguyva: กราฟโค้ดสำหรับเกม ปลั๊กอิน และ OpenResty

Maguyva รองรับ Lua ด้วย AST สัญลักษณ์ และกราฟ เพื่อให้เอเจนต์ AI ติดตามโมดูล เมธอดแบบโคลอน คลาสที่สร้างจากเมทาเทเบิล และลำดับ require ในโค้ด Lua ได้

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

Lua ไม่มีคีย์เวิร์ดสำหรับคลาส ออบเจกต์คือตาราง เมธอดคือฟังก์ชันที่เก็บไว้ในตาราง และการสืบทอดคือการเรียก setmetatable โมดูลคือสิ่งที่ require คืนกลับมา โครงสร้างมีอยู่จริง แต่อยู่ในธรรมเนียมที่การค้นหาข้อความไม่เข้าใจ

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

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

Maguyva ครอบคลุมไฟล์ .lua การประกาศฟังก์ชัน นิยาม local function และนิพจน์ฟังก์ชันถูกดึงออกมา และเมธอดแบบโคลอนอย่าง function Account:deposit() จะถูกผูกกับตารางเจ้าของคือ Account ลำดับเมธอดถูกติดตามทีละการเรียก และการเรียกบน self ยังคงผูกอยู่กับออบเจกต์ที่ล้อมรอบ

ธรรมเนียมของ Lua กลายเป็นความสัมพันธ์ดังนี้

  • require, dofile และ loadfile บันทึกการอิมพอร์ต
  • การเรียก setmetatable ระดับโมดูลบันทึกการสืบทอด
  • ClassName:new(), ClassName.new() และ setmetatable({...}, ClassName) นับเป็นการสร้างอินสแตนซ์
  • error() บันทึกการโยน และ pcall กับ xpcall บันทึกการจับ

กราฟยังบันทึกการอ่านและเขียน และโฟลว์การควบคุม

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

  • “ใครเรียก Inventory:addItem และเรียกจากสคริปต์ไหนบ้าง” (find_symbol จากนั้น dependency_search ทิศทางขาเข้า)
  • “โมดูลใดบ้างที่โหลด util.http ด้วย require” (dependency_search)
  • “ติดตามว่าเกิดอะไรขึ้นเมื่อผู้เล่นได้รับความเสียหาย” (get_task_context)

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

  • ชื่อประมาณ 150 ชื่อถูกกรองออกจากความสัมพันธ์ ได้แก่ไลบรารีมาตรฐานของ Lua (string, table, math, io, os, coroutine, debug และ utf8) รวมถึง API vim.* ของ Neovim และ ngx.* ของ OpenResty การเรียก API เหล่านี้ไม่ใช่เส้นเชื่อมในกราฟ ใช้ text_pattern_search เพื่อค้นหา
  • เนื่องจากโมดูลและคลาสสร้างจากการเรียกและตารางทั่วไป พรีเซ็ต classes และ imports ใน structural_search จึงไม่เลือกอะไรเลยสำหรับ Lua ให้ใช้ find_symbol หรือ text_pattern_search แทน
  • Lua ไม่มีอินเทอร์เฟซหรือคำอธิบายประกอบไทป์ ความสัมพันธ์การอิมพลีเมนต์อินเทอร์เฟซและการอ้างอิงไทป์จึงถูกทำเครื่องหมายว่าไม่เกี่ยวข้อง

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

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

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

  • > โค้ดเกมและสคริปต์เอนจินที่โมดูล คลาสแบบตาราง และตัวจัดการอีเวนต์เรียกกัน
  • > ปลั๊กอิน Neovim และการตั้งค่าเอดิเตอร์ที่แบ่งเป็นหลายโมดูลซึ่งโหลดด้วย require
  • > OpenResty และการใช้ Lua แบบฝังตัวอื่น ๆ ที่ตัวจัดการคำขออยู่คู่กับโมดูลยูทิลิตีที่ใช้ร่วมกัน

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

  • > ค้นหาผู้เรียกทั้งหมดของฟังก์ชันในโมดูลก่อนเปลี่ยนอาร์กิวเมนต์
  • > ติดตามว่าโมดูลใดโหลดยูทิลิตีที่ใช้ร่วมกันด้วย require ก่อนย้ายมัน
  • > ทำแผนที่ตารางที่สืบทอดจากคลาสฐานผ่าน `setmetatable`

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

  • > การรองรับ Lua ครอบคลุมไฟล์ `.lua` เมธอดแบบโคลอนอย่าง `function Account:deposit()` จะถูกผูกกับตารางเจ้าของ
  • > `require`, `dofile` และ `loadfile` บันทึกการอิมพอร์ต `setmetatable` ระดับโมดูลบันทึกการสืบทอด และ `ClassName:new()` นับเป็นการสร้างอินสแตนซ์
  • > `error()` บันทึกการโยนและ `pcall` บันทึกการจับ ส่วนชื่อจากไลบรารีมาตรฐาน `vim.*` และ `ngx.*` ประมาณ 150 ชื่อถูกกรองออก

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

  • find_symbol

    ใช้กับฟังก์ชันในโมดูลหรือเมธอดแบบโคลอนเมื่อต้องการนิยามและผู้เรียก

  • dependency_search

    ใช้การท่องกราฟขาเข้าเพื่อดูว่าไฟล์ใดโหลดโมดูลที่ใช้ร่วมกันด้วย require ก่อนย้ายมัน

  • text_pattern_search

    ใช้กับการเรียก `vim.*`, `ngx.*` หรือไลบรารีมาตรฐานที่ถูกกรองออกจากกราฟ

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

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

ดูคู่มือทั้งหมด
แกนกลางของระบบ การเขียนโปรแกรม

C บน Maguyva: กราฟการเรียกสำหรับโค้ดระบบและโค้ดฝังตัว

ในภาษา C กราฟการเรียกคือสถาปัตยกรรม เอเจนต์ควรอ่านมันก่อนแก้ไข

รองรับ AST และสัญลักษณ์ การแยกวิเคราะห์ AST การสกัดสัญลักษณ์ ความสัมพันธ์ในกราฟ

นามสกุลไฟล์

.c, .h

เปิดคู่มือ
ระบบไดนามิก การเขียนโปรแกรม

การรองรับ Python ใน Maguyva: ค้นหาโค้ดและรีแฟกเตอร์ด้วย AI

มีประโยชน์เมื่อโค้ดเบส Python กระจายไปทั่ว service, สคริปต์, stub ชนิดข้อมูล และโค้ดที่เชื่อมโยงส่วนต่างๆ ในการปฏิบัติงาน

รองรับ AST และสัญลักษณ์ การแยกวิเคราะห์ AST การสกัดสัญลักษณ์ ความสัมพันธ์ในกราฟ

นามสกุลไฟล์

.py, .pyi, .pyw

เปิดคู่มือ