Skip to content

fix(description): не разрезать структуру на многострочном типе поля#390

Merged
nixel2007 merged 1 commit into
masterfrom
fix/multiline-field-type-in-description
Jun 15, 2026
Merged

fix(description): не разрезать структуру на многострочном типе поля#390
nixel2007 merged 1 commit into
masterfrom
fix/multiline-field-type-in-description

Conversation

@nixel2007

Copy link
Copy Markdown
Member

Проблема

Поле возвращаемого значения (или параметра) с составным типом, записанным на нескольких строках, парсилось неверно. Формат каноничен по std453 п.5.2.5 и 5.3 («Если возвращаемое значение составного типа, каждый тип пишется с новой строки и с дефиса»):

// Возвращаемое значение:
//  Структура:
//   * Подпись - ДвоичныеДанные - результат подписания.
//             - Строка - подписанный КонвертXML.
//   * Комментарий - Строка - комментарий.

Continuation-строка - Строка воспринималась как новый тип возвращаемого значения верхнего уровня: структура «разрезалась» (returnedValue = [Структура, Строка]), у Структура оставалось только поле Подпись, а все последующие поля (Комментарий, …) навешивались на фантомный Строка.

Это видно и на существующем ресурсе example9.bsl (поле Данные), но там reader-поведение тестами зафиксировано не было — только дерево грамматики.

Причина

Грамматика матчит continuation-строки с дефисом как typesBlock, а MethodDescriptionReader.visitTypesBlock безусловно добавлял тип в lastReadParam (верхний уровень), игнорируя вложенность в поле — в отличие от visitReturnsValue, где уровень учитывается.

Решение

visitTypesBlock теперь маршрутизирует continuation-тип через addContinuationType: если у текущего верхнего типа уже есть поля (мы внутри списка свойств структуры), тип уходит в самое глубокое активное поле — по образцу уже существующего addTypeDescription. Иначе — добавляется как доп. тип верхнего уровня (прежнее поведение для составных типов без полей). Подполя (**) корректно остаются на continuation-типе.

Тесты

  • parseStructureReturnFieldWithMultilineType — структура не разрезается, все поля и оба типа поля на месте.
  • parseStructureReturnFieldWithMultilineTypeAndSubfields — подполя ** остаются на continuation-типе.
  • Полный набор (521 тест) зелёный, регрессий нет.

🤖 Generated with Claude Code

Поле возвращаемого значения/параметра с составным типом, записанным
на нескольких строках (std453 п.5.2.5, 5.3 — каждый доп. тип с новой
строки и с дефиса), парсилось неверно: continuation-строка вида
"- ТипB" воспринималась как новый тип верхнего уровня. Структура
"разрезалась", и все последующие поля навешивались на фантомный тип.

Reader теперь маршрутизирует continuation-тип в самое глубокое активное
поле (по образцу addTypeDescription), если у текущего верхнего типа уже
есть поля; иначе — как доп. тип верхнего уровня (прежнее поведение).
Подполя (**) корректно остаются на continuation-типе.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jun 15, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 02ea2680-3b96-4cb8-a139-9cb99d592b88

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/multiline-field-type-in-description

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@sonarqubecloud

Copy link
Copy Markdown

@nixel2007
nixel2007 merged commit 0ee66e9 into master Jun 15, 2026
17 checks passed
@nixel2007
nixel2007 deleted the fix/multiline-field-type-in-description branch June 15, 2026 11:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant