1
0
mirror of https://github.com/bia-technologies/precommit4onec.git synced 2025-01-18 02:58:35 +02:00

#ARCH-1838

- Добавлено правило проверки корректности областей
This commit is contained in:
Maxmov Valery 2018-07-12 11:55:13 +03:00
parent b0e15c1823
commit 51bf93ccb1
2 changed files with 107 additions and 0 deletions

View File

@ -0,0 +1,106 @@
///////////////////////////////////////////////////////////////////////////////
//
// Служебный модуль с реализацией сценариев обработки файлов <ПроверкаКорректностиОбластей>
//
///////////////////////////////////////////////////////////////////////////////
Перем Лог;
// ИмяСценария
// Возвращает имя сценария обработки файлов
//
// Возвращаемое значение:
// Строка - Имя текущего сценария обработки файлов
//
Функция ИмяСценария() Экспорт
Возврат "ПроверкаКорректностиОбластей";
КонецФункции // ИмяСценария()
// ОбработатьФайл
// Выполняет обработку файла
//
// Параметры:
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
// * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария
// и которые необходимо дообработать
//
// Возвращаемое значение:
// Булево - Признак выполненной обработки файла
//
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
ПроверитьНаКорректностьОбластей(АнализируемыйФайл.ПолноеИмя);
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции // ОбработатьФайл()
Процедура ПроверитьНаКорректностьОбластей(ПутьКФайлуМодуля)
Текст = Новый ЧтениеТекста();
Текст.Открыть(ПутьКФайлуМодуля, "utf-8");
ТекстМодуля = Текст.Прочитать();
Текст.Закрыть();
ТекстОшибки = "";
ШаблонПоиска = Новый РегулярноеВыражение("^[\t ]*?#[\t ]*?(?:(?:Область[\t ]+?([a-zA-Zа-яА-Я0-9_]+?))|(?:КонецОбласти))[\t ]*?$");
ШаблонПоиска.Многострочный = Истина;
ШаблонПоиска.ИгнорироватьРегистр = Истина;
Если НЕ ПустаяСтрока(ТекстМодуля) Тогда
Совпадения = ШаблонПоиска.НайтиСовпадения(ТекстМодуля);
Если Совпадения.Количество() % 2 <> 0 Тогда // простое сравнение
ТекстОшибки = СтрШаблон("В файле '%1' нарушена парность скобок областей", ПутьКФайлуМодуля);
Лог.Ошибка(ТекстОшибки);
ВызватьИсключение ТекстОшибки;
Иначе
Открыта = 0;
Для Каждого Совпадение Из Совпадения Цикл
Если ЗначениеЗаполнено(Совпадение.Группы[1].Значение) Тогда // имя области
Открыта = Открыта + 1;
Иначе
Открыта = Открыта - 1;
КонецЕсли;
Если Открыта < 0 Тогда
ТекстОшибки = СтрШаблон("В файле '%1' нарушена последовательность скобок областей", ПутьКФайлуМодуля);
Лог.Ошибка(ТекстОшибки);
ВызватьИсключение ТекстОшибки;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры

View File

@ -6,6 +6,7 @@
"ДобавлениеПробеловПередКлючевымиСловами.os",
"ЗапретИспользованияПерейти.os",
"КорректировкаXMLФорм.os",
"ПроверкаКорректностиОбластей.os",
"РазборОбычныхФормНаИсходники.os",
"РазборОтчетовОбработокРасширений.os",
"СинхронизацияОбъектовМетаданныхИФайлов.os",