feat(form-decompile,form-compile): CommandInterface — командный интерфейс формы из ring-3

Снят fast-fail на CommandInterface (4388 форм, 13.5% корпуса — крупнейший
оставшийся триггер ring-3).

Форменный ключ commandInterface = панели commandBar + navigationPanel, списки
переопределений авто-расстановки (платформа эмитит только отклонения). Элемент:
command (verbatim; "0"=пустой), type (Auto опускаем/Added), defaultVisible,
visible (тот же xr-flag, что userVisible/use — bool или {common,roles}),
group (CommandGroup verbatim), index, attribute. Порядок тегов Item:
Command,Type,Attribute,CommandGroup,Index,DefaultVisible,Visible.

Две формы записи панели: плоский массив (декомпилятор эмитит её) + древовидная
{группа:[команды]} как входной сахар (алиасы important/goTo/seeAlso→
FormNavigationPanel*, important/createBasedOn→FormCommandBar*; иной ключ verbatim;
group из ключа, элементы не дублируют). Голый элемент → строка-shorthand.
Переиспользует Decompile-XrFlag/Emit-XrFlag.

Выборка 2.17: ring3 37→7, match 181→197; сам CommandInterface роундтрипится
бит-в-бит (0 CI-diff, остаток TOTAL — несвязанный хвост раскрытых форм). Зеркало
py байт-в-байт, кейс commands (+commandInterface tree-форма) сертифицирован
загрузкой в 1С. Регресс 40/40 (ps1+py).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-06-09 21:00:22 +03:00
parent ef036c7cf1
commit d7dedd4843
6 changed files with 275 additions and 5 deletions
@@ -29,6 +29,13 @@
],
"commands": [
{ "name": "Выполнить", "action": "ВыполнитьОбработка", "shortcut": "Ctrl+Enter", "use": false, "modifiesSavedData": true }
]
],
"commandInterface": {
"commandBar": {
"important": [
{ "command": "Form.Command.Выполнить", "defaultVisible": false, "index": 0, "visible": false }
]
}
}
}
}
@@ -90,4 +90,18 @@
<Shortcut>Ctrl+Enter</Shortcut>
</Command>
</Commands>
<CommandInterface>
<CommandBar>
<Item>
<Command>Form.Command.Выполнить</Command>
<Type>Auto</Type>
<CommandGroup>FormCommandBarImportant</CommandGroup>
<Index>0</Index>
<DefaultVisible>false</DefaultVisible>
<Visible>
<xr:Common>false</xr:Common>
</Visible>
</Item>
</CommandBar>
</CommandInterface>
</Form>