Инструмент для оформления кода 1С.
Идея заключается в том, что синтаксически верный код может быть оформлен автоматически по некоторым стандартам. Если оставить переносы строк на усмотрение человека, а остальное на усмотрение машины - можно добиться красивого кода при минимуме затрат.
Ожидаемый эффект от внедрения:
- Единообразный код вне зависимости от среды разработки: Текстовый редактор, Конфигуратор, EDT
- Минимум "мусорных коммитов"
- Киллер-фишка - интеграция с GIT. Оформляем только измененные строки кода, можно до помещения в репозиторий.
Инструмент представляет собой набор плагинов для парсера встроенного языка 1С и скрипт для запуска bslpretty.os.
Плагины:
- Замена неканоничных ключевых слов - заменяет в коде неканоничное написание ключевых слов.
- Оформитель отступов - расставляет отступы в начале строки. Удаляет незначащие символы в конце строки (так не задумано, но пусть пока будет так)
- Оформитель пробелов - расставляет пробелы внутри строки, два и более пробела подряд заменяет на один.
- Выравнивание аргументов - Не знаю как сказать в двух словах. Посмотрите на код до/после в описании плагина, все поймете.
Плагинами можно воспользоваться самостоятельно с помощью osparser или с помощью скрипта bslpretty.os.
Известные проблемы:
- bslpretty.os комбайн и требует рефакторинга:
- Код "Ищет файлы для изменения", "Оформляет код", "Взаимодействует с пользователем" следует разделить. Как минимум можно будет реализовать моногопоточность.
- Вероятно, в плагинах есть пробема вызванная разными форматами переноса строк. Символ переноса строки+символ возврата каретки или просто символ переноса строки.
- Требуется собрать какой-нибудь пакет.
- Проект osparser не развивается и не поддерживает некоторые конструкции вновых платформ. Например, ключевое слово Асинх.
Тем не менее он работает.
Оформляет исходные коды в каталоге или изменения в репозитории GIT. Скрипт не изменяет количество строк в исходнике. Это свойство позволяет применять оформление к только вашим изменениям.
- Склонируйте репозиторий bslpretty
- Перейдите в каталог с корнем репозитория. Например выполнив команду cd c:\git\bslpretty\
- Выполните команду oscript src\bslpretty.os
bslpretty.os git <Каталог> [Коммит] [-y] [--diff] [--plugin-settings]
git - Вызывать команду git diff и оформлять только изменения в файлах *.bsl *.os
Параметры:
<Каталог> - Каталог репозитория
<Коммит> - Коммит с коротого начинается оформление
-y - Отключает интерактивный режим. На все вопросы отвечает "Да"
--diff - Команда сравнения файлов. При интерактивном режиме работы будет вызвана чтобы показать пользователю примененные оформителем изменения
--plugin-settings - Путь к файлу настроек плагинов. По умолчанию <Каталог>\bslpretty.json
bslpretty.os file <Каталог> [Коммит] [-y] [--diff] [--plugin-settings]
file - Оформить все файлы *.bsl *.os в каталоге и подкаталогах
Параметры:
<Каталог> - Каталог для оформления
-y - Отключает интерактивный режим. На все вопросы отвечает "Да"
--diff - Команда сравнения файлов. При интерактивном режиме работы будет вызвана чтобы показать пользователю примененные оформителем изменения.
--plugin-settings - Путь к файлу настроек плагинов. По умолчанию <Каталог>\bslpretty.json
Представляет собой JSON файл. Актуальный пример в \test_data.
Плагин позаимствован из репозитория osparser.
Плагин приводит написание ключевых слов к каноническому виду. Код
ДЛЯ ц=1 по 100500 ЦиКл
Сообщить("!");
Конеццикла;
приводит к виду:
Для ц=1 По 100500 Цикл
Сообщить("!");
КонецЦикла;
Плагин для оформления отступов в исходном коде. Также удаляет не значащие символы в конце строки.
Имеет три параметра
- Отступ - строка - строка из которой состоит отступ. Тапример символ табуляции или 4 пробела
- ПустыеСтрокиСОтступами - Булево - Если истина, то к пустым строкам будет добавлно необходимое количество отступов. В противном случае незначащие символы будут удалены
- РекурсивныеДополнительныеОтступы - Булево - Если длинное выражение содержит в себе вложенные скобки или вызовы функции, занимает больше одной строки, то может быть удобным делать дополнительный отступ для каждого вложения
Следующий код (Отступ = , ПустыеСтроки = Ложь, РекурсивныеДополнительныеОтступы = Ложь; Но в примере это не важно)
Функция Функция1(Парам1,
Парам2)
Результат = Парам1+Парам2*Парам3;
Для ц=1 по 100500 Цикл
Если Результат>Парам3
ИЛИ Результат < Парам2 Тогда
Попытка
Возврат Парам1/Парам2;
Исключение
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"Число %1 нельзя делить на %2", Парам1, Парам2);
КонецПопытки;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
оформляет так
Функция Функция1(Парам1, Парам2)
Результат = Парам1+Парам2*Парам3;
Для ц=1 по 100500 Цикл
Если Результат>Парам3
ИЛИ Результат < Парам2 Тогда
Попытка
Возврат Парам1/Парам2;
Исключение
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"Число %1 нельзя делить на %2", Парам1, Парам2);
КонецПопытки;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Плагин расставляет пробелы между токенами языка и/или удаляет лишние пробелы. Параметров не имеет.
Код:
Функция ДваПлюсДваУмножитьНаДва(Парам1,Парам2)Экспорт
Возврат Парам1+Парам2*Парам3;
КонецФункции
Оформляет так:
Функция ДваПлюсДваУмножитьНаДва(Парам1, Парам2) Экспорт
Возврат Парам1 + Парам2*Парам3;
КонецФункции
Просто посмотрите на пример кода до/после и вы поймете о чем речь.
Плагин имеет параметр
- КоличествоСтрокПодряд - Число - Минимальное количество строк подряд попадающих под шаблон, после которого оформление будет применено.
Код
Стр = новый Структура();
Стр.Вставить("Результат1", п);
Стр.Вставить("Резу", п1);
Стр.Вставить("Рез", п2);
Заменяет на код
Стр = новый Структура();
Стр.Вставить("Результат1", п);
Стр.Вставить("Резу", п1);
Стр.Вставить("Рез", п2);