fix(description): не разрезать структуру на многострочном типе поля#390
Conversation
Поле возвращаемого значения/параметра с составным типом, записанным на нескольких строках (std453 п.5.2.5, 5.3 — каждый доп. тип с новой строки и с дефиса), парсилось неверно: continuation-строка вида "- ТипB" воспринималась как новый тип верхнего уровня. Структура "разрезалась", и все последующие поля навешивались на фантомный тип. Reader теперь маршрутизирует continuation-тип в самое глубокое активное поле (по образцу addTypeDescription), если у текущего верхнего типа уже есть поля; иначе — как доп. тип верхнего уровня (прежнее поведение). Подполя (**) корректно остаются на continuation-типе. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|



Проблема
Поле возвращаемого значения (или параметра) с составным типом, записанным на нескольких строках, парсилось неверно. Формат каноничен по std453 п.5.2.5 и 5.3 («Если возвращаемое значение составного типа, каждый тип пишется с новой строки и с дефиса»):
Continuation-строка
- Строкавоспринималась как новый тип возвращаемого значения верхнего уровня: структура «разрезалась» (returnedValue=[Структура, Строка]), уСтруктураоставалось только полеПодпись, а все последующие поля (Комментарий, …) навешивались на фантомныйСтрока.Это видно и на существующем ресурсе
example9.bsl(полеДанные), но там reader-поведение тестами зафиксировано не было — только дерево грамматики.Причина
Грамматика матчит continuation-строки с дефисом как
typesBlock, аMethodDescriptionReader.visitTypesBlockбезусловно добавлял тип вlastReadParam(верхний уровень), игнорируя вложенность в поле — в отличие отvisitReturnsValue, где уровень учитывается.Решение
visitTypesBlockтеперь маршрутизирует continuation-тип черезaddContinuationType: если у текущего верхнего типа уже есть поля (мы внутри списка свойств структуры), тип уходит в самое глубокое активное поле — по образцу уже существующегоaddTypeDescription. Иначе — добавляется как доп. тип верхнего уровня (прежнее поведение для составных типов без полей). Подполя (**) корректно остаются на continuation-типе.Тесты
parseStructureReturnFieldWithMultilineType— структура не разрезается, все поля и оба типа поля на месте.parseStructureReturnFieldWithMultilineTypeAndSubfields— подполя**остаются на continuation-типе.🤖 Generated with Claude Code