Перейти к содержанию

ADR 0152: Virtual Spacing для глифов control-flow в редакторе

Статус: Accepted · Implemented
Дата: 2026-05-27

Связанные ADR

ADR Роль
0053 PFD / карта намерений, глифы CF
0151 Subgraph под курсором
0085 Inline HUD редактора

Проблема

Глифы control-flow в gutter редактора рисовались IBackgroundRenderer по rect.Left строки кода — поверх первых символов (try, process, цифры легенды). Это ломает читаемость и не совпадает с ожиданием «полосы намерения» слева от текста.

Решение

Virtual Spacing: при активной карте CF для текущего .cs (тот же якорь, что subgraph) в начале каждой визуальной строки вставляется элемент с DocumentLength = 0 и фиксированной визуальной шириной (ControlFlowVirtualSpacingElementGenerator, по аналогии с inlay). Текст и каретка сдвигаются вправо; узлы рисуются в центре полосы (ControlFlowEditorNodePainter — заливки/фигуры как на мини-карте Skia, палитра CockpitPrimitivesPalette.CodeNavigationMap).

Условие включения совпадает с отображением gutter-глифов: controlFlow + непустая сцена subgraph + путь файла = якорь CF.

Константы полосы: Services/EditorControlFlowVirtualSpacing.cs.

Последствия

  • При смене уровня карты / якоря / сцены — TextView.Redraw() (уже было для CF).
  • Ширина полосы фиксирована (не из TOML в v1); при необходимости — настройка позже.
  • Не затрагивает wire subgraph / MCP — только редактор.

Отклонённые альтернативы

  • Только сдвинуть отрисовку в margin 50px: номера строк и CF конкурируют; текст не сдвигается, каретка расходится с глифом на отступах.
  • Пробелы в документе: портят копирование и offset-based API.