mirror of
https://github.com/bia-technologies/precommit4onec.git
synced 2024-11-24 08:32:25 +02:00
ORAIS-1430: Ложное срабатывание на инструкцию Перейти
This commit is contained in:
parent
249c071069
commit
19a129d93f
@ -54,25 +54,48 @@
|
||||
Процедура ПроверитьНаОтсутствиеПерейти(ПутьКФайлуМодуля)
|
||||
|
||||
ТекстМодуля = ФайловыеОперации.ПрочитатьТекстФайла(ПутьКФайлуМодуля);
|
||||
|
||||
ТекстОшибки = "";
|
||||
ШаблонПоиска = Новый РегулярноеВыражение("[\s;]+?[^|]Перейти\s+?~[a-zA-ZА-ЯЁа-яё0-9_]+");
|
||||
ШаблонПоиска.Многострочный = Истина;
|
||||
ШаблонПоиска.ИгнорироватьРегистр = Истина;
|
||||
|
||||
Если НЕ ПустаяСтрока(ТекстМодуля) Тогда
|
||||
|
||||
ТекстОшибки = "";
|
||||
ШаблонПоиска = Новый РегулярноеВыражение("[\s;]+?[^|](Перейти\s+?~[a-zA-ZА-ЯЁа-яё0-9_]+)");
|
||||
ШаблонПоиска.Многострочный = Истина;
|
||||
ШаблонПоиска.ИгнорироватьРегистр = Истина;
|
||||
|
||||
Совпадения = ШаблонПоиска.НайтиСовпадения(ТекстМодуля);
|
||||
Если Совпадения.Количество() Тогда
|
||||
|
||||
ТекстОшибки = СтрШаблон(
|
||||
"В файле '%1' обнаружено использование Перейти (%2)",
|
||||
ПутьКФайлуМодуля,
|
||||
Совпадения.Количество());
|
||||
Лог.Ошибка(ТекстОшибки);
|
||||
ВызватьИсключение ТекстОшибки;
|
||||
|
||||
Если Совпадения.Количество() = 0 Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Совпадение = Совпадения[0];
|
||||
Если Совпадение.Группы.Количество() = 0 Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
БлокПерейти = Совпадение.Группы[1].Значение;
|
||||
ПозицияБлока = СтрНайти(Совпадение.Значение, БлокПерейти);
|
||||
|
||||
КавычкиОткрыты = Ложь;
|
||||
ПозицияКавычек = 0;
|
||||
Пока ПозицияКавычек < ПозицияБлока Цикл
|
||||
ПозицияКавычек = СтрНайти(Совпадение.Значение, """", НаправлениеПоиска.СНачала, ПозицияКавычек + 1);
|
||||
Если ПозицияКавычек = 0 ИЛИ ПозицияКавычек > ПозицияБлока Тогда
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
КавычкиОткрыты = НЕ КавычкиОткрыты;
|
||||
КонецЦикла;
|
||||
|
||||
Если КавычкиОткрыты Тогда
|
||||
// Блок Перейти находится внутри строкового значения и не является выражением языка.
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
ТекстОшибки = СтрШаблон(
|
||||
"В файле '%1' обнаружено использование Перейти (%2)",
|
||||
ПутьКФайлуМодуля,
|
||||
Совпадения.Количество());
|
||||
Лог.Ошибка(ТекстОшибки);
|
||||
ВызватьИсключение ТекстОшибки;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
|
52
tests/fixtures/ЗапретИспользованияПерейти/v8config.json
vendored
Normal file
52
tests/fixtures/ЗапретИспользованияПерейти/v8config.json
vendored
Normal file
@ -0,0 +1,52 @@
|
||||
{
|
||||
"Precommt4onecСценарии": {
|
||||
"ИспользоватьСценарииРепозитория": false,
|
||||
"КаталогЛокальныхСценариев": "",
|
||||
"ГлобальныеСценарии": [
|
||||
"ВставкаКопирайтов.os",
|
||||
"ДобавлениеПробеловПередКлючевымиСловами.os",
|
||||
"ЗапретИспользованияПерейти.os",
|
||||
"ИсправлениеНеКаноническогоНаписания.os",
|
||||
"КорректировкаXMLФорм.os",
|
||||
"ОбработкаЮнитТестов.os",
|
||||
"ОтключениеПолнотекстовогоПоиска.os",
|
||||
"ОтключениеРазрешенияИзменятьФорму.os",
|
||||
"ПроверкаДублейПроцедурИФункций.os",
|
||||
"ПроверкаКорректностиИнструкцийПрепроцессора.os",
|
||||
"ПроверкаКорректностиОбластей.os",
|
||||
"ПроверкаНецензурныхСлов.os",
|
||||
"РазборОбычныхФормНаИсходники.os",
|
||||
"РазборОтчетовОбработокРасширений.os",
|
||||
"СинхронизацияОбъектовМетаданныхИФайлов.os",
|
||||
"СортировкаСостава.os",
|
||||
"УдалениеДублейМетаданных.os",
|
||||
"УдалениеЛишнихКонцевыхПробелов.os",
|
||||
"УдалениеЛишнихПустыхСтрок.os"
|
||||
],
|
||||
"ОтключенныеСценарии": [],
|
||||
"Проекты": {
|
||||
"configurator\\": "configurator\\",
|
||||
"EDT\\Configuration\\src\\": "EDT\\Configuration\\src\\",
|
||||
"no_parent_configuration\\": "no_parent_configuration\\"
|
||||
},
|
||||
"НастройкиСценариев": {
|
||||
"ВставкаКопирайтов": {
|
||||
"ИгнорироватьМодулиОбъектовПоставки": true,
|
||||
"ПутьКФайлуКопирайта": "COPYRIGHT",
|
||||
"ИсключаемыеТэги": [
|
||||
"// IMPORT"
|
||||
]
|
||||
},
|
||||
"ОтключениеПолнотекстовогоПоиска": {
|
||||
"МетаданныеДляИсключения": {}
|
||||
},
|
||||
"ПроверкаНецензурныхСлов": {
|
||||
"ФайлСНецензурнымиСловами": "НецензурныеСлова.txt"
|
||||
},
|
||||
"РазборОтчетовОбработокРасширений": {
|
||||
"ИспользоватьНастройкиПоУмолчанию": true,
|
||||
"ВерсияПлатформы": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
9
tests/fixtures/ЗапретИспользованияПерейти/МодульСПерейти.bsl
vendored
Normal file
9
tests/fixtures/ЗапретИспользованияПерейти/МодульСПерейти.bsl
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
|
||||
Процедура ПропуститьБлокВнутриКонструкцииПерейти()
|
||||
Значение = Неопределено;
|
||||
Перейти ~Метка;
|
||||
|
||||
Значение = "Не будет установлено";
|
||||
~Метка:
|
||||
Сообщить(Значение);
|
||||
КонецПроцедуры
|
4
tests/fixtures/ЗапретИспользованияПерейти/МодульСоСтрокой.bsl
vendored
Normal file
4
tests/fixtures/ЗапретИспользованияПерейти/МодульСоСтрокой.bsl
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
|
||||
Функция РекомендацияПоИспользованию()
|
||||
Возврат СтрШаблон("Мы не рекомендуем использовать: %1", "Перейти ~Метка");
|
||||
КонецФункции
|
8
tests/fixtures/ЗапретИспользованияПерейти/МодульСоСтрокой2.bsl
vendored
Normal file
8
tests/fixtures/ЗапретИспользованияПерейти/МодульСоСтрокой2.bsl
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
|
||||
Функция ПримерПлохогоКода()
|
||||
Возврат "Значение = Неопределено;
|
||||
| Перейти ~Метка;
|
||||
| Значение = Ложь;
|
||||
|~Метка:
|
||||
| Значение = Истина";
|
||||
КонецФункции
|
@ -38,6 +38,7 @@
|
||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЗагрузкуСценариевПоИмени");
|
||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьИзменениеТегаКастомизацииФормы");
|
||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийВставкиКопирайтовНеОбновляетКопирайтВФайлахПоставки");
|
||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийЗапретаИспользованияПерейтиНеСрабатываетНаСтроку");
|
||||
|
||||
Возврат ВсеТесты;
|
||||
|
||||
@ -552,6 +553,38 @@
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область ЗапретИспользованияПерейти
|
||||
|
||||
Процедура ТестДолжен_ПроверитьЧтоСценарийЗапретаИспользованияПерейтиНеСрабатываетНаСтроку() Экспорт
|
||||
НачалоЗамера = ТекущаяУниверсальнаяДатаВМиллисекундах();
|
||||
|
||||
ОбъектСценария = ПолучитьСценарий("ЗапретИспользованияПерейти.os");
|
||||
|
||||
ВременныйКаталог = ПолучитьИмяВременногоФайла();
|
||||
Фикстура = Фикстура("ЗапретИспользованияПерейти");
|
||||
СоздатьКаталог(ВременныйКаталог);
|
||||
СкопироватьКаталог(Фикстура, ВременныйКаталог);
|
||||
|
||||
Настройки = ПолучитьДополнительныеНастройки(ВременныйКаталог);
|
||||
МассивФайлов = НайтиФайлы(ВременныйКаталог, "*.bsl", Истина);
|
||||
Для Каждого Файл Из МассивФайлов Цикл
|
||||
ОжидаемыйРезультат = СтрНайти(Файл.Имя, "Перейти") = 0;
|
||||
Попытка
|
||||
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, Настройки);
|
||||
Исключение
|
||||
Результат = Ложь;
|
||||
КонецПопытки;
|
||||
Ожидаем.Что(Результат, "Ошибка проверки запрета использования Перейти в файле " + Файл.Имя).Равно(ОжидаемыйРезультат);
|
||||
КонецЦикла;
|
||||
|
||||
МенеджерВременныхФайлов.УдалитьФайл(ВременныйКаталог);
|
||||
|
||||
ВремяВыполнения = ТекущаяУниверсальнаяДатаВМиллисекундах() - НачалоЗамера;
|
||||
Настройки.Лог.Отладка("Тестирование запрета использования Перейти выполнено за %1 мс.", ВремяВыполнения);
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Служебные
|
||||
|
Loading…
Reference in New Issue
Block a user