Наверняка каждый 1С-ник сталкивался с ситуацией, когда код модуля со временем превращается в нечто, напоминающее непроходимые джунгли. Приведение кода в порядок — довольно трудоемкая рутина, поэтому многие часто на это "забивают". Тем более, что заказчики редко предъявляют требования к тому, как их требования должны быть реализованы внутри. В итоге, в мире 1С-разработки довольно много неаккуратных модулей и кода, который читать — настоящее испытание.
Выкладываю свой инструмент «Оформлятор модулей 1С», который позволяет автоматизировать эту рутину. Что умеет:
1. Автоматически расставляет стандартные области ОбработчикиСобытий, СлужебныеПроцедурыИФункции и т.д. Можно сформировать структуру модуля вручную — для этого есть простой интерфейс.
2. Генерирует комментарии к методам с помощью ИИ
Останется лишь поправить, если что-то не так.
3. Извлекает из кода полезную информацию
Например, графы вызовов, обращения к полям и т.д.
Реализован в виде расширения, которое можно подключить к любой конфигурации.
Типовой сценарий использования:
- Копирование модуля из Конфигуратора 1С (или из EDT): открыть нужный модуль, Ctrl + A, затем Ctrl + C.
- Разбор модуля в «Оформляторе»:
- В инструменте выбрать «Добавить модуль» → «Из текста».
- Вставить скопированный текст (Ctrl + V).
- Нажать «Разобрать».
- Расстановка областей: меню «Действия» → «Расстановка областей».
- Генерация документации для методов (если требуется):
- Клик правой кнопкой на области «ПрограммныйИнтерфейс» → «Документирование (с настройкой)...» → «Генерировать описание».
- Проверить описание, при необходимости внести правки и сохранить.
- Формирование итогового текста модуля: «Действия» → «Сформировать тексты модулей...».
- Копирование результата обратно в Конфигуратор.
Демонстрация:
Таймкоды:
Как работает «Оформлятор»
1. Код разбирается в сравнительно простую структуру (дерево структуры модуля, ее описание есть прямо в коде решения).
2. Эта структура или ее части обрабатываются обработками-компонентами Оформлятора (например, обработка расстановки областей — добавляет в дерево области, раскидывает по ним методы).
3. Из получившейся структуры собирается оформленный текст модуля.
Можно разрабатывать свои компоненты. Их подключение похоже на механизм подключаемых команд в БСП (в видео-демонстрации выше разобран подробный пример).
Какие еще есть возможности
Основное назначение «Оформлятора» — форматтер. Но изначально проект задумывался как инструмент для работы с кодом как с данными. Причем сравнительно простой, и написанный на чистом 1С. Т.е. доступный для доработки любому 1С-нику. И для анализа кода в нем есть:
- Анализ модуля. Функция, которая принимает текст, и выдает
- таблицу (граф) вызовов — локальных, стандартных методов платформы, общих модулей и модулей менеджера, обработчики оповещения и т.д.,
- таблицу используемых полей (переменных модуля, реквизитов и т.д.).
- таблицу создаваемых объектов (конструкцией "Новый ...").
- Полноценный парсер втроенного языка. Обработки из проекта bsparser (автор - Александр, спасибо ему за его разработку). Это хорошо документированный инструмент (см. описание на GitHub по ссылке), который умеет токенизировать код, строить абстрактное синтаксическое дерево. Структура довольно сложная, но позволяет глубоко анализировать код. Также в bsparser есть возможность реализовать обход этого дерева подключаемым "плагином" (реализация паттерна "Посетитель"). Одна беда — проект некоторое время назад забросили. Но в моем форке добавлена поддержка актуальных конструкций языка 1С.
Если у вас возникнут задачи по обработке кода — Оформлятор можно брать за основу. Я, например, эти инструменты использовал
- при переносе части функционала одной конфигурации в другую,
- поиске битых вызовов после обновления конфигурации.
Другие форматтеры для 1С
- Расстановка отступов в Конфигураторе (Shift + Alt + F) :)
- Обработка от 1С "Автоформатирование кода и локализация" (доступна здесь).
- Статический анализатор кода проектов. Не совсем форматтер, но тоже есть возможности оформления. Также основан на bsparser.
Как возник проект
Расскажу как родилась идея проекта. Когда-то пришлось пилить массивный модуль для интеграции 1С с одной известной государственной информационной системой — ВетИС. Кроме меня в проекте учавствовали также другие разработчики, которые тоже должны были работать с этим модулем.
Когда очередь дошла до наведения порядка (задокументировать программный интерфейс, логично организовать структуру модулей и т.д.), понял, что эта рутина выше моих сил, и нужно ее как-то автоматизировать. И хотя по времени в итоге вышло дольше (неделя или две на первоначальную разработку против одного-двух дней ручной работы), зато теперь этот инструмент экономит уйму сил.
Попробуйте, проект на GitHub, установить и начать использовать очень просто. Если возникнет желание поучаствовать в его развитии – будет вообще замечательно, он открыт для контрибьюторов. Сделаем мир код 1С-ных доработок лучше!
Тестировалось на платформе 8.3.24.1342.