Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Добавил генератор json-схемы, ну и обновил json-схему соответственно #644

Merged
merged 7 commits into from
Nov 13, 2024
183 changes: 183 additions & 0 deletions tools/json-schema-generator.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
#Использовать ".."
#Использовать cmdline
#Использовать ibcmdrunner
#Использовать asserts

Перем Парсер, ИнформацияОПараметрахПоУмолчанию; // BSLLS:MissingVariablesDescription-off

Функция Конструктор()
ШаблонСхемы = Новый Соответствие;

ШаблонСхемы.Вставить("$schema", "http://json-schema.org/draft-07/schema");
ШаблонСхемы.Вставить("id", "https://github.com/vanessa-opensource/vanessa-runner");
ШаблонСхемы.Вставить("title", "Vanessa-runner settings json-schema");
ШаблонСхемы.Вставить("description", "Схема json-файла c настройками для Vanessa-runner");
ШаблонСхемы.Вставить("type", "object");
ШаблонСхемы.Вставить("additionalProperties", Ложь);
ШаблонСхемы.Вставить("properties", Новый Соответствие);

Возврат ШаблонСхемы;
КонецФункции

Процедура НачальнаяИнициализацияПроекта()
СистемнаяИнформация = Новый СистемнаяИнформация;
ПараметрыСистемы.ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0;
МенеджерКомандПриложения.РегистраторКоманд(ПараметрыСистемы);
Парсер = Новый ПарсерАргументовКоманднойСтроки();
МенеджерКомандПриложения.ЗарегистрироватьКоманды(Парсер);
КонецПроцедуры

Функция ИнформацияПоКомандам()

ИнформацияПоКомандам = Новый Соответствие;

СписокКоманд = Парсер.СправкаВозможныеКоманды();
ИнформацияОПараметрахПоУмолчанию = Новый Соответствие;
Для каждого ИнформацияОКоманде Из СписокКоманд Цикл
СхемаКоманды = Новый Соответствие;
СхемаКоманды.Вставить("id", СтрШаблон("/properties/%1", Нрег(ИнформацияОКоманде.Команда)));
СхемаКоманды.Вставить("description", ИнформацияОКоманде.Пояснение);
СхемаКоманды.Вставить("type", "object");
СхемаКоманды.Вставить("additionalProperties", Ложь);
СхемаКоманды.Вставить("properties", ИнформацияПоПараметрамКоманды(ИнформацияОКоманде));

ИнформацияПоКомандам.Вставить(ИнформацияОКоманде.Команда, СхемаКоманды);

КонецЦикла;

// BSLLS-off
ИнформацияПоКомандам.Вставить("default", Новый Структура("description, id, type, properties",
"Default settings",
"/properties/default",
"object",
ИнформацияОПараметрахПоУмолчанию));

ИнформацияПоКомандам.Вставить("$schema", Новый Структура("default, description, id, type",
"vanessa-runner-schema.json",
"Path of vanessa-runner-schema.json.",
"/properties/$schema",
"string"));
// BSLLS-on
Возврат ИнформацияПоКомандам;
КонецФункции

Функция ИнформацияПоПараметрамКоманды(ИнформацияОКоманде)
ПараметрыКоманды = Новый Соответствие;
Для каждого Параметр Из ИнформацияОКоманде.Параметры Цикл
ПараметрыКоманды.Вставить(Параметр.Имя, СтруктураСвойствПараметра(Параметр, ИнформацияОКоманде.Команда));
Если ЭтоПараметрПоУмолчанию(Параметр.Имя) Тогда
ИнформацияОПараметрахПоУмолчанию.Вставить(Параметр.Имя, СтруктураСвойствПараметра(Параметр, "default"));
КонецЕсли;
КонецЦикла;

Возврат ПараметрыКоманды;
КонецФункции

Функция СтруктураСвойствПараметра(Параметр, ИмяКоманды)
СтруктураСвойствПараметра = Новый Структура;

СтруктураСвойствПараметра.Вставить("description", Параметр.Пояснение);
СтруктураСвойствПараметра.Вставить("id", СтрШаблон("/properties/%1/%2", // BSLLS:NestedFunctionInParameters-off
НРег(ИмяКоманды),
НРег(Параметр.Имя)));
СтруктураСвойствПараметра.Вставить("title", СтрШаблон("The %1 Schema", Параметр.Имя));
Если Параметр.ЭтоКоллекция Тогда
СтруктураСвойствПараметра.Вставить("type", "array"); // BSLLS:DuplicateStringLiteral-off
СтруктураЭлементовМассива = Новый Структура;
СтруктураЭлементовМассива.Вставить("uniqueItems", Истина);
СтруктураЭлементовМассива.Вставить("type", ?(Параметр.ЭтоФлаг, "boolean", "string"));
СтруктураЭлементовМассива.Вставить("id", СтрШаблон("/properties/%1/%2/items", // BSLLS:NestedFunctionInParameters-off
НРег(ИмяКоманды),
НРег(Параметр.Имя)));
Если НРег(Параметр.Имя) = "--mode" И НРег(ИмяКоманды) = "syntax-check" Тогда
СтруктураЭлементовМассива.Вставить("oneOf", ИнформацияПоМодамСинтаксКонтроля());
Иначе
СтруктураЭлементовМассива.Вставить("default", ?(Параметр.ЭтоФлаг, Ложь, ""));
КонецЕсли;
СтруктураСвойствПараметра.Вставить("items", СтруктураЭлементовМассива);
Иначе
СтруктураСвойствПараметра.Вставить("type", ?(Параметр.ЭтоФлаг, "boolean", "string"));
СтруктураСвойствПараметра.Вставить("default", ?(Параметр.ЭтоФлаг, Ложь, ""));
КонецЕсли;
Возврат СтруктураСвойствПараметра;
КонецФункции

Функция ИнформацияПоМодамСинтаксКонтроля() // BSLLS:Typo-off
МассивПравилЗаполненияМодов = Новый Массив;
СтруктураПаттернаРасширения = Новый Структура("pattern, description, example",
"-Extension .+",
"-Extension <Имя расширения>",
"-Extension ИмяРасширения");
МассивПравилЗаполненияМодов.Добавить(СтруктураПаттернаРасширения);

МассивМодов = Новый Массив;
МассивМодов.Добавить("-ConfigLogIntegrity");
МассивМодов.Добавить("-IncorrectReferences");
МассивМодов.Добавить("-ThinClient");
МассивМодов.Добавить("-WebClient");
МассивМодов.Добавить("-MobileClient");
МассивМодов.Добавить("-MobileAppClient");
МассивМодов.Добавить("-Server");
МассивМодов.Добавить("-MobileAppServer");
МассивМодов.Добавить("-MobileClientStandalone");
МассивМодов.Добавить("-ExternalConnection");
МассивМодов.Добавить("-ExternalConnectionServer");
МассивМодов.Добавить("-ThickClientManagedApplication");
МассивМодов.Добавить("-ThickClientServerManagedApplication");
МассивМодов.Добавить("-ThickClientOrdinaryApplication");
МассивМодов.Добавить("-ThickClientServerOrdinaryApplication");
МассивМодов.Добавить("-DistributiveModules");
МассивМодов.Добавить("-UnreferenceProcedures");
МассивМодов.Добавить("-HandlersExistence");
МассивМодов.Добавить("-EmptyHandlers");
МассивМодов.Добавить("-ExtendedModulesCheck");
МассивМодов.Добавить("-CheckUseModality");
МассивМодов.Добавить("-CheckUseSynchronousCalls");
МассивМодов.Добавить("-UnsupportedFunctional");
МассивМодов.Добавить("-MobileClientDigiSign");
МассивМодов.Добавить("-AllExtensions");

СтруктураПеречисленияВариантовМодов = Новый Структура("enum", МассивМодов);

МассивПравилЗаполненияМодов.Добавить(СтруктураПеречисленияВариантовМодов);

Возврат МассивПравилЗаполненияМодов;
КонецФункции
Функция ЭтоПараметрПоУмолчанию(ИмяПараметра)
artbear marked this conversation as resolved.
Show resolved Hide resolved
МассивПараметровПоУмолчанию = Новый Массив;
МассивПараметровПоУмолчанию.Добавить("--db-pwd");
МассивПараметровПоУмолчанию.Добавить("--db-user");
МассивПараметровПоУмолчанию.Добавить("--ibconnection");
МассивПараметровПоУмолчанию.Добавить("--ibcmd");
МассивПараметровПоУмолчанию.Добавить("--dbms-pwd");
МассивПараметровПоУмолчанию.Добавить("--dbms-user");
МассивПараметровПоУмолчанию.Добавить("--dbms-type");
МассивПараметровПоУмолчанию.Добавить("--dbms-base");
МассивПараметровПоУмолчанию.Добавить("--dbms-server");
МассивПараметровПоУмолчанию.Добавить("--ordinaryapp");
МассивПараметровПоУмолчанию.Добавить("--root");
МассивПараметровПоУмолчанию.Добавить("--v8version");
МассивПараметровПоУмолчанию.Добавить("--locale");
МассивПараметровПоУмолчанию.Добавить("--language");
МассивПараметровПоУмолчанию.Добавить("--uccode");
МассивПараметровПоУмолчанию.Добавить("--settings");
МассивПараметровПоУмолчанию.Добавить("--debuglogfile");
МассивПараметровПоУмолчанию.Добавить("--debuglog");
МассивПараметровПоУмолчанию.Добавить("--nocacheuse");
МассивПараметровПоУмолчанию.Добавить("--additional");
МассивПараметровПоУмолчанию.Добавить("--workspace");

Возврат Не МассивПараметровПоУмолчанию.Найти(ИмяПараметра) = Неопределено;
КонецФункции

НачальнаяИнициализацияПроекта();

Схема = Конструктор();

Схема.Вставить("properties", ИнформацияПоКомандам());

ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
ЗаписьJSON.ОткрытьФайл("vanessa-runner-schema.json",,Ложь,ПараметрыЗаписиJSON);

Check notice on line 181 in tools/json-schema-generator.os

View check run for this annotation

sonar.openbsl.ru qa-bot / Vanessa-Runner Sonarqube Results

tools/json-schema-generator.os#L181

Справа от ',' не хватает пробела

Check notice on line 181 in tools/json-schema-generator.os

View check run for this annotation

sonar.openbsl.ru qa-bot / Vanessa-Runner Sonarqube Results

tools/json-schema-generator.os#L181

Справа от ',' не хватает пробела

Check notice on line 181 in tools/json-schema-generator.os

View check run for this annotation

sonar.openbsl.ru qa-bot / Vanessa-Runner Sonarqube Results

tools/json-schema-generator.os#L181

Справа от ',' не хватает пробела
ЗаписатьJSON(ЗаписьJSON, Схема);
ЗаписьJSON.Закрыть();
Loading
Loading