Поддержка 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 разрастаются по сервисам, скриптам, тайп-стабам и эксплуатационному связующему коду.
Расширения
.py, .pyi, .pyw