From 1bc705d27f454833912c2abd87692fab22b08393 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 27 Aug 2026 07:30:02 +0200 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D1=80=20=D0=B0=D0=BD=D0=BD=D0=BE=D1=82=D0=B0=D1=86=D0=B8=D0=B8?= =?UTF-8?q?,=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D0=B9=20=D0=BE?= =?UTF-8?q?=D0=B4=D0=BD=D0=B8=D0=BC=20=D0=B8=D0=BC=D0=B5=D0=BD=D0=B5=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Встроенный язык допускает параметр без значения: &Аннотация(ПростоИмя). Разбор такого параметра подсмотрен в PR #11 от @Macegor. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01CP3TEtTKWGE2wxRjEDwVRV --- ...20\257\320\267\321\213\320\272\320\260.os" | 11 +++- ...21\202\320\260\321\206\320\270\320\270.os" | 56 +++++++++++++++++++ 2 files changed, 65 insertions(+), 2 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\321\201\320\265\321\200\320\222\321\201\321\202\321\200\320\276\320\265\320\275\320\275\320\276\320\263\320\276\320\257\320\267\321\213\320\272\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\321\201\320\265\321\200\320\222\321\201\321\202\321\200\320\276\320\265\320\275\320\275\320\276\320\263\320\276\320\257\320\267\321\213\320\272\320\260.os" index db5b1fa..bbfd009 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\321\201\320\265\321\200\320\222\321\201\321\202\321\200\320\276\320\265\320\275\320\275\320\276\320\263\320\276\320\257\320\267\321\213\320\272\320\260.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\321\201\320\265\321\200\320\222\321\201\321\202\321\200\320\276\320\265\320\275\320\275\320\276\320\263\320\276\320\257\320\267\321\213\320\272\320\260.os" @@ -2529,8 +2529,15 @@ Имя = ""; Если Парсер_Токен = Токены.Идентификатор Тогда Имя = Парсер_Литерал; - СледующийТокен(); - Ожидать(Токены.ЗнакРавно); + Если СледующийТокен() <> Токены.ЗнакРавно Тогда + // параметр задан одним лишь именем: &Аннотация(ПростоИмя) + ПараметрАннотации = Парсер_Узлы.ПараметрАннотации.Добавить(); + ПараметрАннотации.Тип = Типы.ПараметрАннотации; + ПараметрАннотации.Имя = Имя; + ПараметрАннотации.Начало = Начало; + ПараметрАннотации.Конец = Парсер_ДанныеПредыдущегоТокена; + Возврат ПараметрАннотации; + КонецЕсли; СледующийТокен(); КонецЕсли; Если Парсер_Токен = Токены.Аннотация Тогда diff --git "a/tests/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\270.os" "b/tests/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\270.os" index eff219f..bb14489 100644 --- "a/tests/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\270.os" +++ "b/tests/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\270.os" @@ -101,6 +101,62 @@ КонецПроцедуры +&Тест +Процедура АннотацияСПараметромБезЗначения() Экспорт + + // Когда + + Модуль = Разобрать(" + |&Аннотация(ПростоИмя) + |Процедура ТестЧегоТо() Экспорт + |КонецПроцедуры"); + + // Тогда + + Параметр = ПерваяАннотацияМетода(Модуль).Параметры[0]; + + Ожидаем.Что(Параметр.Имя, "Имя параметра") + .Равно("ПростоИмя"); + + Ожидаем.Что(Параметр.Значение, "Значение параметра") + .ЭтоНеопределено(); + +КонецПроцедуры + +&Тест +Процедура АннотацияСоСмешаннымиПараметрами() Экспорт + + // Когда + + Модуль = Разобрать(" + |&Аннотация(ПростоИмя, ""значение"", Имя = 1) + |Процедура ТестЧегоТо() Экспорт + |КонецПроцедуры"); + + // Тогда + + Параметры = ПерваяАннотацияМетода(Модуль).Параметры; + + Ожидаем.Что(Параметры.Количество(), "Количество параметров") + .Равно(3); + + Ожидаем.Что(Параметры[0].Имя, "Имя первого параметра") + .Равно("ПростоИмя"); + + Ожидаем.Что(Параметры[0].Значение, "Значение первого параметра") + .ЭтоНеопределено(); + + Ожидаем.Что(Параметры[1].Литерал, "Значение второго параметра") + .Равно("значение"); + + Ожидаем.Что(Параметры[2].Имя, "Имя третьего параметра") + .Равно("Имя"); + + Ожидаем.Что(Параметры[2].Литерал, "Значение третьего параметра") + .Равно(1); + +КонецПроцедуры + &Тест Процедура АннотацияСВложеннойАннотацией() Экспорт