Chuyển tới nội dung
cd /languages
  • Quy ước là trên hết
  • Lập trình
  • Hỗ trợ AST và symbol

Ruby trên Maguyva: đồ thị mã cho Rails và ứng dụng Ruby

Maguyva hỗ trợ Ruby với AST, ký hiệu và đồ thị, để agent AI có thể lần theo lớp, module, phương thức singleton và constructor trong codebase Rails và Ruby.

Vì sao kho mã Ruby làm khó các công cụ AI hời hợt

Ruby dựa nhiều vào quy ước và metaprogramming. Phương thức được sinh ra bởi attr_accessor, lớp được mở lại ở tệp khác, và namespace lồng module qua nhiều cấp. Bề mặt dễ đọc che đi việc một lời gọi thực sự dẫn tới phương thức nào, và một tìm kiếm văn bản thô sẽ trả về mọi call và mọi perform trong ứng dụng.

Maguyva đưa cho agent lớp, module, phương thức và nơi gọi dưới dạng cấu trúc, để nó lần theo thay đổi xuyên suốt ứng dụng thay vì đoán.

Maguyva trích xuất gì từ Ruby

Maguyva bao phủ các tệp .rb, .rbw, .rake và .gemspec, cùng với Gemfile và Rakefile. Phương thức instance và phương thức singleton (def self.call) được trích xuất, trong đó phương thức singleton được đánh dấu là static. Khai báo attr_reader, attr_writer và attr_accessor được tính là phương thức truy cập, và ký hiệu được định danh theo namespace module và lớp.

ClassName.new và Namespace::ClassName.new được tính là khởi tạo, và việc xác định kiểu receiver theo dõi phép gán cục bộ và @instance_variables, nên lời gọi trên một đối tượng đã gán có thể được phân giải về lớp của nó. Đồ thị cũng ghi lại kế thừa, include module, ghi đè, các cạnh raise và rescue, cùng đọc và ghi.

Lời gọi metaprogramming (define_method, send, method_missing, class_eval và tương tự), helper kiểu T:: của Sorbet và các lời gọi Enumerable phổ biến (each, collect, reject và tương tự) bị lọc khỏi quan hệ, để mã ứng dụng nổi bật lên.

Ví dụ prompt cho agent

  • “Ai gọi Billing::ChargeCustomer.call, và từ những job và controller nào?” (find_symbol, sau đó dependency_search theo chiều vào)
  • “Những model nào kế thừa từ ApplicationRecord và include Auditable?” (dependency_search)
  • “Lần theo điều gì xảy ra sau khi một đơn hàng được đánh dấu là đã thanh toán.” (get_task_context)

Giới hạn đã biết

  • Trong Ruby, require và load là lời gọi phương thức thông thường, nên preset imports trong structural_search không chọn gì. Dùng text_pattern_search để liệt kê chúng.
  • Phương thức được tạo lúc runtime bằng define_method hoặc do method_missing xử lý không được trích xuất thành ký hiệu, và các lời gọi đó bị lọc như nhiễu metaprogramming.
  • Ruby không có cú pháp decorator, nên quan hệ decorator được đánh dấu là không áp dụng.

Bước tiếp theo

Kết nối một kho mã bằng hướng dẫn bắt đầu nhanh, sau đó xem ma trận hỗ trợ trên trang tương thích. Với các kho mã ngôn ngữ động khác, hãy so sánh với hướng dẫn Python.

Phù hợp nhất

  • > Ứng dụng Rails nguyên khối, nơi model, service object, job và concern gọi lẫn nhau qua nhiều thư mục.
  • > Gem và dịch vụ Ruby có namespace module lồng sâu và lớp cơ sở dùng chung.
  • > Các nhóm muốn khoanh vùng thay đổi cùng agent AI trước khi chạm vào một model hoặc service mà nửa ứng dụng phụ thuộc vào.

Workflow agent

  • > Tìm mọi nơi gọi một service object hoặc phương thức model trước khi hành vi của nó thay đổi.
  • > Lần theo nơi một lớp được tạo bằng `.new` và những phương thức chạy sau đó.
  • > Lập bản đồ các lớp kế thừa từ một lớp cơ sở hoặc include một module trước khi refactor.

Chi tiết engine

  • > Hỗ trợ Ruby bao phủ `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` và `Rakefile`. Phương thức singleton được đánh dấu là static, và khai báo `attr_*` được tính là phương thức truy cập.
  • > `ClassName.new` được tính là khởi tạo, và việc xác định kiểu receiver theo dõi phép gán cục bộ và biến instance.
  • > Lời gọi metaprogramming như `define_method` và `send`, helper `T::` của Sorbet và các lời gọi Enumerable phổ biến bị lọc khỏi quan hệ.

Điểm khởi đầu MCP hữu ích

  • find_symbol

    Dùng cho một lớp, module hoặc phương thức có namespace, như `Billing::ChargeCustomer.call`.

  • dependency_search

    Trước khi thay đổi, dùng duyệt theo chiều vào trên một model hoặc service object để thấy nơi gọi và lớp con.

  • text_pattern_search

    Dùng cho đường dẫn `require`, chuỗi route và các phương thức được định nghĩa động mà đồ thị không nhìn thấy.