Підтримка PHP у Maguyva: довгоживучі веб-застосунки без сліпих правок
Актуально, коли кодова база PHP усе ще приносить дохід, але ніхто не хоче, щоб агент вільно імпровізував у ній.
Розширення
.php, .php3, .php4, .php5, +2 ще
Maguyva підтримує Ruby з AST, символами та графом, щоб ШІ-агенти відстежували класи, модулі, синглтон-методи й конструктори в кодових базах Rails і Ruby.
Ruby значною мірою спирається на домовленості й метапрограмування. Методи генеруються через attr_accessor, класи перевідкриваються в інших файлах, а простори імен вкладають модулі на кілька рівнів. Читабельна поверхня приховує, до якого методу насправді доходить виклик, а грубий текстовий пошук повертає кожен call і perform у застосунку.
Maguyva дає агентові класи, модулі, методи та тих, хто їх викликає, як структуру, щоб він простежував зміну по всьому застосунку, а не вгадував.
Maguyva охоплює файли .rb, .rbw, .rake і .gemspec, а також Gemfile і Rakefile. Витягуються методи екземпляра й синглтон-методи (def self.call), причому синглтон-методи позначаються як статичні. Оголошення attr_reader, attr_writer і attr_accessor вважаються методами доступу, а символи кваліфікуються простором імен модуля та класу.
ClassName.new і Namespace::ClassName.new вважаються створенням екземплярів, а типізація отримувачів відстежує локальні присвоєння та @instance_variables, тож виклик на присвоєному об’єкті можна розв’язати в його клас. Граф також фіксує успадкування, підключення модулів, перевизначення, ребра raise і rescue, а також читання й записи.
Виклики метапрограмування (define_method, send, method_missing, class_eval тощо), типові помічники T:: із Sorbet і поширені виклики Enumerable (each, collect, reject тощо) відфільтровуються зі зв’язків, щоб код застосунку було видно.
Billing::ChargeCustomer.call і з яких завдань і контролерів?» (find_symbol, потім dependency_search incoming)ApplicationRecord і підключають Auditable?» (dependency_search)get_task_context)require і load — звичайні виклики методів, тому пресет imports у structural_search нічого не вибирає. Щоб їх перелічити, використовуйте text_pattern_search.define_method або оброблювані method_missing, не витягуються як символи, а такі виклики відфільтровуються як шум метапрограмування.Під’єднайте репозиторій за швидким стартом, потім перегляньте матрицю підтримки на сторінці сумісності. Для інших репозиторіїв на динамічних мовах порівняйте з посібником із мови Python.
Найкраще підходить
Робочі процеси агента
Деталі рушія
Корисні точки входу MCP
Використовуйте для класу, модуля чи методу з простором імен, наприклад `Billing::ChargeCustomer.call`.
Перед зміною використовуйте обхід incoming для моделі чи сервіс-об'єкта, щоб побачити тих, хто викликає, і підкласи.
Використовуйте для шляхів `require`, рядків маршрутів і динамічно визначених методів, яких граф не бачить.
Пов'язані гайди
Актуально, коли кодова база PHP усе ще приносить дохід, але ніхто не хоче, щоб агент вільно імпровізував у ній.
Розширення
.php, .php3, .php4, .php5, +2 ще
Корисно, коли кодові бази Python розкидані по сервісах, скриптах, файлах типів (stub) та операційному «клеї».
Розширення
.py, .pyi, .pyw