Skip to content

stopa85milk/bslpretty

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

67 Commits
 
 
 
 
 
 
 
 

Repository files navigation

bslpretty

Инструмент для оформления кода 1С.

Идея заключается в том, что синтаксически верный код может быть оформлен автоматически по некоторым стандартам. Если оставить переносы строк на усмотрение человека, а остальное на усмотрение машины - можно добиться красивого кода при минимуме затрат.

Ожидаемый эффект от внедрения:

  • Единообразный код вне зависимости от среды разработки: Текстовый редактор, Конфигуратор, EDT
  • Минимум "мусорных коммитов"
  • Киллер-фишка - интеграция с GIT. Оформляем только измененные строки кода, можно до помещения в репозиторий.

Инструмент представляет собой набор плагинов для парсера встроенного языка 1С и скрипт для запуска bslpretty.os.

Плагины:

  • Замена неканоничных ключевых слов - заменяет в коде неканоничное написание ключевых слов.
  • Оформитель отступов - расставляет отступы в начале строки. Удаляет незначащие символы в конце строки (так не задумано, но пусть пока будет так)
  • Оформитель пробелов - расставляет пробелы внутри строки, два и более пробела подряд заменяет на один.
  • Выравнивание аргументов - Не знаю как сказать в двух словах. Посмотрите на код до/после в описании плагина, все поймете.

Плагинами можно воспользоваться самостоятельно с помощью osparser или с помощью скрипта bslpretty.os.

Известные проблемы:

  • bslpretty.os комбайн и требует рефакторинга:
    • Код "Ищет файлы для изменения", "Оформляет код", "Взаимодействует с пользователем" следует разделить. Как минимум можно будет реализовать моногопоточность.
  • Вероятно, в плагинах есть пробема вызванная разными форматами переноса строк. Символ переноса строки+символ возврата каретки или просто символ переноса строки.
  • Требуется собрать какой-нибудь пакет.
  • Проект osparser не развивается и не поддерживает некоторые конструкции вновых платформ. Например, ключевое слово Асинх.

Тем не менее он работает.

bslpretty.os

Оформляет исходные коды в каталоге или изменения в репозитории GIT. Скрипт не изменяет количество строк в исходнике. Это свойство позволяет применять оформление к только вашим изменениям.

Использование

  1. Склонируйте репозиторий bslpretty
  2. Перейдите в каталог с корнем репозитория. Например выполнив команду cd c:\git\bslpretty\
  3. Выполните команду 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);

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published