Skip to content

Commit 7f0dc81

Browse files
Segate-ekbartbear
andauthored
Добавил генератор json-схемы, ну и обновил json-схему соответственно (#644)
* Добавил генератор схемы и обновленную схему * Добавил данные о схеме * Рефакторинг генератора схемы. * фикс дефолтных настроек * Фикс параметров списка * отступ между методами * Убрал фильтр для дефолтных параметров --------- Co-authored-by: Artur Ayukhanov <[email protected]>
1 parent 70cc903 commit 7f0dc81

File tree

2 files changed

+9635
-837
lines changed

2 files changed

+9635
-837
lines changed

tools/json-schema-generator.os

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
#Использовать ".."
2+
#Использовать cmdline
3+
#Использовать ibcmdrunner
4+
#Использовать asserts
5+
6+
Перем Парсер, ИнформацияОПараметрахПоУмолчанию; // BSLLS:MissingVariablesDescription-off
7+
8+
Функция Конструктор()
9+
ШаблонСхемы = Новый Соответствие;
10+
11+
ШаблонСхемы.Вставить("$schema", "http://json-schema.org/draft-07/schema");
12+
ШаблонСхемы.Вставить("id", "https://github.com/vanessa-opensource/vanessa-runner");
13+
ШаблонСхемы.Вставить("title", "Vanessa-runner settings json-schema");
14+
ШаблонСхемы.Вставить("description", "Схема json-файла c настройками для Vanessa-runner");
15+
ШаблонСхемы.Вставить("type", "object");
16+
ШаблонСхемы.Вставить("additionalProperties", Ложь);
17+
ШаблонСхемы.Вставить("properties", Новый Соответствие);
18+
19+
Возврат ШаблонСхемы;
20+
КонецФункции
21+
22+
Процедура НачальнаяИнициализацияПроекта()
23+
СистемнаяИнформация = Новый СистемнаяИнформация;
24+
ПараметрыСистемы.ЭтоWindows = Найти(ВРег(СистемнаяИнформация.ВерсияОС), "WINDOWS") > 0;
25+
МенеджерКомандПриложения.РегистраторКоманд(ПараметрыСистемы);
26+
Парсер = Новый ПарсерАргументовКоманднойСтроки();
27+
МенеджерКомандПриложения.ЗарегистрироватьКоманды(Парсер);
28+
КонецПроцедуры
29+
30+
Функция ИнформацияПоКомандам()
31+
32+
ИнформацияПоКомандам = Новый Соответствие;
33+
34+
СписокКоманд = Парсер.СправкаВозможныеКоманды();
35+
ИнформацияОПараметрахПоУмолчанию = Новый Соответствие;
36+
Для каждого ИнформацияОКоманде Из СписокКоманд Цикл
37+
СхемаКоманды = Новый Соответствие;
38+
СхемаКоманды.Вставить("id", СтрШаблон("/properties/%1", Нрег(ИнформацияОКоманде.Команда)));
39+
СхемаКоманды.Вставить("description", ИнформацияОКоманде.Пояснение);
40+
СхемаКоманды.Вставить("type", "object");
41+
СхемаКоманды.Вставить("additionalProperties", Ложь);
42+
СхемаКоманды.Вставить("properties", ИнформацияПоПараметрамКоманды(ИнформацияОКоманде));
43+
44+
ИнформацияПоКомандам.Вставить(ИнформацияОКоманде.Команда, СхемаКоманды);
45+
46+
КонецЦикла;
47+
48+
// BSLLS-off
49+
ИнформацияПоКомандам.Вставить("default", Новый Структура("description, id, type, properties",
50+
"Default settings",
51+
"/properties/default",
52+
"object",
53+
ИнформацияОПараметрахПоУмолчанию));
54+
55+
ИнформацияПоКомандам.Вставить("$schema", Новый Структура("default, description, id, type",
56+
"vanessa-runner-schema.json",
57+
"Path of vanessa-runner-schema.json.",
58+
"/properties/$schema",
59+
"string"));
60+
// BSLLS-on
61+
Возврат ИнформацияПоКомандам;
62+
КонецФункции
63+
64+
Функция ИнформацияПоПараметрамКоманды(ИнформацияОКоманде)
65+
ПараметрыКоманды = Новый Соответствие;
66+
Для каждого Параметр Из ИнформацияОКоманде.Параметры Цикл
67+
ПараметрыКоманды.Вставить(Параметр.Имя, СтруктураСвойствПараметра(Параметр, ИнформацияОКоманде.Команда));
68+
ИнформацияОПараметрахПоУмолчанию.Вставить(Параметр.Имя, СтруктураСвойствПараметра(Параметр, "default"));
69+
КонецЦикла;
70+
71+
Возврат ПараметрыКоманды;
72+
КонецФункции
73+
74+
Функция СтруктураСвойствПараметра(Параметр, ИмяКоманды)
75+
СтруктураСвойствПараметра = Новый Структура;
76+
77+
СтруктураСвойствПараметра.Вставить("description", Параметр.Пояснение);
78+
СтруктураСвойствПараметра.Вставить("id", СтрШаблон("/properties/%1/%2", // BSLLS:NestedFunctionInParameters-off
79+
НРег(ИмяКоманды),
80+
НРег(Параметр.Имя)));
81+
СтруктураСвойствПараметра.Вставить("title", СтрШаблон("The %1 Schema", Параметр.Имя));
82+
Если Параметр.ЭтоКоллекция Тогда
83+
СтруктураСвойствПараметра.Вставить("type", "array"); // BSLLS:DuplicateStringLiteral-off
84+
СтруктураЭлементовМассива = Новый Структура;
85+
СтруктураЭлементовМассива.Вставить("uniqueItems", Истина);
86+
СтруктураЭлементовМассива.Вставить("type", ?(Параметр.ЭтоФлаг, "boolean", "string"));
87+
СтруктураЭлементовМассива.Вставить("id", СтрШаблон("/properties/%1/%2/items", // BSLLS:NestedFunctionInParameters-off
88+
НРег(ИмяКоманды),
89+
НРег(Параметр.Имя)));
90+
Если НРег(Параметр.Имя) = "--mode" И НРег(ИмяКоманды) = "syntax-check" Тогда
91+
СтруктураЭлементовМассива.Вставить("oneOf", ИнформацияПоМодамСинтаксКонтроля());
92+
Иначе
93+
СтруктураЭлементовМассива.Вставить("default", ?(Параметр.ЭтоФлаг, Ложь, ""));
94+
КонецЕсли;
95+
СтруктураСвойствПараметра.Вставить("items", СтруктураЭлементовМассива);
96+
Иначе
97+
СтруктураСвойствПараметра.Вставить("type", ?(Параметр.ЭтоФлаг, "boolean", "string"));
98+
СтруктураСвойствПараметра.Вставить("default", ?(Параметр.ЭтоФлаг, Ложь, ""));
99+
КонецЕсли;
100+
Возврат СтруктураСвойствПараметра;
101+
КонецФункции
102+
103+
Функция ИнформацияПоМодамСинтаксКонтроля() // BSLLS:Typo-off
104+
МассивПравилЗаполненияМодов = Новый Массив;
105+
СтруктураПаттернаРасширения = Новый Структура("pattern, description, example",
106+
"-Extension .+",
107+
"-Extension <Имя расширения>",
108+
"-Extension ИмяРасширения");
109+
МассивПравилЗаполненияМодов.Добавить(СтруктураПаттернаРасширения);
110+
111+
МассивМодов = Новый Массив;
112+
МассивМодов.Добавить("-ConfigLogIntegrity");
113+
МассивМодов.Добавить("-IncorrectReferences");
114+
МассивМодов.Добавить("-ThinClient");
115+
МассивМодов.Добавить("-WebClient");
116+
МассивМодов.Добавить("-MobileClient");
117+
МассивМодов.Добавить("-MobileAppClient");
118+
МассивМодов.Добавить("-Server");
119+
МассивМодов.Добавить("-MobileAppServer");
120+
МассивМодов.Добавить("-MobileClientStandalone");
121+
МассивМодов.Добавить("-ExternalConnection");
122+
МассивМодов.Добавить("-ExternalConnectionServer");
123+
МассивМодов.Добавить("-ThickClientManagedApplication");
124+
МассивМодов.Добавить("-ThickClientServerManagedApplication");
125+
МассивМодов.Добавить("-ThickClientOrdinaryApplication");
126+
МассивМодов.Добавить("-ThickClientServerOrdinaryApplication");
127+
МассивМодов.Добавить("-DistributiveModules");
128+
МассивМодов.Добавить("-UnreferenceProcedures");
129+
МассивМодов.Добавить("-HandlersExistence");
130+
МассивМодов.Добавить("-EmptyHandlers");
131+
МассивМодов.Добавить("-ExtendedModulesCheck");
132+
МассивМодов.Добавить("-CheckUseModality");
133+
МассивМодов.Добавить("-CheckUseSynchronousCalls");
134+
МассивМодов.Добавить("-UnsupportedFunctional");
135+
МассивМодов.Добавить("-MobileClientDigiSign");
136+
МассивМодов.Добавить("-AllExtensions");
137+
138+
СтруктураПеречисленияВариантовМодов = Новый Структура("enum", МассивМодов);
139+
140+
МассивПравилЗаполненияМодов.Добавить(СтруктураПеречисленияВариантовМодов);
141+
142+
Возврат МассивПравилЗаполненияМодов;
143+
КонецФункции
144+
145+
НачальнаяИнициализацияПроекта();
146+
147+
Схема = Конструктор();
148+
149+
Схема.Вставить("properties", ИнформацияПоКомандам());
150+
151+
ЗаписьJSON = Новый ЗаписьJSON;
152+
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
153+
ЗаписьJSON.ОткрытьФайл("vanessa-runner-schema.json", , Ложь, ПараметрыЗаписиJSON);
154+
ЗаписатьJSON(ЗаписьJSON, Схема);
155+
ЗаписьJSON.Закрыть();

0 commit comments

Comments
 (0)