1
0
mirror of https://github.com/bia-technologies/precommit4onec.git synced 2024-11-28 08:48:45 +02:00

Правила доработаны для поддержки EDT

This commit is contained in:
Maxmov Valery 2018-09-19 13:43:40 +03:00
parent 1a9261f3f2
commit 1915837812
10 changed files with 251 additions and 61 deletions

View File

@ -25,3 +25,43 @@
Возврат СтрСравнить(Файл.Расширение, ".bsl") = 0; Возврат СтрСравнить(Файл.Расширение, ".bsl") = 0;
КонецФункции КонецФункции
// ЭтоФайлОписанияКонфигурации
// Возвращает истину, если файл является файлом описания конфигурации
// Параметры:
// Файл - Строка - Полный путь к файлу
//
// Возвращаемое значение:
// Булево - Признак
//
Функция ЭтоФайлОписанияКонфигурации(Файл) Экспорт
Если ПустаяСтрока(Файл.Расширение) Тогда
Возврат Ложь;
КонецЕсли;
Возврат СтрСравнить(Файл.Имя, "Configuration.xml") = 0;
КонецФункции
// ЭтоФайлОписанияКонфигурацииEDT
// Возвращает истину, если файл является файлом описания конфигурации в формате EDT
// Параметры:
// Файл - Строка - Полный путь к файлу
//
// Возвращаемое значение:
// Булево - Признак
//
Функция ЭтоФайлОписанияКонфигурацииEDT(Файл) Экспорт
Если ПустаяСтрока(Файл.Расширение) Тогда
Возврат Ложь;
КонецЕсли;
Возврат СтрСравнить(Файл.Имя, "Configuration.mdo") = 0;
КонецФункции

View File

@ -58,7 +58,7 @@
Функция ВставитьНужныеПробелы(Знач ИмяФайла) Функция ВставитьНужныеПробелы(Знач ИмяФайла)
Текст = Новый ЧтениеТекста(); Текст = Новый ЧтениеТекста();
Текст.Открыть(ИмяФайла, "utf-8"); Текст.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM);
СодержимоеФайла = Текст.Прочитать(); СодержимоеФайла = Текст.Прочитать();
Текст.Закрыть(); Текст.Закрыть();
@ -80,7 +80,7 @@
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1 $2$3$4"); СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1 $2$3$4");
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла,,,, Символы.ПС); ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8NoBOM,,, Символы.ПС);
ЗаписьТекста.Записать(СодержимоеФайла); ЗаписьТекста.Записать(СодержимоеФайла);
ЗаписьТекста.Закрыть(); ЗаписьТекста.Закрыть();

View File

@ -54,7 +54,7 @@
Процедура ПроверитьНаОтсутствиеПерейти(ПутьКФайлуМодуля) Процедура ПроверитьНаОтсутствиеПерейти(ПутьКФайлуМодуля)
Текст = Новый ЧтениеТекста(); Текст = Новый ЧтениеТекста();
Текст.Открыть(ПутьКФайлуМодуля, "utf-8"); Текст.Открыть(ПутьКФайлуМодуля, КодировкаТекста.UTF8NoBOM);
ТекстМодуля = Текст.Прочитать(); ТекстМодуля = Текст.Прочитать();
Текст.Закрыть(); Текст.Закрыть();

View File

@ -69,7 +69,7 @@
Функция ОбновитьИндексыЭлементовВФорме(Знач ИмяФайла) Функция ОбновитьИндексыЭлементовВФорме(Знач ИмяФайла)
Текст = Новый ЧтениеТекста(); Текст = Новый ЧтениеТекста();
Текст.Открыть(ИмяФайла, "utf-8"); Текст.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM);
СодержимоеФайла = Текст.Прочитать(); СодержимоеФайла = Текст.Прочитать();
Текст.Закрыть(); Текст.Закрыть();
@ -129,7 +129,7 @@
КонецЦикла; КонецЦикла;
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла,,,, Символы.ПС); ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8NoBOM,,, Символы.ПС);
ЗаписьТекста.Записать(СодержимоеФайла); ЗаписьТекста.Записать(СодержимоеФайла);
ЗаписьТекста.Закрыть(); ЗаписьТекста.Закрыть();

View File

@ -54,7 +54,7 @@
Процедура ПроверитьНаКорректностьОбластей(ПутьКФайлуМодуля) Процедура ПроверитьНаКорректностьОбластей(ПутьКФайлуМодуля)
Текст = Новый ЧтениеТекста(); Текст = Новый ЧтениеТекста();
Текст.Открыть(ПутьКФайлуМодуля, "utf-8"); Текст.Открыть(ПутьКФайлуМодуля, КодировкаТекста.UTF8NoBOM);
ТекстМодуля = Текст.Прочитать(); ТекстМодуля = Текст.Прочитать();
Текст.Закрыть(); Текст.Закрыть();

View File

@ -36,7 +36,7 @@
Лог = ДополнительныеПараметры.Лог; Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария()); НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
Если АнализируемыйФайл.Существует() И ЭтоФайлОписанияКонфигурации(АнализируемыйФайл) Тогда Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлОписанияКонфигурации(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария()); Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
@ -54,18 +54,6 @@
КонецФункции // ОбработатьФайл() КонецФункции // ОбработатьФайл()
Функция ЭтоФайлОписанияКонфигурации(Файл)
Если ПустаяСтрока(Файл.Расширение) Тогда
Возврат Ложь;
КонецЕсли;
Возврат СтрСравнить(Файл.Имя, "Configuration.xml") = 0;
КонецФункции
Функция СинхронизироватьМетаданныеиФайлы(Знач ИмяФайла, УдаленныеФайлы) Функция СинхронизироватьМетаданныеиФайлы(Знач ИмяФайла, УдаленныеФайлы)
Текст = Новый ЧтениеТекста(); Текст = Новый ЧтениеТекста();

View File

@ -36,36 +36,40 @@
Лог = ДополнительныеПараметры.Лог; Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария()); НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
Если АнализируемыйФайл.Существует() И ЭтоФайлОписанияКонфигурации(АнализируемыйФайл) Тогда Если АнализируемыйФайл.Существует() Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария()); Если ТипыФайлов.ЭтоФайлОписанияКонфигурации(АнализируемыйФайл) Тогда
Если ОтсортироватьДеревоМетаданных(АнализируемыйФайл.ПолноеИмя) Тогда Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя); Если ОтсортироватьДеревоМетаданных(АнализируемыйФайл.ПолноеИмя) Тогда
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
КонецЕсли;
Возврат Истина;
ИначеЕсли ТипыФайлов.ЭтоФайлОписанияКонфигурацииEDT(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
Если ОтсортироватьДеревоМетаданныхEDT(АнализируемыйФайл.ПолноеИмя) Тогда
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
КонецЕсли;
Возврат Истина;
КонецЕсли; КонецЕсли;
Возврат Истина;
КонецЕсли; КонецЕсли;
Возврат ЛОЖЬ; Возврат ЛОЖЬ;
КонецФункции // ОбработатьФайл() КонецФункции // ОбработатьФайл()
Функция ЭтоФайлОписанияКонфигурации(Файл)
Если ПустаяСтрока(Файл.Расширение) Тогда
Возврат Ложь;
КонецЕсли;
Возврат СтрСравнить(Файл.Имя, "Configuration.xml") = 0;
КонецФункции
Функция ОтсортироватьДеревоМетаданных(Знач ИмяФайла) Функция ОтсортироватьДеревоМетаданных(Знач ИмяФайла)
Текст = Новый ЧтениеТекста(); Текст = Новый ЧтениеТекста();
@ -142,3 +146,80 @@
Возврат Истина; Возврат Истина;
КонецФункции КонецФункции
Функция ОтсортироватьДеревоМетаданныхEDT(Знач ИмяФайла)
Текст = Новый ЧтениеТекста();
Текст.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM);
СодержимоеФайла = Текст.Прочитать();
Текст.Закрыть();
Регексп = Новый РегулярноеВыражение("(<\/languages>\s*?)([\w\W]*)(<\/mdclass\:Configuration>)");
Регексп.ИгнорироватьРегистр = ИСТИНА;
Регексп.Многострочный = ИСТИНА;
ПодчиненныеМетаданные = Регексп.НайтиСовпадения(СодержимоеФайла);
Если ПодчиненныеМетаданные.Количество() = 0 Тогда
Возврат Ложь;
КонецЕсли;
ИсходнаяСтрока = ПодчиненныеМетаданные[0].Группы[2].Значение;
РегекспМетаданные = Новый РегулярноеВыражение("^\s+<([\w]+)>([a-zA-Z]+\.[а-яa-zA-ZА-Я0-9_]+)<\/[\w]+>");
РегекспМетаданные.ИгнорироватьРегистр = ИСТИНА;
РегекспМетаданные.Многострочный = Истина;
ОбъектыМетаданныхСтроки = РегекспМетаданные.НайтиСовпадения(ИсходнаяСтрока);
ОбъектыМетаданных = Новый СписокЗначений;
ПоследнийТип = "";
ОбъектыТипа = Новый СписокЗначений;
Для Каждого ОбъектМетаданных Из ОбъектыМетаданныхСтроки Цикл
Если ПоследнийТип <> ОбъектМетаданных.Группы[1].Значение Тогда
Если ПоследнийТип <> "" Тогда
ОбъектыМетаданных.Добавить(ОбъектыТипа);
ОбъектыТипа = Новый СписокЗначений;
КонецЕсли;
ПоследнийТип = ОбъектМетаданных.Группы[1].Значение;
КонецЕсли;
ОбъектыТипа.Добавить(ОбъектМетаданных.Группы[0].Значение, ОбъектМетаданных.Группы[2].Значение);
КонецЦикла;
ОбъектыМетаданных.Добавить(ОбъектыТипа);
СтрокаЗамены = "";
Для Каждого ОбъектМетаданных Из ОбъектыМетаданных Цикл
Если НЕ СтрЗаканчиваетсяНа(ОбъектМетаданных.Значение[0].Значение, "subsystems>") Тогда
ОбъектМетаданных.Значение.СортироватьПоПредставлению(НаправлениеСортировки.Возр);
КонецЕсли;
СтрокаЗамены = СтрокаЗамены + ?(ПустаяСтрока(СтрокаЗамены), "", Символы.ПС)
+ СтрСоединить(ОбъектМетаданных.Значение.ВыгрузитьЗначения(), Символы.ПС);
КонецЦикла;
Если СтрСравнить(ИсходнаяСтрока, СтрокаЗамены) = 0 Тогда
Возврат Ложь;
КонецЕсли;
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1" + СокрЛП(СтрокаЗамены) + Символы.ПС + "$3");
ЗаписьТекста = Новый ЗаписьТекста;
ЗаписьТекста.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM);
ЗаписьТекста.Записать(СодержимоеФайла);
ЗаписьТекста.Закрыть();
Возврат Истина;
КонецФункции

View File

@ -36,37 +36,41 @@
Лог = ДополнительныеПараметры.Лог; Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария()); НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
Если АнализируемыйФайл.Существует() И ЭтоФайлОписанияКонфигурации(АнализируемыйФайл) Тогда Если АнализируемыйФайл.Существует() Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария()); Если ТипыФайлов.ЭтоФайлОписанияКонфигурации(АнализируемыйФайл) Тогда
Если ОтсортироватьДеревоМетаданных(АнализируемыйФайл.ПолноеИмя) Тогда
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя); Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
Если УдалитьДублиВМетаданных(АнализируемыйФайл.ПолноеИмя) Тогда
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
КонецЕсли;
Возврат Истина;
ИначеЕсли ТипыФайлов.ЭтоФайлОписанияКонфигурацииEDT(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
Если УдалитьДублиВМетаданныхEDT(АнализируемыйФайл.ПолноеИмя) Тогда
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
КонецЕсли;
Возврат Истина;
КонецЕсли; КонецЕсли;
Возврат Истина;
КонецЕсли; КонецЕсли;
Возврат ЛОЖЬ; Возврат ЛОЖЬ;
КонецФункции // ОбработатьФайл() КонецФункции // ОбработатьФайл()
Функция ЭтоФайлОписанияКонфигурации(Файл) Функция УдалитьДублиВМетаданных(Знач ИмяФайла)
Если ПустаяСтрока(Файл.Расширение) Тогда
Возврат Ложь;
КонецЕсли;
Возврат СтрСравнить(Файл.Имя, "Configuration.xml") = 0;
КонецФункции
Функция ОтсортироватьДеревоМетаданных(Знач ИмяФайла)
Текст = Новый ЧтениеТекста(); Текст = Новый ЧтениеТекста();
Текст.Открыть(ИмяФайла, "utf-8"); Текст.Открыть(ИмяФайла, "utf-8");
@ -143,3 +147,80 @@
Возврат Истина; Возврат Истина;
КонецФункции КонецФункции
Функция УдалитьДублиВМетаданныхEDT(Знач ИмяФайла)
Текст = Новый ЧтениеТекста();
Текст.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM);
СодержимоеФайла = Текст.Прочитать();
Текст.Закрыть();
Регексп = Новый РегулярноеВыражение("(<\/languages>\s*?)([\w\W]*)(<\/mdclass\:Configuration>)");
Регексп.ИгнорироватьРегистр = Истина;
Регексп.Многострочный = Истина;
ПодчиненныеМетаданные = Регексп.НайтиСовпадения(СодержимоеФайла);
Если ПодчиненныеМетаданные.Количество() = 0 Тогда
Возврат Ложь;
КонецЕсли;
ИсходнаяСтрока = ПодчиненныеМетаданные[0].Группы[2].Значение;
РегекспМетаданные = Новый РегулярноеВыражение("^\s+<([\w]+)>([a-zA-Z]+\.[а-яa-zA-ZА-Я0-9_]+)<\/[\w]+>");
РегекспМетаданные.ИгнорироватьРегистр = Истина;
РегекспМетаданные.Многострочный = Истина;
ОбъектыМетаданныхСтроки = РегекспМетаданные.НайтиСовпадения(ИсходнаяСтрока);
ОбъектыМетаданных = Новый ТаблицаЗначений;
ОбъектыМетаданных.Колонки.Добавить("ТипМетаданных");
ОбъектыМетаданных.Колонки.Добавить("ИмяМетаданных");
ОбъектыМетаданных.Колонки.Добавить("СтрокаФайла");
ОбъектыМетаданных.Колонки.Добавить("Количество");
Для Каждого ОбъектМетаданных Из ОбъектыМетаданныхСтроки Цикл
НоваяЗапись = ОбъектыМетаданных.Добавить();
НоваяЗапись.ТипМетаданных = ОбъектМетаданных.Группы[1].Значение;
НоваяЗапись.ИмяМетаданных = ОбъектМетаданных.Группы[2].Значение;
НоваяЗапись.СтрокаФайла = ОбъектМетаданных.Группы[0].Значение;
НоваяЗапись.Количество = 1;
КонецЦикла;
ОбъектыМетаданных.Свернуть("ТипМетаданных, ИмяМетаданных, СтрокаФайла", "Количество");
ОбъектыМетаданных.Сортировать("Количество УБЫВ");
СтрокаЗамены = ИсходнаяСтрока;
Пока ОбъектыМетаданных.Количество() Цикл
Если ОбъектыМетаданных[0].Количество = 1 Тогда
Прервать;
КонецЕсли;
ПозНачало = СтрНайти(СтрокаЗамены, ОбъектыМетаданных[0].СтрокаФайла);
СтрокаЗамены = Лев(СтрокаЗамены, ПозНачало - 1) + Сред(СтрокаЗамены, ПозНачало + СтрДлина(ОбъектыМетаданных[0].СтрокаФайла) + 1);
ОбъектыМетаданных[0].Количество = ОбъектыМетаданных[0].Количество - 1;
Если ОбъектыМетаданных[0].Количество = 1 Тогда
ОбъектыМетаданных.Удалить(0);
КонецЕсли;
КонецЦикла;
Если СтрСравнить(ИсходнаяСтрока, СтрокаЗамены) = 0 Тогда
Возврат Ложь;
КонецЕсли;
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1" + СокрЛП(СтрокаЗамены) + Символы.ПС + "$3");
ЗаписьТекста = Новый ЗаписьТекста;
ЗаписьТекста.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM);
ЗаписьТекста.Записать(СодержимоеФайла);
ЗаписьТекста.Закрыть();
Возврат Истина;
КонецФункции

View File

@ -57,7 +57,7 @@
Функция ИсправитьКонцевыеПробелы(Знач ИмяФайла) Функция ИсправитьКонцевыеПробелы(Знач ИмяФайла)
Текст = Новый ЧтениеТекста(); Текст = Новый ЧтениеТекста();
Текст.Открыть(ИмяФайла, "utf-8"); Текст.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM);
СодержимоеФайла = Текст.Прочитать(); СодержимоеФайла = Текст.Прочитать();
Текст.Закрыть(); Текст.Закрыть();
@ -79,7 +79,7 @@
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1"); СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1");
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла,,,, Символы.ПС); ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8NoBOM,,, Символы.ПС);
ЗаписьТекста.Записать(СодержимоеФайла); ЗаписьТекста.Записать(СодержимоеФайла);
ЗаписьТекста.Закрыть(); ЗаписьТекста.Закрыть();

View File

@ -57,7 +57,7 @@
Функция УдалитьЛишниеПустыеСтроки(Знач ИмяФайла) Функция УдалитьЛишниеПустыеСтроки(Знач ИмяФайла)
Текст = Новый ЧтениеТекста(); Текст = Новый ЧтениеТекста();
Текст.Открыть(ИмяФайла, "utf-8"); Текст.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM);
СодержимоеФайла = Текст.Прочитать(); СодержимоеФайла = Текст.Прочитать();
Текст.Закрыть(); Текст.Закрыть();
@ -73,7 +73,7 @@
НовоеСодержимоеФайла = РегекспОчистка.Заменить(СодержимоеФайла, Символы.ПС); НовоеСодержимоеФайла = РегекспОчистка.Заменить(СодержимоеФайла, Символы.ПС);
Если СтрСравнить(СодержимоеФайла, НовоеСодержимоеФайла) <> 0 Тогда Если СтрСравнить(СодержимоеФайла, НовоеСодержимоеФайла) <> 0 Тогда
ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, ,,, Символы.ПС); ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8NoBOM,,, Символы.ПС);
ЗаписьТекста.Записать(НовоеСодержимоеФайла); ЗаписьТекста.Записать(НовоеСодержимоеФайла);
ЗаписьТекста.Закрыть(); ЗаписьТекста.Закрыть();
Возврат Истина; Возврат Истина;