Рецепты
Рефакторинг метода
Цель — переименовать экспортный метод общего модуля и не сломать ни один вызов. Сначала граф вызовов, включая неявные связи 1С, потом поиск ссылок, затем переименование с каскадом по модулям и проверка.
Предпосылки
- Метод в вашем модуле, открытом для изменения. В примерах —
CommonModule.<Модуль>::<Метод>, новое имя —<НовоеИмя>. - Методы модулей, закрытых поставщиком, не переименовывайте: вызовы в поставке не обновятся при следующем обновлении конфигурации.
- Действует ключ или бесплатный доступ.
Шаги
1. Снапшот
{ "operation": "create", "label": "до переименования <Метод>" }2. Кто вызывает метод
{
"project": "УТ2020",
"target": "CommonModule.<Модуль>::<Метод>",
"operation": "callers",
"depth": 2
}Граф показывает не только прямые вызовы. Отдельными видами рёбер отмечены:
implicit— привязка в метаданных: подписка на событие, регламентное задание, HTTP-сервис, событие или команда формы;hook— перехват&Перед,&После,&Вместоиз расширения;string— имя метода в строке:ОписаниеОповещения,ВыполнитьВФоне, выражения СКД. Такие места переименование не обновит — их нужно проверить руками.
Если вызывающих нет, секция Checked перечисляет, где именно искали.
3. Все ссылки
{
"operation": "references",
"project": "УТ2020",
"target": "CommonModule.<Модуль>::<Метод>"
}Ответ делится на #### certain (N) — точные ссылки, которые обновит переименование, — и #### possible (N) — текстовые совпадения в строках и метапрограммировании, которые нужно посмотреть человеку.
4. Переименовать
{
"project": "УТ2020",
"module_fqn": "CommonModule.<Модуль>",
"operation": "rename_method",
"method": "<Метод>",
"new_name": "<НовоеИмя>"
}Объявление и вызовы обновляются во всех открытых проектах, включая расширения. В ответе — поля old_name, new_name, число изменённых файлов files_changed и обновлённых ссылок references_updated. Предпросмотра у переименования нет: оно меняет несколько файлов сразу, поэтому снапшот на шаге 1 обязателен.
5. Разобрать possible
Для каждой строки из possible на шаге 3 откройте место через code_read с операцией method и при необходимости поправьте строку через code_write с операцией edit.
Проверка
code_graphсtarget: "CommonModule.<Модуль>::<НовоеИмя>"— те же вызывающие, что были у старого имени.searchс операциейtextиquery: "<Метод>"— старое имя осталось только там, где это задумано.validateсproject: "УТ2020"— нет новых ошибок. Для чистой картины сначалаproject_actionс операциейclean, затемvalidateсcheckers: ["edt-builtin"].
Откат
{ "operation": "restore", "snapshot_id": "<идентификатор снапшота из шага 1>" }snapshot_read с операцией diff и тем же идентификатором показывает все изменённые модули до отката.