mirror of
https://github.com/bia-technologies/precommit4onec.git
synced 2024-11-28 08:48:45 +02:00
Merge branch 'feature/canonical' into develop
This commit is contained in:
commit
d4822fc731
@ -46,7 +46,7 @@
|
|||||||
- `ПроверкаКорректностиОбластей` - выполняет проверку на корректность скобок областей: `на парность` и `перед окончание области должно быть ее определение`
|
- `ПроверкаКорректностиОбластей` - выполняет проверку на корректность скобок областей: `на парность` и `перед окончание области должно быть ее определение`
|
||||||
- `ПроверкаДублейПроцедурИФункций` - выполняет поиск одинаковых названий процедур и функций в модуле.
|
- `ПроверкаДублейПроцедурИФункций` - выполняет поиск одинаковых названий процедур и функций в модуле.
|
||||||
- `ОтключениеПолнотекстовогоПоиска` - По умолчанию отключает полнотекстовый поиск в файлах описания метаданных. Имеет настройку для исключения файлов из обработки. Для исключения необходимо указать относительный путь в репозитории до файла описания метаданного. Можно выключать из обработки отдельные реквизиты метаданного, для этого надо задать массив реквизитов в конфигурационном файле.
|
- `ОтключениеПолнотекстовогоПоиска` - По умолчанию отключает полнотекстовый поиск в файлах описания метаданных. Имеет настройку для исключения файлов из обработки. Для исключения необходимо указать относительный путь в репозитории до файла описания метаданного. Можно выключать из обработки отдельные реквизиты метаданного, для этого надо задать массив реквизитов в конфигурационном файле.
|
||||||
|
- `ИсправлениеНеКаноническогоНаписания` - Проверяет модули на каноничность написания ключевых слов и исправляет найденное
|
||||||
## Изменение настроек
|
## Изменение настроек
|
||||||
|
|
||||||
precommit4onec может читать настройки своей работы из специального конфигурационного файла.
|
precommit4onec может читать настройки своей работы из специального конфигурационного файла.
|
||||||
|
@ -146,4 +146,70 @@
|
|||||||
"""
|
"""
|
||||||
И я фиксирую изменения в репозитории "РабочийКаталог" с комментарием "demo коммит"
|
И я фиксирую изменения в репозитории "РабочийКаталог" с комментарием "demo коммит"
|
||||||
Тогда Файл "\src\Документ.mdo" в рабочем каталоге содержит "fullTextSearch>Use<"
|
Тогда Файл "\src\Документ.mdo" в рабочем каталоге содержит "fullTextSearch>Use<"
|
||||||
И Файл "\src\Документ.xml" в рабочем каталоге не содержит "FullTextSearch>Use<"
|
И Файл "\src\Документ.xml" в рабочем каталоге не содержит "FullTextSearch>Use<"
|
||||||
|
|
||||||
|
Сценарий: Прекоммит, анализируя исходники исправляет неканоничкое написание ключевых слов на каноническое
|
||||||
|
Когда Я копирую файл "tests\fixtures\ИсправлениеНеКаноническогоНаписания.bsl" в каталог репозитория "РабочийКаталог"
|
||||||
|
И я выполняю команду "git" с параметрами "add --all"
|
||||||
|
И я выполняю команду "git" с параметрами "commit -m addFile"
|
||||||
|
Тогда Вывод команды "git" содержит """
|
||||||
|
ИНФОРМАЦИЯ - В строке 5 найдено ключевое слово '#область' заменено на '#Область'
|
||||||
|
ИНФОРМАЦИЯ - В строке 7 найдено ключевое слово 'ПЕРЕМ' заменено на 'Перем'
|
||||||
|
ИНФОРМАЦИЯ - В строке 8 найдено ключевое слово 'перем' заменено на 'Перем'
|
||||||
|
ИНФОРМАЦИЯ - В строке 14 найдено ключевое слово '#КонецОБласти' заменено на '#КонецОбласти'
|
||||||
|
ИНФОРМАЦИЯ - В строке 16 найдено ключевое слово '&НаКлиентенаСервере' заменено на '&НаКлиентеНаСервере'
|
||||||
|
ИНФОРМАЦИЯ - В строке 17 найдено ключевое слово 'ПРоцедура' заменено на 'Процедура'
|
||||||
|
ИНФОРМАЦИЯ - В строке 18 найдено ключевое слово 'конецпроцедуры' заменено на 'КонецПроцедуры'
|
||||||
|
ИНФОРМАЦИЯ - В строке 20 найдено ключевое слово '&Насервере' заменено на '&НаСервере'
|
||||||
|
ИНФОРМАЦИЯ - В строке 21 найдено ключевое слово 'процедура' заменено на 'Процедура'
|
||||||
|
ИНФОРМАЦИЯ - В строке 24 найдено ключевое слово '&Наклиенте' заменено на '&НаКлиенте'
|
||||||
|
ИНФОРМАЦИЯ - В строке 25 найдено ключевое слово 'функция' заменено на 'Функция'
|
||||||
|
ИНФОРМАЦИЯ - В строке 26 найдено ключевое слово '#если' заменено на '#Если'
|
||||||
|
ИНФОРМАЦИЯ - В строке 26 найдено ключевое слово '#тогда' заменено на '#Тогда'
|
||||||
|
ИНФОРМАЦИЯ - В строке 26 найдено ключевое слово 'КлиенТ' заменено на 'Клиент'
|
||||||
|
ИНФОРМАЦИЯ - В строке 26 найдено ключевое слово 'сервер' заменено на 'Сервер'
|
||||||
|
ИНФОРМАЦИЯ - В строке 27 найдено ключевое слово 'перейти' заменено на 'Перейти'
|
||||||
|
ИНФОРМАЦИЯ - В строке 28 найдено ключевое слово '#Конецесли' заменено на '#КонецЕсли'
|
||||||
|
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'если' заменено на 'Если'
|
||||||
|
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'тогда' заменено на 'Тогда'
|
||||||
|
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'иначе' заменено на 'Иначе'
|
||||||
|
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'конецесли' заменено на 'КонецЕсли'
|
||||||
|
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'возврат' заменено на 'Возврат'
|
||||||
|
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'и' заменено на 'И'
|
||||||
|
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'не' заменено на 'НЕ'
|
||||||
|
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'истина' заменено на 'Истина'
|
||||||
|
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'ложь' заменено на 'Ложь'
|
||||||
|
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'НеОпределено' заменено на 'Неопределено'
|
||||||
|
ИНФОРМАЦИЯ - В строке 30 найдено ключевое слово 'null' заменено на 'NULL'
|
||||||
|
ИНФОРМАЦИЯ - В строке 32 найдено ключевое слово 'цикл' заменено на 'Цикл'
|
||||||
|
ИНФОРМАЦИЯ - В строке 32 найдено ключевое слово 'пока' заменено на 'Пока'
|
||||||
|
ИНФОРМАЦИЯ - В строке 33 найдено ключевое слово 'прервать' заменено на 'Прервать'
|
||||||
|
ИНФОРМАЦИЯ - В строке 34 найдено ключевое слово 'конеццикла' заменено на 'КонецЦикла'
|
||||||
|
ИНФОРМАЦИЯ - В строке 38 найдено ключевое слово 'иначеЕсли' заменено на 'ИначеЕсли'
|
||||||
|
ИНФОРМАЦИЯ - В строке 39 найдено ключевое слово 'попытка' заменено на 'Попытка'
|
||||||
|
ИНФОРМАЦИЯ - В строке 40 найдено ключевое слово 'новый' заменено на 'Новый'
|
||||||
|
ИНФОРМАЦИЯ - В строке 41 найдено ключевое слово 'исключение' заменено на 'Исключение'
|
||||||
|
ИНФОРМАЦИЯ - В строке 42 найдено ключевое слово 'вызватьИсключение' заменено на 'ВызватьИсключение'
|
||||||
|
ИНФОРМАЦИЯ - В строке 43 найдено ключевое слово 'конецпопытки' заменено на 'КонецПопытки'
|
||||||
|
ИНФОРМАЦИЯ - В строке 47 найдено ключевое слово 'ТолстыйКлиентОбычноеприложение' заменено на 'ТолстыйКлиентОбычноеПриложение'
|
||||||
|
ИНФОРМАЦИЯ - В строке 47 найдено ключевое слово 'толстыйКлиентУправляемоеПриложение' заменено на 'ТолстыйКлиентУправляемоеПриложение'
|
||||||
|
ИНФОРМАЦИЯ - В строке 47 найдено ключевое слово 'Тонкийклиент' заменено на 'ТонкийКлиент'
|
||||||
|
ИНФОРМАЦИЯ - В строке 47 найдено ключевое слово 'вебклиент' заменено на 'ВебКлиент'
|
||||||
|
ИНФОРМАЦИЯ - В строке 47 найдено ключевое слово 'и' заменено на 'И'
|
||||||
|
ИНФОРМАЦИЯ - В строке 47 найдено ключевое слово 'не' заменено на 'НЕ'
|
||||||
|
ИНФОРМАЦИЯ - В строке 51 найдено ключевое слово 'для' заменено на 'Для'
|
||||||
|
ИНФОРМАЦИЯ - В строке 51 найдено ключевое слово 'каждого' заменено на 'Каждого'
|
||||||
|
ИНФОРМАЦИЯ - В строке 51 найдено ключевое слово 'из' заменено на 'Из'
|
||||||
|
ИНФОРМАЦИЯ - В строке 52 найдено ключевое слово 'выполнить' заменено на 'Выполнить'
|
||||||
|
ИНФОРМАЦИЯ - В строке 55 найдено ключевое слово 'по' заменено на 'По'
|
||||||
|
ИНФОРМАЦИЯ - В строке 58 найдено ключевое слово 'добавитьОбработчик' заменено на 'ДобавитьОбработчик'
|
||||||
|
ИНФОРМАЦИЯ - В строке 58 найдено ключевое слово 'Удалитьобработчик' заменено на 'УдалитьОбработчик'
|
||||||
|
ИНФОРМАЦИЯ - В строке 59 найдено ключевое слово 'истина' заменено на 'Истина'
|
||||||
|
ИНФОРМАЦИЯ - В строке 59 найдено ключевое слово 'истина' заменено на 'Истина'
|
||||||
|
ИНФОРМАЦИЯ - В строке 59 найдено ключевое слово 'истина' заменено на 'Истина'
|
||||||
|
ИНФОРМАЦИЯ - В строке 59 найдено ключевое слово 'ложь' заменено на 'Ложь'
|
||||||
|
ИНФОРМАЦИЯ - В строке 60 найдено ключевое слово 'конецфункции' заменено на 'КонецФункции'
|
||||||
|
ИНФОРМАЦИЯ - В строке 62 найдено ключевое слово '&НасерверебезКонтекста' заменено на '&НаСервереБезКонтекста'
|
||||||
|
ИНФОРМАЦИЯ - В строке 68 найдено ключевое слово '&наКлиентеНаСервереБезКонтекста' заменено на '&НаКлиентеНаСервереБезКонтекста'
|
||||||
|
ИНФОРМАЦИЯ - В строке 72 найдено ключевое слово '&наКлиентенаСервере' заменено на '&НаКлиентеНаСервере'
|
||||||
|
"""
|
388
src/СценарииОбработки/ИсправлениеНеКаноническогоНаписания.os
Normal file
388
src/СценарииОбработки/ИсправлениеНеКаноническогоНаписания.os
Normal file
@ -0,0 +1,388 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Служебный модуль с реализацией сценариев обработки файлов
|
||||||
|
// <ИсправлениеНеКаноническогоНаписания>
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
Перем Лог;
|
||||||
|
|
||||||
|
// ИмяСценария
|
||||||
|
// Возвращает имя сценария обработки файлов
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Строка - Имя текущего сценария обработки файлов
|
||||||
|
//
|
||||||
|
Функция ИмяСценария() Экспорт
|
||||||
|
|
||||||
|
Возврат "ИсправлениеНеКаноническогоНаписания";
|
||||||
|
|
||||||
|
КонецФункции // ИмяСценария()
|
||||||
|
|
||||||
|
// ОбработатьФайл
|
||||||
|
// Выполняет обработку файла
|
||||||
|
//
|
||||||
|
// Параметры:
|
||||||
|
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
|
||||||
|
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
|
||||||
|
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
|
||||||
|
// * Лог - Объект - Текущий лог
|
||||||
|
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
|
||||||
|
// * КаталогРепозитория - Строка - Адрес каталога репозитория
|
||||||
|
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
|
||||||
|
// и которые необходимо дообработать
|
||||||
|
//
|
||||||
|
// Возвращаемое значение:
|
||||||
|
// Булево - Признак выполненной обработки файла
|
||||||
|
//
|
||||||
|
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
|
||||||
|
|
||||||
|
Лог = ДополнительныеПараметры.Лог;
|
||||||
|
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда
|
||||||
|
|
||||||
|
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
|
||||||
|
|
||||||
|
Если ИсправитьНаКаноническоеНаписание(АнализируемыйФайл.ПолноеИмя) Тогда
|
||||||
|
|
||||||
|
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Истина;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Ложь;
|
||||||
|
|
||||||
|
КонецФункции // ОбработатьФайл()
|
||||||
|
|
||||||
|
Функция ИсправитьНаКаноническоеНаписание(Знач ИмяФайла)
|
||||||
|
|
||||||
|
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
|
||||||
|
|
||||||
|
Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда
|
||||||
|
|
||||||
|
Возврат Ложь;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Эталоны = Эталоны();
|
||||||
|
КлючевыеСлова = КлючевыеСлова(Эталоны);
|
||||||
|
|
||||||
|
РазбираемоеСодержимоеФайла = СтрЗаменить(СодержимоеФайла, """""", "***ЗАМЕНА_ДВОЙНЫХ_КАВЫЧЕК***");
|
||||||
|
РазбираемоеСодержимоеФайла = СтрЗаменить(РазбираемоеСодержимоеФайла, "://", "***ЗАМЕНА_ЧАСТИ_URL***"); // например, URLСтрока = "http://my.domain.com"
|
||||||
|
НовоеСодержимоеФайла = Новый ТекстовыйДокумент;
|
||||||
|
|
||||||
|
ТекстРазбора = Новый ТекстовыйДокумент;
|
||||||
|
ТекстРазбора.УстановитьТекст(РазбираемоеСодержимоеФайла);
|
||||||
|
ВсегоСтрок = ТекстРазбора.КоличествоСтрок();
|
||||||
|
СтрокаОткрыта = Ложь;
|
||||||
|
|
||||||
|
// символы, которые будут использоваться для нормализации строки
|
||||||
|
ЗаменяемыеСимволы = "; = ( ) , " + Символы.Таб;
|
||||||
|
ЗаменяемыеСимволы = СтрРазделить(ЗаменяемыеСимволы, " ", Истина);
|
||||||
|
// Построчная проверка
|
||||||
|
Для Ит = 1 По ВсегоСтрок Цикл
|
||||||
|
|
||||||
|
СтрокаМодуля = ТекстРазбора.ПолучитьСтроку(Ит);
|
||||||
|
|
||||||
|
// оставим строки, которые обрабатывать не нужно
|
||||||
|
Если ПустаяСтрока(СтрокаМодуля)
|
||||||
|
ИЛИ СтрНачинаетсяС(СокрЛ(СтрокаМодуля), "//") Тогда
|
||||||
|
|
||||||
|
ДобавитьСтрокуСодержимого(НовоеСодержимоеФайла, СтрокаМодуля);
|
||||||
|
|
||||||
|
Продолжить;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
НоваяСтрокаМодуля = СтрокаМодуля;
|
||||||
|
Если НЕ СтрокаОткрыта Тогда
|
||||||
|
|
||||||
|
НоваяСтрокаМодуля = УдалитьКомИКавИзСтроки(НоваяСтрокаМодуля);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
// Вырезаем часть строки в кавычках
|
||||||
|
ПоследняяПозиция = 0;
|
||||||
|
ПозицияКавычек = СтрНайти(НоваяСтрокаМодуля, """");
|
||||||
|
|
||||||
|
НоваяСтрокаМодуля = ВырезатьТекстВКавычках(НоваяСтрокаМодуля, ПозицияКавычек, ПоследняяПозиция, СтрокаОткрыта);
|
||||||
|
|
||||||
|
// ничего интересного не осталось
|
||||||
|
Если СтрокаОткрыта И ПозицияКавычек = 0
|
||||||
|
ИЛИ ПустаяСтрока(НоваяСтрокаМодуля) Тогда
|
||||||
|
ДобавитьСтрокуСодержимого(НовоеСодержимоеФайла, СтрокаМодуля);
|
||||||
|
Продолжить;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
// Проверяем правильное использование каждого ключевого слова
|
||||||
|
ВРегНоваяСтрокаМодуля = НормализоватьСтроку(НоваяСтрокаМодуля, ЗаменяемыеСимволы);
|
||||||
|
|
||||||
|
ДлинаСтроки = СтрДлина(ВРегНоваяСтрокаМодуля);
|
||||||
|
|
||||||
|
Для Каждого ЭлементТаблицы Из КлючевыеСлова Цикл
|
||||||
|
Эталон = ЭлементТаблицы.Наименование;
|
||||||
|
ПозицияЭталона = СтрНайти(ВРегНоваяСтрокаМодуля, " " + Эталон + " ");
|
||||||
|
Если НЕ ПозицияЭталона Тогда
|
||||||
|
Продолжить;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ДлинаЭталона = СтрДлина(Эталон);
|
||||||
|
|
||||||
|
// Нашли ключевое слово, проверяем каноническое написание
|
||||||
|
Пока ПозицияЭталона > 0 Цикл
|
||||||
|
|
||||||
|
СтартоваяПозиция = ПозицияЭталона - 1;
|
||||||
|
Написание = СокрЛП(Сред(СтрокаМодуля, ПозицияЭталона, ДлинаЭталона));
|
||||||
|
|
||||||
|
Если Эталоны.Найти(Написание) = Неопределено Тогда // Ключевое слово написано не канонически
|
||||||
|
|
||||||
|
СтрокаМодуля = Лев(СтрокаМодуля, СтартоваяПозиция)
|
||||||
|
+ ЭлементТаблицы.Значение
|
||||||
|
+ Сред(СтрокаМодуля, СтартоваяПозиция + ДлинаЭталона + 1);
|
||||||
|
|
||||||
|
СтрокаСообщения = СтрШаблон("В строке %1 найдено ключевое слово '%2' заменено на '%3'",
|
||||||
|
Ит, Написание, ЭлементТаблицы.Значение);
|
||||||
|
Лог.Информация(СтрокаСообщения);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ПозицияЭталона = СтрНайти(ВРегНоваяСтрокаМодуля, " " + Эталон + " ", , ПозицияЭталона + ДлинаЭталона);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
ДобавитьСтрокуСодержимого(НовоеСодержимоеФайла, СтрокаМодуля);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Если НовоеСодержимоеФайла.ПолучитьТекст() <> СодержимоеФайла Тогда
|
||||||
|
|
||||||
|
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, НовоеСодержимоеФайла.ПолучитьТекст());
|
||||||
|
Возврат Истина; // переиндексируем
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Ложь;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
|
||||||
|
Функция НормализоватьСтроку(Знач Строка, ЗаменяемыеСимволы)
|
||||||
|
|
||||||
|
Строка = " " + ВРег(Строка) + " ";
|
||||||
|
|
||||||
|
Для Каждого Символ Из ЗаменяемыеСимволы Цикл
|
||||||
|
|
||||||
|
Строка = СтрЗаменить(Строка, Символ, " ");
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат Строка;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Процедура ДобавитьСтрокуСодержимого(НовоеСодержимоеФайла, Знач СтрокаМодуля)
|
||||||
|
|
||||||
|
СтрокаМодуля = СтрЗаменить(СтрокаМодуля, "***ЗАМЕНА_ДВОЙНЫХ_КАВЫЧЕК***", """""");
|
||||||
|
СтрокаМодуля = СтрЗаменить(СтрокаМодуля, "***ЗАМЕНА_ЧАСТИ_URL***", "://");
|
||||||
|
|
||||||
|
НовоеСодержимоеФайла.ДобавитьСтроку(СтрокаМодуля);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Функция ВырезатьТекстВКавычках(Знач СтрокаМодуля, ПозицияКавычек, ПоследняяПозиция, СтрокаОткрыта)
|
||||||
|
|
||||||
|
Пока ПозицияКавычек > 0 Цикл
|
||||||
|
|
||||||
|
Если СтрокаОткрыта Тогда
|
||||||
|
|
||||||
|
// кавычки закрывают строку, вырезаем часть в кавычках
|
||||||
|
СтрокаМодуляВКавычках = Сред(СтрокаМодуля, ПозицияКавычек + 1);
|
||||||
|
СтрокаМодуля = Лев(СтрокаМодуля, ПоследняяПозиция - 1)
|
||||||
|
+ ДополнитьСтроку("", ПозицияКавычек - ПоследняяПозиция + 1, " ")
|
||||||
|
+ СтрокаМодуляВКавычках;
|
||||||
|
СтрокаОткрыта = Ложь;
|
||||||
|
ПоследняяПозиция = 0;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
// позиция кавычек начинают строку
|
||||||
|
ПоследняяПозиция = ПозицияКавычек;
|
||||||
|
СтрокаОткрыта = Истина;
|
||||||
|
СтрокаМодуля = Лев(СтрокаМодуля, ПозицияКавычек - 1) + " " + Сред(СтрокаМодуля, ПозицияКавычек + 1);
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ПозицияКавычек = Найти(СтрокаМодуля, """");
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат СтрокаМодуля;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция УдалитьКомИКавИзСтроки(Знач СтрокаМодуля)
|
||||||
|
|
||||||
|
ПозицияКомментария = СтрНайти(СтрокаМодуля, "//");
|
||||||
|
|
||||||
|
Если ПозицияКомментария > 0 Тогда // есть комментарий
|
||||||
|
ДлинаСтроки = СтрДлина(СтрокаМодуля);
|
||||||
|
ПозицияКавычек = СтрНайти(СтрокаМодуля, """");
|
||||||
|
Если ПозицияКавычек = 0 // нет кавычек, удаляем комментарий
|
||||||
|
ИЛИ ПозицияКавычек > ПозицияКомментария Тогда // кавычки после комментария, удаляем комментарий
|
||||||
|
|
||||||
|
СтрокаМодуля = ДополнитьСтроку(Лев(СтрокаМодуля, ПозицияКомментария - 1), ДлинаСтроки, " ", "Справа");
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
КоличествоКавычекДоКомментария = СтрЧислоВхождений(Лев(СтрокаМодуля, ПозицияКомментария), """");
|
||||||
|
Если КоличествоКавычекДоКомментария % 2 = 0 Тогда // строка открывается и закрывается до комментария, удаляем комментарий
|
||||||
|
|
||||||
|
СтрокаМодуля = ДополнитьСтроку(Лев(СтрокаМодуля, ПозицияКомментария - 1), ДлинаСтроки, " ", "Справа");
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат СтрокаМодуля;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция КлючевыеСлова(Эталоны)
|
||||||
|
|
||||||
|
КлючевыеСлова = Новый ТаблицаЗначений;
|
||||||
|
КлючевыеСлова.Колонки.Добавить("Наименование");
|
||||||
|
КлючевыеСлова.Колонки.Добавить("Значение");
|
||||||
|
Для Каждого Эталон Из Эталоны Цикл
|
||||||
|
|
||||||
|
Если КлючевыеСлова.НайтиСтроки(Новый Структура("Наименование", ВРег(Эталон))).Количество() = 0 Тогда
|
||||||
|
|
||||||
|
СтрокаТаблицы = КлючевыеСлова.Добавить();
|
||||||
|
СтрокаТаблицы.Наименование = ВРег(Эталон);
|
||||||
|
СтрокаТаблицы.Значение = Эталон;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат КлючевыеСлова;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция Эталоны()
|
||||||
|
|
||||||
|
Эталоны = Новый Массив;
|
||||||
|
|
||||||
|
Эталоны.Добавить("Если");
|
||||||
|
Эталоны.Добавить("#Если");
|
||||||
|
Эталоны.Добавить("Тогда");
|
||||||
|
Эталоны.Добавить("#Тогда");
|
||||||
|
Эталоны.Добавить("Иначе");
|
||||||
|
Эталоны.Добавить("#Иначе");
|
||||||
|
Эталоны.Добавить("ИначеЕсли");
|
||||||
|
Эталоны.Добавить("#ИначеЕсли");
|
||||||
|
Эталоны.Добавить("КонецЕсли");
|
||||||
|
Эталоны.Добавить("#КонецЕсли");
|
||||||
|
Эталоны.Добавить("#Область");
|
||||||
|
Эталоны.Добавить("#КонецОбласти");
|
||||||
|
Эталоны.Добавить("Клиент");
|
||||||
|
Эталоны.Добавить("НаКлиенте");
|
||||||
|
Эталоны.Добавить("НаСервере");
|
||||||
|
Эталоны.Добавить("ТолстыйКлиентОбычноеПриложение");
|
||||||
|
Эталоны.Добавить("ТолстыйКлиентУправляемоеПриложение");
|
||||||
|
Эталоны.Добавить("Сервер");
|
||||||
|
Эталоны.Добавить("ВнешнееСоединение");
|
||||||
|
Эталоны.Добавить("ТонкийКлиент");
|
||||||
|
Эталоны.Добавить("ВебКлиент");
|
||||||
|
Эталоны.Добавить("&НаКлиенте");
|
||||||
|
Эталоны.Добавить("&НаСервере");
|
||||||
|
Эталоны.Добавить("&НаСервереБезКонтекста");
|
||||||
|
Эталоны.Добавить("&НаКлиентеНаСервереБезКонтекста");
|
||||||
|
Эталоны.Добавить("&НаКлиентеНаСервере");
|
||||||
|
Эталоны.Добавить("Для");
|
||||||
|
Эталоны.Добавить("Каждого");
|
||||||
|
Эталоны.Добавить("Цикл");
|
||||||
|
Эталоны.Добавить("КонецЦикла");
|
||||||
|
Эталоны.Добавить("Выполнить");
|
||||||
|
Эталоны.Добавить("По");
|
||||||
|
Эталоны.Добавить("Прервать");
|
||||||
|
Эталоны.Добавить("Продолжить");
|
||||||
|
Эталоны.Добавить("Из");
|
||||||
|
Эталоны.Добавить("Новый");
|
||||||
|
Эталоны.Добавить("Перейти");
|
||||||
|
Эталоны.Добавить("Перем");
|
||||||
|
Эталоны.Добавить("Пока");
|
||||||
|
Эталоны.Добавить("Попытка");
|
||||||
|
Эталоны.Добавить("Исключение");
|
||||||
|
Эталоны.Добавить("КонецПопытки");
|
||||||
|
Эталоны.Добавить("ВызватьИсключение");
|
||||||
|
Эталоны.Добавить("Процедура");
|
||||||
|
Эталоны.Добавить("КонецПроцедуры");
|
||||||
|
Эталоны.Добавить("Функция");
|
||||||
|
Эталоны.Добавить("КонецФункции");
|
||||||
|
Эталоны.Добавить("Возврат");
|
||||||
|
Эталоны.Добавить("ДобавитьОбработчик");
|
||||||
|
Эталоны.Добавить("УдалитьОбработчик");
|
||||||
|
Эталоны.Добавить("И");
|
||||||
|
Эталоны.Добавить("ИЛИ");
|
||||||
|
Эталоны.Добавить("НЕ");
|
||||||
|
Эталоны.Добавить("Или");
|
||||||
|
Эталоны.Добавить("Не");
|
||||||
|
Эталоны.Добавить("Истина");
|
||||||
|
Эталоны.Добавить("ИСТИНА");
|
||||||
|
Эталоны.Добавить("Ложь");
|
||||||
|
Эталоны.Добавить("ЛОЖЬ");
|
||||||
|
Эталоны.Добавить("Знач");
|
||||||
|
Эталоны.Добавить("ЗНАЧ");
|
||||||
|
Эталоны.Добавить("Неопределено");
|
||||||
|
Эталоны.Добавить("НЕОПРЕДЕЛЕНО");
|
||||||
|
Эталоны.Добавить("NULL");
|
||||||
|
Эталоны.Добавить("Null");
|
||||||
|
|
||||||
|
Возврат Эталоны;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
// перенесено из строковых ф-ий ибо там ошибка
|
||||||
|
|
||||||
|
Функция СформироватьСтрокуСимволов(Знач Символ, Знач ДлинаСтроки)
|
||||||
|
|
||||||
|
Результат = "";
|
||||||
|
Для Счетчик = 1 По ДлинаСтроки Цикл
|
||||||
|
Результат = Результат + Символ;
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Возврат Результат;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ДополнитьСтроку(Знач Строка, Знач ДлинаСтроки, Знач Символ = "0", Знач Режим = "Слева")
|
||||||
|
|
||||||
|
// Длина символа не должна превышать единицы.
|
||||||
|
Символ = Лев(Символ, 1);
|
||||||
|
|
||||||
|
КоличествоСимволовНадоДобавить = ДлинаСтроки - СтрДлина(Строка);
|
||||||
|
|
||||||
|
Если КоличествоСимволовНадоДобавить > 0 Тогда
|
||||||
|
|
||||||
|
СтрокаДляДобавления = СформироватьСтрокуСимволов(Символ, КоличествоСимволовНадоДобавить);
|
||||||
|
|
||||||
|
Если ВРег(Режим) = "СЛЕВА" Тогда
|
||||||
|
|
||||||
|
Строка = СтрокаДляДобавления + Строка;
|
||||||
|
|
||||||
|
ИначеЕсли ВРег(Режим) = "СПРАВА" Тогда
|
||||||
|
|
||||||
|
Строка = Строка + СтрокаДляДобавления;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Строка;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
74
tests/fixtures/ИсправлениеНеКаноническогоНаписания.bsl
vendored
Normal file
74
tests/fixtures/ИсправлениеНеКаноническогоНаписания.bsl
vendored
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
#Область ХорошихПеременных
|
||||||
|
Перем пер1
|
||||||
|
#КонецОбласти
|
||||||
|
|
||||||
|
#область ПлохихПеременных
|
||||||
|
|
||||||
|
ПЕРЕМ пер1;
|
||||||
|
перем пер3;
|
||||||
|
//ПEрем пер4
|
||||||
|
// ПEрем пер5
|
||||||
|
Перем пер6; //если тут будет текст его не заменит
|
||||||
|
|
||||||
|
|
||||||
|
#КонецОБласти
|
||||||
|
|
||||||
|
&НаКлиентенаСервере
|
||||||
|
ПРоцедура тест()
|
||||||
|
конецпроцедуры
|
||||||
|
|
||||||
|
&Насервере
|
||||||
|
процедура СКомментарием() // Комментарий
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
&Наклиенте
|
||||||
|
функция ТестовыйУжас(ЗНАЧ пар)
|
||||||
|
#если КлиенТ ИЛИ сервер #тогда
|
||||||
|
перейти МеткаВыход :
|
||||||
|
#Конецесли
|
||||||
|
|
||||||
|
если истина тогда Сообщить(не(ложь и null=НеОпределено)); возврат Неопределено; иначе конецесли;
|
||||||
|
|
||||||
|
пока п1 = п2 цикл // если тогда иначе конецесли;
|
||||||
|
прервать;
|
||||||
|
конеццикла;
|
||||||
|
|
||||||
|
Если ИСТИНА Тогда
|
||||||
|
Сообщить();
|
||||||
|
иначеЕсли ЛОЖЬ Тогда
|
||||||
|
попытка
|
||||||
|
Переменная1 = новый Массив;
|
||||||
|
исключение
|
||||||
|
вызватьИсключение "сложно набирать такой код"
|
||||||
|
конецпопытки;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
#Если НЕ вебклиент и не Тонкийклиент ИЛИ ТолстыйКлиентОбычноеприложение ИЛИ толстыйКлиентУправляемоеПриложение ИЛИ ВнешнееСоединение
|
||||||
|
|
||||||
|
#КонецЕсли
|
||||||
|
|
||||||
|
для каждого Элемент из Переменная1 Цикл
|
||||||
|
выполнить("Сообщить(""Привет"")");
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Для i = 1 по 10 Цикл
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Соообщить("тут пример однострочника");добавитьОбработчик Накладная.ПриЗаписи Обработка.ПриЗаписиДокумента;Удалитьобработчик Накладная.ПриЗаписи, Обработка.ПриЗаписиДокумента;
|
||||||
|
Возврат ?(истина=истина,ложь,истина);
|
||||||
|
конецфункции
|
||||||
|
|
||||||
|
&НасерверебезКонтекста
|
||||||
|
Процедура тест(Пар1,
|
||||||
|
Пар2,
|
||||||
|
ЗНАЧ пар3)// Комментарий
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
&наКлиентеНаСервереБезКонтекста
|
||||||
|
Процедура тест() // Комментарий
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
&наКлиентенаСервере
|
||||||
|
Процедура тест() // Комментарий
|
||||||
|
КонецПроцедуры
|
@ -21,7 +21,8 @@
|
|||||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийИмеетМетодПолученияНастроек");
|
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийИмеетМетодПолученияНастроек");
|
||||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаВозвращаетНастройки");
|
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаВозвращаетНастройки");
|
||||||
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийВозвращаетНастройки");
|
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийВозвращаетНастройки");
|
||||||
|
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийИсправлениеНеКаноническогоНаписанияИсправляетФайл");
|
||||||
|
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийИсправлениеНеКаноническогоНаписанияНеИндексируетНеизмененные");
|
||||||
Возврат ВсеТесты;
|
Возврат ВсеТесты;
|
||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
@ -44,6 +45,33 @@
|
|||||||
|
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ТестДолжен_ПроверитьЧтоСценарийИсправлениеНеКаноническогоНаписанияИсправляетФайл() Экспорт
|
||||||
|
|
||||||
|
ОбъектСценария = ПолучитьСценарий("ИсправлениеНеКаноническогоНаписания.os");
|
||||||
|
ИмяФайла = "ИсправлениеНеКаноническогоНаписания.bsl";
|
||||||
|
|
||||||
|
Файл = ПодготовитьИзменяемыйТестовыйФайл(ИмяФайла);
|
||||||
|
|
||||||
|
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
|
||||||
|
Ожидаем.Что(Результат, Истина).ЭтоИстина();
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
Процедура ТестДолжен_ПроверитьЧтоСценарийИсправлениеНеКаноническогоНаписанияНеИндексируетНеизмененные() Экспорт
|
||||||
|
|
||||||
|
ОбъектСценария = ПолучитьСценарий("ИсправлениеНеКаноническогоНаписания.os");
|
||||||
|
ИмяФайла = "ИсправлениеНеКаноническогоНаписания.bsl";
|
||||||
|
|
||||||
|
Файл = ПодготовитьИзменяемыйТестовыйФайл(ИмяФайла);
|
||||||
|
|
||||||
|
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
|
||||||
|
ДопНастройки = ПолучитьДополнительныеНастройки();
|
||||||
|
|
||||||
|
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ДопНастройки);
|
||||||
|
Ожидаем.Что(ДопНастройки.ИзмененныеКаталоги.Количество(), Истина).Равно(0);
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
Процедура ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаИмеетМетодПолученияНастроек() Экспорт
|
Процедура ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаИмеетМетодПолученияНастроек() Экспорт
|
||||||
|
|
||||||
ОбъектСценария = ПолучитьСценарий("ОтключениеПолнотекстовогоПоиска.os");
|
ОбъектСценария = ПолучитьСценарий("ОтключениеПолнотекстовогоПоиска.os");
|
||||||
@ -184,8 +212,20 @@
|
|||||||
Функция ПолучитьДополнительныеНастройки()
|
Функция ПолучитьДополнительныеНастройки()
|
||||||
|
|
||||||
УправлениеНастройками = Новый НастройкиРепозитория(ТекущийКаталог());
|
УправлениеНастройками = Новый НастройкиРепозитория(ТекущийКаталог());
|
||||||
ДополнительныеНастройки = Новый Структура("Лог, УправлениеНастройками", Лог, УправлениеНастройками);
|
ДополнительныеНастройки = Новый Структура("Лог, УправлениеНастройками, ИзмененныеКаталоги",
|
||||||
|
Лог, УправлениеНастройками, Новый Массив);
|
||||||
|
|
||||||
Возврат ДополнительныеНастройки;
|
Возврат ДополнительныеНастройки;
|
||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ПодготовитьИзменяемыйТестовыйФайл(Знач ИмяТестовогоФайла)
|
||||||
|
|
||||||
|
ПутьКТесту = ОбъединитьПути(КаталогТестовыхФикстур(), ИмяТестовогоФайла);
|
||||||
|
ПутьКФайлу = МенеджерВременныхФайлов.СоздатьФайл(ИмяТестовогоФайла);
|
||||||
|
КопироватьФайл(ПутьКТесту, ПутьКФайлу);
|
||||||
|
Файл = Новый Файл(ПутьКФайлу);
|
||||||
|
|
||||||
|
Возврат Файл;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
"ГлобальныеСценарии": [
|
"ГлобальныеСценарии": [
|
||||||
"ДобавлениеПробеловПередКлючевымиСловами.os",
|
"ДобавлениеПробеловПередКлючевымиСловами.os",
|
||||||
"ЗапретИспользованияПерейти.os",
|
"ЗапретИспользованияПерейти.os",
|
||||||
|
"ИсправлениеНеКаноническогоНаписания.os",
|
||||||
"КорректировкаXMLФорм.os",
|
"КорректировкаXMLФорм.os",
|
||||||
"ОтключениеПолнотекстовогоПоиска.os",
|
"ОтключениеПолнотекстовогоПоиска.os",
|
||||||
"ПроверкаДублейПроцедурИФункций.os",
|
"ПроверкаДублейПроцедурИФункций.os",
|
||||||
|
Loading…
Reference in New Issue
Block a user