Сравнение кандидатов на поверхность редактора (v1)
Статус: чертеж-компаньон к ADR 0103
Дата: 2026-04-26
Обновлено: 2026-06-20 — нормативная линия Monaco: ADR 0162
Связь: 0085, 0098, 0035, concept-to-implementation-map-v1, LANGUAGE-SERVICES-PLAN.md
Документ — сравнительный аппендикс к хосту документного редактора в зоне Forward. Он не меняет продуктовый baseline: AvaloniaEdit остаётся стеком по умолчанию в репозитории.
1. Текущий стек (baseline)
| Измерение | AvaloniaEdit (сейчас) |
|---|---|
| Интеграция | Нативный Avalonia; хост DockDocumentView; TextMate через AvaloniaEdit.TextMate |
| LSP / семантика | Склейка в коде приложения (направление DAL — 0102); «клей» не исчезает сам |
| Inline HUD | Adorners, свои renderers, tooltips — реализуемо; полноценные inlays/ghost уровня VS — предмет доработок |
| Производительность | Для типичных файлов хорошо; для очень больших — от способа использования хоста |
| Тема | Может следовать теме приложения; паритет с MFD/кабиной — отдельная работа (0066) |
| High-frequency | События напрямую; всё равно вести через bounded-контур 0103, а не в DataBus |
| Риск | Меньше разброса платформы на Windows; нет встроенного браузера во Forward |
2. Веб-редактор в WebView2 (например Monaco)
| Измерение | Monaco (или аналог) в WebView2 |
|---|---|
| Что это | Встроенный Edge webview в нативном процессе — не оболочка Electron-приложения. Иные компромиссы (interop, C++/WinRT, два кучи) vs связка Chromium+Node. |
| Inline HUD | Богатая экосистема (у Monaco: decorations, codelens-паттерны); остаётся работа по C#-специфичной стыковке LSP и IPC к DAL/IDE |
| Тема | Две системы: веб-CSS и Avalonia PrimitivesKit / кабина — риск дублирования |
| Производительность | Может быть сильной; large-doc и alloc — от интеграции |
| Платформа | WebView2 ориентирован на Windows; кроссплатформенный MFD уже ссылается на 0093 для вторичных поверхностей, без обязанности для кодового редактора |
| Политика | ADR 0103: не baseline Forward; только опциональная исследовательская линия. WebView2 как инструмент MFD — 0035. |
3. Другие нативные или гибридные варианты (strawman)
| Вариант | Когда смотреть |
|---|---|
| Более тяжёлая кастомизация Avalonia (больше adorners, Skia, своя вёрстка текста) | Оставаться нативным; вкладываться, если пределы AvaloniaEdit измеримы в целевых сценариях (большие файлы, плотность hint’ов) |
| Редактор в отдельном процессе (IPC) | Вне v1; растёт операционка и синхронизация с «истиной буфера» 0084 |
| Стиль Roslyn/VS platform | Долгий горизонт; не вытекает из спайка 0103 |
4. Как это питает IEditorSurfaceAdapter
Контракт адаптера — независимый от хоста: тот же SemanticProjectionPipeline / EditorHudEngine сначала крутит AvaloniaEdit; веб-хост реализует тот же порт координат, каретки и семантического отображения, без дублирования DAL или CCU.
Минимальная поверхность порта (концептуально):
DocumentId+ снимок текста или диапазоны изменений для LSP- Каретка/selection в смещениях документа; опционально визуальная строка/колонка
- API запроса стабилизированной презентации hover/диагностик от движка (а не сырой LSP во view)
5. Сводка решения
| Сценарий | Направление |
|---|---|
| Редактор кода Forward по умолчанию | AvaloniaEdit + слои 0103 |
| MFD / URL запуска / внешний LLM | WebView2 по 0035 / 0093 — не замена ядра редактора без отдельного ADR |
| Monaco / WebView2 Forward | ADR 0162: strangler monaco_webview2, не Photino-shell; фазы M0–M6 |