Skip to content

Commit 5ca88bd

Browse files
committed
fix: #37 В выводе справки при стандартной строке использования скрыты символы --
1 parent d9c3645 commit 5ca88bd

File tree

2 files changed

+51
-29
lines changed

2 files changed

+51
-29
lines changed

src/core/Классы/КомандаПриложения.os

Lines changed: 46 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -302,10 +302,17 @@
302302

303303
КонецЕсли;
304304

305+
СтрокаИспользования = СокрЛП(Спек);
306+
307+
Если ПустаяСтрока(СтрокаИспользования) Тогда
308+
СтрокаИспользования = СформироватьСтандартнуюСтрокуИспользования();
309+
СтрокаИспользования = СтрЗаменить(СтрокаИспользования, "-- ", "");
310+
КонецЕсли;
311+
305312
ШаблонСтрокиИспользования = "Строка запуска: %1 %2 %3";
306313
Сообщить(СтрШаблон(ШаблонСтрокиИспользования,
307314
ПутьИспользования,
308-
СокрЛП(Спек),
315+
СтрокаИспользования,
309316
СуффиксВложенныхКоманды));
310317

311318
Сообщить("");
@@ -486,36 +493,17 @@
486493

487494
Лог.Отладка("Входящий спек: %1", Спек);
488495

489-
Если ПустаяСтрока(Спек) Тогда
490-
491-
Лог.Отладка("Количество опций строки: %1", Опции.Количество());
492-
Если Опции.Количество() > 0 Тогда
493-
Спек = "[ОПЦИИ] ";
494-
КонецЕсли;
495-
496-
Если Аргументы.Количество() > 0 Тогда
497-
Спек = Спек + "-- ";
498-
КонецЕсли;
499-
500-
Лог.Отладка("Количество аргументы строки: %1", Аргументы.Количество());
501-
Для каждого арг Из Аргументы Цикл
496+
СтрокаИспользования = Спек;
502497

503-
ИмяАргумента = арг.Ключ.Имя;
504-
КлассАргумента = арг.Ключ;
505-
506-
ДополнитьИмяАргументаМассива(ИмяАргумента, КлассАргумента);
507-
ДополнитьИмяАргументаНеобязательного(ИмяАргумента, КлассАргумента);
508-
509-
Лог.Отладка("Добавляю аргумет <%1> в спек <%2>", ИмяАргумента, Спек);
510-
Спек = Спек + ИмяАргумента + " ";
511-
512-
КонецЦикла;
498+
Если ПустаяСтрока(СтрокаИспользования) Тогда
513499

500+
СтрокаИспользования = СформироватьСтандартнуюСтрокуИспользования();
501+
514502
КонецЕсли;
515503

516504
Лог.Отладка("Разбираю строку использования с помощью лексера");
517505

518-
Лексер = Новый Лексер(Спек).Прочитать();
506+
Лексер = Новый Лексер(СтрокаИспользования).Прочитать();
519507
Если Лексер.ЕстьОшибка() Тогда
520508
Лексер.ВывестиИнформациюОбОшибке();
521509
ВызватьИсключение "Ошибка разбора строки использования";
@@ -524,7 +512,7 @@
524512
ТокеныПарсера = Лексер.ПолучитьТокены();
525513

526514
ПараметрыПарсера = Новый Структура;
527-
ПараметрыПарсера.Вставить("Спек", Спек);
515+
ПараметрыПарсера.Вставить("Спек", СтрокаИспользования);
528516
ПараметрыПарсера.Вставить("Опции", Опции);
529517
ПараметрыПарсера.Вставить("Аргументы", Аргументы);
530518
ПараметрыПарсера.Вставить("ОпцииИндекс", ОпцииИндекс);
@@ -1107,6 +1095,38 @@
11071095

11081096
#Область Вспомогательные_процедуры_и_функции
11091097

1098+
Функция СформироватьСтандартнуюСтрокуИспользования()
1099+
1100+
СтандартнаяСтрокаИспользования = "";
1101+
1102+
Лог.Отладка("Количество опций строки: %1", Опции.Количество());
1103+
Если Опции.Количество() > 0 Тогда
1104+
СтандартнаяСтрокаИспользования = "[ОПЦИИ] ";
1105+
КонецЕсли;
1106+
1107+
Если Аргументы.Количество() > 0 Тогда
1108+
СтандартнаяСтрокаИспользования = СтандартнаяСтрокаИспользования + "-- ";
1109+
КонецЕсли;
1110+
1111+
Лог.Отладка("Количество аргументы строки: %1", Аргументы.Количество());
1112+
Для каждого арг Из Аргументы Цикл
1113+
1114+
ИмяАргумента = арг.Ключ.Имя;
1115+
КлассАргумента = арг.Ключ;
1116+
1117+
ДополнитьИмяАргументаМассива(ИмяАргумента, КлассАргумента);
1118+
ДополнитьИмяАргументаНеобязательного(ИмяАргумента, КлассАргумента);
1119+
1120+
Лог.Отладка("Добавляю аргумет <%1> в спек <%2>", ИмяАргумента, СтандартнаяСтрокаИспользования);
1121+
СтандартнаяСтрокаИспользования = СтандартнаяСтрокаИспользования + ИмяАргумента + " ";
1122+
1123+
КонецЦикла;
1124+
1125+
Возврат СтандартнаяСтрокаИспользования;
1126+
1127+
КонецФункции
1128+
1129+
11101130
Процедура ВывестиПутьПарсераВОтладке()
11111131

11121132
Если Лог.Уровень() = УровниЛога.Отладка Тогда

tests/КомандаПриложения_test.os

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -359,8 +359,8 @@
359359
Спек = "";
360360
Команда = ПодготовитьТестовуюКоманду(Спек);
361361
ОпцияМассив = Команда.Опция("env", Новый Массив, "Тестовый массив опций").ТМассивСтрок();
362-
АргументСтрока = Команда.Аргумент("ARG", "", "Тестовый простой необязательный аргумент").ТМассивСтрок().Обязательный(Ложь);
363362
АргументСтрока2 = Команда.Аргумент("ARG2", "", "Тестовый простой необязательный аргумент").Обязательный();
363+
АргументСтрока = Команда.Аргумент("ARG", "", "Тестовый простой необязательный аргумент").ТМассивСтрок().Обязательный(Ложь);
364364
ОпцияПеречисление = Команда.Опция("enum e em", "yellow", "Опция перечисление").ТПеречисление()
365365
.Перечисление("yellow", "yellow", "Это желтый цвет")
366366
.Перечисление("red", "red" , "Это красный цвет")
@@ -373,9 +373,11 @@
373373

374374
Функция ПодготовитьТестовуюКоманду(Спек = "")
375375

376-
Команда = Новый КомандаПриложения("testapp", "", ЭтотОбъект);
376+
Команда = Новый КомандаПриложения("testapp", "Тестовое приложения", ЭтотОбъект);
377377

378-
Команда.Спек = Спек;
378+
Если ЗначениеЗаполнено(Спек) Тогда
379+
Команда.Спек = Спек;
380+
КонецЕсли;
379381

380382
Возврат Команда;
381383

0 commit comments

Comments
 (0)