Назначение
Переименовывает объект и обновляет все ссылки на него в проекте. Сначала показывает план изменений, затем применяет с подтверждением.
Алгоритм
Шаг 0 — Найди объекты и уточни у пользователя
Шаг 0.1 — Найди все объекты с таким именем
Запусти dry-run без --object-file и проверь stderr на код выхода 2 (несколько объектов):
python3 .claude/skills/xbsl-rename/scripts/rename.py \
--old-name <СтароеИмя> --new-name <НовоеИмя> --root <корень-проекта> 2>&1; echo "EXIT:$?"
- Код выхода 0 или 1 — объект один или не найден, продолжай.
- Код выхода 2 — найдено несколько объектов. Покажи пользователю список из stderr и спроси какой переименовать. После выбора передавай
--object-file <путь>во все последующие вызовы.
Шаг 0.2 — Определи представления автоматически
Не спрашивай пользователя о представлениях. Определяй самостоятельно:
- Новое представление (
--new-presentation): - Если пользователь явно написал представление в запросе — используй его.
- Иначе — выведи форму единственного числа из нового технического имени (
--new-name) самостоятельно, используя знание русской морфологии. -
Примеры:
Склады→Склад,Контрагенты→Контрагент,МестаХранения→Место хранения. -
Старое представление (
--old-presentation): - Аналогично выведи форму единственного числа из старого технического имени (
--old-name). - Примеры:
МестаХранения→Место хранения,ЗаказыКлиентов→Заказ клиента.
Почему единственное число: технические имена объектов используются во множественном числе (
Склады,Контрагенты), а полеПредставление/Заголовокотображается для одного объекта в UI — поэтому единственное число.
Шаг 1 — Dry-run (показать план)
python3 .claude/skills/xbsl-rename/scripts/rename.py \
--old-name <СтароеИмя> --new-name <НовоеИмя> \
--new-presentation "<НовоеПредставление>" \
[--old-presentation "<СтароеПредставление>"] \
[--object-file <путь-к-файлу-объекта>] \
--root <корень-проекта>
Скрипт выводит:
- список файлов для переименования (сам объект + .xbsl + файлы форм СтароеИмяФорма*.yaml)
- список файлов с текстовыми заменами (с указанием изменённых строк)
Шаг 2 — Показать план пользователю и ОСТАНОВИТЬСЯ
Отобрази вывод dry-run пользователю и завершить свой ответ. Не выполнять --apply в этом же ходу.
Задай вопрос с тремя вариантами ответа:
Применить переименование? 1. Да 2. Показать список изменяемых файлов 3. Нет
Обработка ответов: - «1» / «да» / «применяй» / «yes» → перейти к Шагу 3 - «2» / «список» / «покажи файлы» → вывести только список файлов (без строк изменений) и снова задать вопрос с тремя вариантами - «3» / «нет» / «отмена» → отменить, ничего не применять - Если пользователь попросил изменить параметры — скорректировать план и вернуться к Шагу 1
Шаг 3 — Применить (только после подтверждения пользователя)
python3 .claude/skills/xbsl-rename/scripts/rename.py \
--old-name <СтароеИмя> --new-name <НовоеИмя> \
--new-presentation "<НовоеПредставление>" \
[--old-presentation "<СтароеПредставление>"] \
[--object-file <путь-к-файлу-объекта>] \
--root <корень-проекта> --apply
Что заменяется
| Паттерн | Пример |
|---|---|
| Тип реквизита | Номенклатура.Ссылка? → Товары.Ссылка? |
| Тип в форме | ФормаОбъекта<Номенклатура.Объект> → ФормаОбъекта<Товары.Объект> |
| Ссылка на форму в интерфейсе | Форма: НоменклатураФормаОбъекта → Форма: ТоварыФормаОбъекта |
| Имя объекта | Имя: Номенклатура → Имя: Товары |
| Составное имя формы | НоменклатураФормаОбъекта → ТоварыФормаОбъекта (в тексте и именах файлов) |
| XBSL-код | Номенклатура = Номенклатура (в обработчиках регистров и т.д.) |
Аргументы скрипта
| Аргумент | Описание |
|---|---|
--old-name |
Текущее имя объекта (обязательно) |
--new-name |
Новое техническое имя объекта (обязательно) |
--new-presentation |
Человекочитаемое представление для полей Представление/Заголовок (напр. "Места хранения"). Если не задано — используется --new-name |
--old-presentation |
Старое представление объекта (напр. "Место хранения" для МестаХранения). Нужно когда техническое имя и его представление расходятся — скрипт заменит точное совпадение этой строки в полях Заголовок/Представление |
--object-file |
Путь к файлу переименуемого объекта (относительно --root). Обязателен если в проекте несколько объектов с именем --old-name. Только для этого объекта и его форм меняются поля Заголовок/Представление |
--root |
Корень проекта (по умолчанию .) |
--apply |
Применить изменения (без флага — dry-run) |
Ошибки
- Объект не найден: скрипт выводит ошибку и завершается с кодом 1
- Несколько проектов: скрипт обрабатывает все найденные проекты внутри
--root