1
0
mirror of https://github.com/bia-technologies/precommit4onec.git synced 2026-06-19 21:44:57 +02:00

#ONECICD-414

Добавление скрипта для проверки директив компиляции
This commit is contained in:
Суфьянов Артем Ильдарович
2021-02-15 06:29:03 +03:00
parent a8299dc65b
commit 11c44e2fe5
@@ -0,0 +1,125 @@
///////////////////////////////////////////////////////////////////////////////
//
// Служебный модуль с реализацией сценариев обработки файлов <ПроверкаКорректностиОбластей>
//
///////////////////////////////////////////////////////////////////////////////
Перем Лог;
// ИмяСценария
// Возвращает имя сценария обработки файлов
//
// Возвращаемое значение:
// Строка - Имя текущего сценария обработки файлов
//
Функция ИмяСценария() Экспорт
Возврат "ПроверкаКорректностиДирективКомпиляции";
КонецФункции // ИмяСценария()
// ОбработатьФайл
// Выполняет обработку файла
//
// Параметры:
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
// * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
// и которые необходимо дообработать
//
// Возвращаемое значение:
// Булево - Признак выполненной обработки файла
//
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария());
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
ПроверитьНаКорректностьДиректив(АнализируемыйФайл.ПолноеИмя);
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции // ОбработатьФайл()
Процедура ПроверитьНаКорректностьДиректив(ПутьКФайлуМодуля)
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ПутьКФайлуМодуля);
ТекстРазбора = Новый ТекстовыйДокумент;
ТекстРазбора.УстановитьТекст(СодержимоеФайла);
ВсегоСтрок = ТекстРазбора.КоличествоСтрок();
Для Ит = 1 По ВсегоСтрок Цикл
СтрокаМодуля = СокрЛ(ТекстРазбора.ПолучитьСтроку(Ит));
Если Не ПустаяСтрока(СтрокаМодуля) Тогда
Если СтрНачинаетсяС(СтрокаМодуля, "#") И Не СтрНачинаетсяС(СтрокаМодуля, "#Область")
ИЛИ СтрНачинаетсяС(СтрокаМодуля, "&") Тогда
СтрокаМодуля = Прав(СтрокаМодуля, СтрДлина(СтрокаМодуля)-1);
МассивПодстрок = СтрРазделить(СтрокаМодуля, " ", Ложь);
Для Каждого Директива Из МассивПодстрок Цикл
НайтиВСпискеКлючевыхСлов(Директива);
ТекстОшибки = СтрШаблон("В файле '%1' ошибки в написании директивы в строке '%2': '%3'",
ПутьКФайлуМодуля, Ит, СтрокаМодуля);
Лог.Ошибка(ТекстОшибки);
ВызватьИсключение ТекстОшибки;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция НайтиВСпискеКлючевыхСлов(Директива)
МассивКлючевыхСлов = Новый Массив();
МассивКлючевыхСлов.Добавить("Если");
МассивКлючевыхСлов.Добавить("Тогда");
МассивКлючевыхСлов.Добавить("ИначеЕсли");
МассивКлючевыхСлов.Добавить("Иначе");
МассивКлючевыхСлов.Добавить("КонецЕсли");
МассивКлючевыхСлов.Добавить("НаКлиенте");
МассивКлючевыхСлов.Добавить("НаСервере");
МассивКлючевыхСлов.Добавить("МобильноеПриложениеКлиент");
МассивКлючевыхСлов.Добавить("МобильноеПриложениеСервер");
МассивКлючевыхСлов.Добавить("ТолстыйКлиентОбычноеПриложение");
МассивКлючевыхСлов.Добавить("ТолстыйКлиентУправляемоеПриложение");
МассивКлючевыхСлов.Добавить("ВнешнееСоединение");
МассивКлючевыхСлов.Добавить("ТонкийКлиент");
МассивКлючевыхСлов.Добавить("ВебКлиент");
МассивКлючевыхСлов.Добавить("КонецОбласти");
МассивКлючевыхСлов.Добавить("И");
МассивКлючевыхСлов.Добавить("ИЛИ");
МассивКлючевыхСлов.Добавить("НЕ");
Если МассивКлючевыхСлов.Найти(Директива) Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции