mirror of
https://github.com/bia-technologies/precommit4onec.git
synced 2025-05-13 21:56:37 +02:00
Merge branch 'feature/ORAIS-1430' into 'develop'
ORAIS-1430: Ложное срабатывание на инструкцию Перейти Closes ORAIS-1430 See merge request orais/precommit1C-fork-bia!64
This commit is contained in:
commit
2564cfd6de
@ -54,16 +54,41 @@
|
|||||||
Процедура ПроверитьНаОтсутствиеПерейти(ПутьКФайлуМодуля)
|
Процедура ПроверитьНаОтсутствиеПерейти(ПутьКФайлуМодуля)
|
||||||
|
|
||||||
ТекстМодуля = ФайловыеОперации.ПрочитатьТекстФайла(ПутьКФайлуМодуля);
|
ТекстМодуля = ФайловыеОперации.ПрочитатьТекстФайла(ПутьКФайлуМодуля);
|
||||||
|
Если НЕ ПустаяСтрока(ТекстМодуля) Тогда
|
||||||
|
|
||||||
ТекстОшибки = "";
|
ТекстОшибки = "";
|
||||||
ШаблонПоиска = Новый РегулярноеВыражение("[\s;]+?[^|]Перейти\s+?~[a-zA-ZА-ЯЁа-яё0-9_]+");
|
ШаблонПоиска = Новый РегулярноеВыражение("[\s;]+?[^|](Перейти\s+?~[a-zA-ZА-ЯЁа-яё0-9_]+)");
|
||||||
ШаблонПоиска.Многострочный = Истина;
|
ШаблонПоиска.Многострочный = Истина;
|
||||||
ШаблонПоиска.ИгнорироватьРегистр = Истина;
|
ШаблонПоиска.ИгнорироватьРегистр = Истина;
|
||||||
|
|
||||||
Если НЕ ПустаяСтрока(ТекстМодуля) Тогда
|
|
||||||
|
|
||||||
Совпадения = ШаблонПоиска.НайтиСовпадения(ТекстМодуля);
|
Совпадения = ШаблонПоиска.НайтиСовпадения(ТекстМодуля);
|
||||||
Если Совпадения.Количество() Тогда
|
Если Совпадения.Количество() = 0 Тогда
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Совпадение = Совпадения[0];
|
||||||
|
Если Совпадение.Группы.Количество() = 0 Тогда
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
БлокПерейти = Совпадение.Группы[1].Значение;
|
||||||
|
ПозицияБлока = СтрНайти(Совпадение.Значение, БлокПерейти);
|
||||||
|
|
||||||
|
КавычкиОткрыты = Ложь;
|
||||||
|
ПозицияКавычек = 0;
|
||||||
|
Пока ПозицияКавычек < ПозицияБлока Цикл
|
||||||
|
ПозицияКавычек = СтрНайти(Совпадение.Значение, """", НаправлениеПоиска.СНачала, ПозицияКавычек + 1);
|
||||||
|
Если ПозицияКавычек = 0 ИЛИ ПозицияКавычек > ПозицияБлока Тогда
|
||||||
|
Прервать;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КавычкиОткрыты = НЕ КавычкиОткрыты;
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Если КавычкиОткрыты Тогда
|
||||||
|
// Блок Перейти находится внутри строкового значения и не является выражением языка.
|
||||||
|
Возврат;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
ТекстОшибки = СтрШаблон(
|
ТекстОшибки = СтрШаблон(
|
||||||
"В файле '%1' обнаружено использование Перейти (%2)",
|
"В файле '%1' обнаружено использование Перейти (%2)",
|
||||||
@ -74,6 +99,4 @@
|
|||||||
|
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
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…
x
Reference in New Issue
Block a user