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

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

Maguyva รองรับ Ruby ด้วย AST สัญลักษณ์ และกราฟ เพื่อให้เอเจนต์ AI ติดตามคลาส โมดูล singleton method และคอนสตรักเตอร์ในโค้ดเบส Rails และ Ruby

ทำไมรีโพซิทอรี Ruby จึงยากสำหรับเครื่องมือ AI แบบผิวเผิน

Ruby พึ่งพาแบบแผนและเมทาโปรแกรมมิงอย่างมาก เมธอดถูกสร้างโดย attr_accessor คลาสถูกเปิดใหม่ในไฟล์อื่น และ namespace ซ้อนโมดูลไว้หลายชั้น พื้นผิวที่อ่านง่ายซ่อนว่าการเรียกไปจบที่เมธอดใดจริง และการค้นหาข้อความแบบหยาบจะคืนทุก call และทุก perform ในแอป

Maguyva ให้คลาส โมดูล เมธอด และผู้เรียกกับเอเจนต์ในรูปของโครงสร้าง เพื่อให้ติดตามการเปลี่ยนแปลงไปทั่วแอปแทนการเดา

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

Maguyva ครอบคลุมไฟล์ .rb, .rbw, .rake และ .gemspec รวมถึง Gemfile และ Rakefile เมธอดของอินสแตนซ์และเมธอด singleton (def self.call) ถูกดึงออกมา โดยเมธอด singleton ถูกทำเครื่องหมายเป็น static การประกาศ attr_reader, attr_writer และ attr_accessor นับเป็นเมธอดแอคเซสเซอร์ และสัญลักษณ์ถูกระบุด้วย namespace ของโมดูลและคลาส

ClassName.new และ Namespace::ClassName.new นับเป็นการสร้างอินสแตนซ์ และการระบุชนิดของรีซีฟเวอร์ติดตามการกำหนดค่าตัวแปรท้องถิ่นและ @instance_variables การเรียกบนออบเจกต์ที่ถูกกำหนดค่าจึงรีโซลฟ์ไปยังคลาสของมันได้ กราฟยังบันทึกการสืบทอด การ include โมดูล การ override เส้นเชื่อม raise และ rescue และการอ่านและการเขียนด้วย

การเรียกแบบเมทาโปรแกรมมิง (define_method, send, method_missing, class_eval และอื่น ๆ ทำนองเดียวกัน) ตัวช่วยชนิดข้อมูล T:: ของ Sorbet และการเรียก Enumerable ที่พบบ่อย (each, collect, reject และอื่น ๆ ทำนองเดียวกัน) ถูกกรองออกจากความสัมพันธ์ เพื่อให้โค้ดแอปโดดเด่นขึ้นมา

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

  • “ใครเรียก Billing::ChargeCustomer.call และเรียกจาก job และ controller ใดบ้าง” (find_symbol แล้วตามด้วย dependency_search ทิศทางขาเข้า)
  • “model ใดสืบทอดจาก ApplicationRecord และ include Auditable” (dependency_search)
  • “ติดตามว่าเกิดอะไรขึ้นหลังคำสั่งซื้อถูกทำเครื่องหมายว่าชำระแล้ว” (get_task_context)

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

  • ใน Ruby require และ load เป็นการเรียกเมธอดธรรมดา พรีเซ็ต imports ใน structural_search จึงไม่เลือกอะไรเลย ใช้ text_pattern_search เพื่อแสดงรายการเหล่านี้
  • เมธอดที่สร้างขณะรันไทม์ด้วย define_method หรือที่ method_missing จัดการ จะไม่ถูกดึงออกมาเป็นสัญลักษณ์ และการเรียกเหล่านั้นถูกกรองออกในฐานะสัญญาณรบกวนจากเมทาโปรแกรมมิง
  • Ruby ไม่มีไวยากรณ์เดคอเรเตอร์ ความสัมพันธ์เดคอเรเตอร์จึงถูกทำเครื่องหมายว่าไม่เกี่ยวข้อง

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

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

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

  • > Rails แบบโมโนลิธที่ model, service ออบเจกต์, job และ concern เรียกกันข้ามหลายไดเรกทอรี
  • > gem และบริการ Ruby ที่มี namespace ของโมดูลซ้อนลึกและคลาสฐานที่ใช้ร่วมกัน
  • > ทีมที่ต้องการกำหนดขอบเขตการเปลี่ยนแปลงร่วมกับเอเจนต์ AI ก่อนแตะ model หรือบริการที่แอปครึ่งหนึ่งพึ่งพา

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

  • > หาผู้เรียกทุกรายของ service ออบเจกต์ หรือเมธอดของ model ก่อนเปลี่ยนพฤติกรรม
  • > ติดตามว่าคลาสถูกสร้างด้วย `.new` ที่ใด และหลังจากนั้นเมธอดใดทำงาน
  • > ทำแผนที่คลาสที่สืบทอดจากคลาสฐานหรือ include โมดูลหนึ่ง ก่อนการรีแฟกเตอร์

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

  • > การรองรับ Ruby ครอบคลุม `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` และ `Rakefile` เมธอด singleton ถูกทำเครื่องหมายเป็น static และการประกาศ `attr_*` นับเป็นเมธอดแอคเซสเซอร์
  • > `ClassName.new` นับเป็นการสร้างอินสแตนซ์ และการระบุชนิดของรีซีฟเวอร์ติดตามการกำหนดค่าตัวแปรท้องถิ่นและตัวแปรอินสแตนซ์
  • > การเรียกแบบเมทาโปรแกรมมิง เช่น `define_method` และ `send` ตัวช่วย `T::` ของ Sorbet และการเรียก Enumerable ที่พบบ่อยถูกกรองออกจากความสัมพันธ์

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

  • find_symbol

    ใช้กับคลาส โมดูล หรือเมธอดที่อยู่ใน namespace เช่น `Billing::ChargeCustomer.call`

  • dependency_search

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

  • text_pattern_search

    ใช้กับพาธของ `require` สตริงเส้นทาง และเมธอดที่นิยามแบบไดนามิกซึ่งกราฟมองไม่เห็น

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

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

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

การรองรับ PHP ใน Maguyva: เว็บแอปที่อยู่มายาวนานโดยไม่ต้องแก้ไขแบบไม่เข้าใจโค้ด

เกี่ยวข้องเมื่อโค้ดเบส PHP ยังคงสร้างรายได้อยู่ แต่ไม่มีใครอยากปล่อยให้เอเจนต์แก้ไขไปตามใจ

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

นามสกุลไฟล์

.php, .php3, .php4, .php5, +อีก 2

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

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

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

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

นามสกุลไฟล์

.py, .pyi, .pyw

เปิดคู่มือ