From 438d76a12255751d8cd5fbb6deed2ece1e44899a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D1=83=D1=84=D1=8C=D1=8F=D0=BD=D0=BE=D0=B2=20=D0=90?= =?UTF-8?q?=D1=80=D1=82=D0=B5=D0=BC=20=D0=98=D0=BB=D1=8C=D0=B4=D0=B0=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B8=D1=87?= Date: Mon, 1 Mar 2021 17:43:35 +0300 Subject: [PATCH] #ONECICD-414 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Правка замечаний --- features/КомандаВыполнениеСценариев.feature | 4 +- .../ПроверкаКорректностиДирективКомпиляции.os | 48 +++++++++---------- ...ПроверкаКорректностиДирективКомпиляции.bsl | 20 +++++++- ...роверкаКорректностиДирективКомпиляции2.bsl | 6 ++- 4 files changed, 50 insertions(+), 28 deletions(-) diff --git a/features/КомандаВыполнениеСценариев.feature b/features/КомандаВыполнениеСценариев.feature index 2ca36b3..01ddac1 100644 --- a/features/КомандаВыполнениеСценариев.feature +++ b/features/КомандаВыполнениеСценариев.feature @@ -63,12 +63,12 @@ Сценарий: Прекоммит вывел ошибку о некорректных директивах компиляции Когда Я копирую файл "tests\fixtures\ПроверкаКорректностиДирективКомпиляции.bsl" в каталог репозитория "РабочийКаталог" И я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os exec-rules <РабочийКаталог> -source-dir ." - Тогда Вывод команды "oscript" содержит "ошибки в написании директивы в строке" + Тогда Вывод команды "oscript" содержит "ошибка в написании директивы" Сценарий: Прекоммит вывел ошибку о некорректных директивах компиляции Когда Я копирую файл "tests\fixtures\ПроверкаКорректностиДирективКомпиляции2.bsl" в каталог репозитория "РабочийКаталог" И я выполняю команду "oscript" с параметрами "<КаталогПроекта>/src/main.os exec-rules <РабочийКаталог> -source-dir ." - Тогда Вывод команды "oscript" содержит "ошибки в парности условий" + Тогда Вывод команды "oscript" содержит "ошибки в парности директив #Если и #КонецЕсли." Сценарий: Прекоммит использует локальные настройки репозитория вместо глобальных Когда Я копирую каталог "localscenario" из каталога "tests\fixtures" проекта в рабочий каталог diff --git a/src/СценарииОбработки/ПроверкаКорректностиДирективКомпиляции.os b/src/СценарииОбработки/ПроверкаКорректностиДирективКомпиляции.os index 4f980b4..d239d4c 100644 --- a/src/СценарииОбработки/ПроверкаКорректностиДирективКомпиляции.os +++ b/src/СценарииОбработки/ПроверкаКорректностиДирективКомпиляции.os @@ -53,6 +53,8 @@ Процедура ПроверитьНаКорректностьДиректив(ПутьКФайлуМодуля) + МассивКлючевыхСлов = ПолучитьМассивДиректив(); + СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ПутьКФайлуМодуля); ТекстРазбора = Новый ТекстовыйДокумент; @@ -65,12 +67,12 @@ СовпаденияПоКолличеству = ШаблонПоиска.НайтиСовпадения(СодержимоеФайла); - ШаблонПоиска = Новый РегулярноеВыражение("#Если([\W\w]+?)#КонецЕсли"); + ШаблонПоиска = Новый РегулярноеВыражение("^\s?#Если([\W\w]+?)^\s?#КонецЕсли"); СовпаденияПоСтруктуре = ШаблонПоиска.НайтиСовпадения(СодержимоеФайла); Если СовпаденияПоКолличеству.Количество() <> СовпаденияПоСтруктуре.Количество() * 2 Тогда - ТекстОшибки = СтрШаблон("В файле '%1' ошибки в парности условий", ПутьКФайлуМодуля); + ТекстОшибки = СтрШаблон("В файле '%1' ошибки в парности директив #Если и #КонецЕсли.", ПутьКФайлуМодуля); Лог.Ошибка(ТекстОшибки); ВызватьИсключение ТекстОшибки; @@ -80,35 +82,33 @@ СтрокаМодуля = СокрЛ(ТекстРазбора.ПолучитьСтроку(Ит)); - Если Не ПустаяСтрока(СтрокаМодуля) Тогда + Если ПустаяСтрока(СтрокаМодуля) ИЛИ Не СтрНачинаетсяС(СтрокаМодуля, "#") ИЛИ СтрНачинаетсяС(СтрокаМодуля, "#Область") Тогда - Если СтрНачинаетсяС(СтрокаМодуля, "#") И Не СтрНачинаетсяС(СтрокаМодуля, "#Область") Тогда - - СтрокаМодуля = Прав(СтрокаМодуля, СтрДлина(СтрокаМодуля) - 1); - - МассивПодстрок = СтрРазделить(СтрокаМодуля, " ()", Ложь); - - Для Каждого Директива Из МассивПодстрок Цикл - - Если Не НайтиВСпискеКлючевыхСлов(Директива) Тогда - - ТекстОшибки = СтрШаблон("В файле '%1' ошибки в написании директивы в строке '%2': '%3'", ПутьКФайлуМодуля, Ит, СтрокаМодуля); - Лог.Ошибка(ТекстОшибки); - ВызватьИсключение ТекстОшибки; - - КонецЕсли; - - КонецЦикла; - - КонецЕсли; + Продолжить; КонецЕсли; + + СтрокаМодуля = Прав(СтрокаМодуля, СтрДлина(СтрокаМодуля) - 1); + МассивПодстрок = СтрРазделить(СтрокаМодуля, " ()", Ложь); + + Для Каждого Директива Из МассивПодстрок Цикл + + Если МассивКлючевыхСлов.Найти(Директива) = Неопределено Тогда + + ТекстОшибки = СтрШаблон("В файле '%1' ошибка в написании директивы '%2' в строке '%3'", ПутьКФайлуМодуля, Директива, Ит); + Лог.Ошибка(ТекстОшибки); + ВызватьИсключение ТекстОшибки; + + КонецЕсли; + + КонецЦикла; + КонецЦикла; КонецПроцедуры -Функция НайтиВСпискеКлючевыхСлов(Директива) +Функция ПолучитьМассивДиректив() МассивКлючевыхСлов = Новый Массив(); @@ -133,7 +133,7 @@ МассивКлючевыхСлов.Добавить("ИЛИ"); МассивКлючевыхСлов.Добавить("НЕ"); - Возврат Не МассивКлючевыхСлов.Найти(Директива) = Неопределено; + Возврат МассивКлючевыхСлов; КонецФункции diff --git a/tests/fixtures/ПроверкаКорректностиДирективКомпиляции.bsl b/tests/fixtures/ПроверкаКорректностиДирективКомпиляции.bsl index 9a1549b..29b6759 100644 --- a/tests/fixtures/ПроверкаКорректностиДирективКомпиляции.bsl +++ b/tests/fixtures/ПроверкаКорректностиДирективКомпиляции.bsl @@ -9,4 +9,22 @@ #ИНАЧЕЕсли ТолстыйКлиентУправляемоеПриложениюю -#ИНАЧЕЕсли (ТолстыйКлиентУправляемоеПриложениюю и ТолстыйКлиентОбычноеПриложение) \ No newline at end of file +#ИНАЧЕЕсли (ТолстыйКлиентУправляемоеПриложениюю и ТолстыйКлиентОбычноеПриложение) + +#Если (МобильноеПриложениеКлиент ИЛИ МобильноеПриложениеСервер Тогда) +#ИначеЕсли (ТолстыйКлиентОбычноеПриложение ИЛИ НЕ ТолстыйКлиентУправляемоеПриложение) +#Иначе +#КонецЕсли + +#Если НаКлиент ИЛИ НаСервер +#КонецЕсли + + +#Если Сервере ИЛИ НЕ Клиенте +#КонецЕсли + +#Область СлужебныеПроцедурыИФункции +&ВнешнееСоединение +&ТонкийКлиент +&ВебКлиент +#КонецОбласти \ No newline at end of file diff --git a/tests/fixtures/ПроверкаКорректностиДирективКомпиляции2.bsl b/tests/fixtures/ПроверкаКорректностиДирективКомпиляции2.bsl index 367261c..198d5bd 100644 --- a/tests/fixtures/ПроверкаКорректностиДирективКомпиляции2.bsl +++ b/tests/fixtures/ПроверкаКорректностиДирективКомпиляции2.bsl @@ -18,4 +18,8 @@ #Иначе -#КонецЕсли \ No newline at end of file +#КонецЕсли + +Процедура КнопкаВыполнитьНажатие(Кнопка) + // Вставить содержимое обработчика. +КонецПроцедуры \ No newline at end of file