33&ЛогOVM
44Перем Лог ;
55
6- &Пластилин
7- Перем Поделка ;
6+ &Пластилин (Тип = "ТаблицаЗначений" , Значение = "КомандаПриложения" )
7+ Перем КомандыПриложения ;
8+
9+ Перем Рефлектор ;
810
911&Опция (Имя = "shell s" , Описание = "Тип оболочки для генерации автодополнения (поддерживается: bash)" )
1012&ТСтрока
1416
1517&КомандаПриложения (Имя = "completions" , Описание = "Вывести скрипт автодополнения команд для выбранной оболочки" )
1618Процедура ПриСозданииОбъекта ()
19+ Рефлектор = Новый Рефлектор();
1720КонецПроцедуры
1821
1922&ВыполнениеКоманды
@@ -125,14 +128,13 @@ complete -F _ovm_completions ovm";
125128
126129Функция ПолучитьДеревоКоманд ()
127130
128- ОпределенияКоманд = Поделка.ПолучитьОпределенияЖелудей("КомандаПриложения" );
129-
130131 // Первый проход: собрать все команды с их именами желудей и родителями
131132 ВсеИнфо = Новый Соответствие();
132133
133- Для Каждого КлючЗначение Из ОпределенияКоманд Цикл
134- ИмяЖелудя = КлючЗначение.Ключ;
135- ОпределениеЖелудя = КлючЗначение.Значение;
134+ Для Каждого ДанныеЖелудя Из КомандыПриложения Цикл
135+ ИмяЖелудя = ДанныеЖелудя.Имя;
136+ ОпределениеЖелудя = ДанныеЖелудя.ОпределениеЖелудя;
137+ Желудь = ДанныеЖелудя.Желудь;
136138 Конструктор = ОпределениеЖелудя.Завязь().ДанныеМетода();
137139
138140 АннотацияКоманды = РаботаСАннотациями.НайтиАннотацию(Конструктор.Аннотации, "КомандаПриложения" );
@@ -151,7 +153,7 @@ complete -F _ovm_completions ovm";
151153 ИнфоКоманды.ИмяЖелудя = ИмяЖелудя;
152154 ИнфоКоманды.Родитель = Родитель;
153155 ИнфоКоманды.Имена = СтрРазделить (ИмяКоманды, " " );
154- ИнфоКоманды.Опции = ПолучитьОпцииКоманды(ОпределениеЖелудя);
156+ ИнфоКоманды.Опции = ПолучитьОпцииКоманды(Желудь , ОпределениеЖелудя);
155157
156158 ВсеИнфо.Вставить(ИмяЖелудя, ИнфоКоманды);
157159 КонецЦикла ;
@@ -199,27 +201,35 @@ complete -F _ovm_completions ovm";
199201
200202КонецФункции
201203
202- Функция ПолучитьОпцииКоманды (ОпределениеЖелудя )
204+ Функция ПолучитьОпцииКоманды (Желудь , ОпределениеЖелудя )
203205
204206 Опции = Новый Массив();
205207 Опции.Добавить("--help" );
206208
207- Свойства = ОпределениеЖелудя.Свойства();
208- Для Каждого Свойство Из Свойства Цикл
209- АннотацияОпции = РаботаСАннотациями.ПолучитьАннотацию(Свойство, "Опция" );
210- Если АннотацияОпции = Неопределено Тогда
211- Продолжить ;
212- КонецЕсли ;
213-
214- ИмяОпции = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(АннотацияОпции, "Имя" );
215- Для Каждого ЧастьОпции Из СтрРазделить (ИмяОпции, " " ) Цикл
216- Если СтрДлина (ЧастьОпции) = 1 Тогда
217- Опции.Добавить("-" + ЧастьОпции);
218- Иначе
219- Опции.Добавить("--" + ЧастьОпции);
209+ Если Рефлектор.МетодСуществует(Желудь, "ОписаниеКоманды" ) Тогда
210+ Сборщик = Новый СборщикОпций();
211+ Желудь.ОписаниеКоманды(Сборщик);
212+ Для Каждого ИмяОпции Из Сборщик.ПолучитьОпции() Цикл
213+ Опции.Добавить(ИмяОпции);
214+ КонецЦикла ;
215+ Иначе
216+ Свойства = ОпределениеЖелудя.Свойства();
217+ Для Каждого Свойство Из Свойства Цикл
218+ АннотацияОпции = РаботаСАннотациями.ПолучитьАннотацию(Свойство, "Опция" );
219+ Если АннотацияОпции = Неопределено Тогда
220+ Продолжить ;
220221 КонецЕсли ;
222+
223+ ИмяОпции = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(АннотацияОпции, "Имя" );
224+ Для Каждого ЧастьОпции Из СтрРазделить (ИмяОпции, " " ) Цикл
225+ Если СтрДлина (ЧастьОпции) = 1 Тогда
226+ Опции.Добавить("-" + ЧастьОпции);
227+ Иначе
228+ Опции.Добавить("--" + ЧастьОпции);
229+ КонецЕсли ;
230+ КонецЦикла ;
221231 КонецЦикла ;
222- КонецЦикла ;
232+ КонецЕсли ;
223233
224234 Возврат Опции;
225235
0 commit comments