feat(meta-compile,meta-decompile): поддержка типа Enum (Перечисления) (v1.51/v0.42)

13-й тип. Рерайт Emit-EnumProperties на общие хелперы (был легаси-хардкод:
Comment/UseStandardCommands/ChoiceMode/формы/презентации/ChoiceHistoryOnInput).
Emit-EnumValue + comment; Parse-EnumValueShorthand больше не стрингифаит synonym
(строка|{ru,en}). Декомпилятор: снят гейт +Enum; захват EnumValue (values,
короткая строка|объект name/synonym/comment); StandardAttributes register-style
opt-out (блок Order/Ref present 85%, absent → standardAttributes:"").

Class-2 фиксы дефолтов (тип-зависимые, декомпилятор зеркалит компилятор):
- useStandardCommands: у Enum дефолт false (не true)
- quickChoice: у Enum дефолт true (не false)
- пустой <Synonym/> значения ≠ авто-синоним → synonym:"" (аналог object-level фикса)

ПОЛНЫЙ КОРПУС 2545 (acc+erp): match 2545/2545, TOTAL 0, 0 крашей — byte-exact,
order-preserved (сверено с реальными 1С-файлами modulo trailing newline+GUID).
Регресс 50/50 ps1+py, ps1==py identical. spec §7.3, кейс enum-full.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-07-09 15:04:23 +03:00
parent de2e966311
commit 117a06ff3e
10 changed files with 496 additions and 39 deletions
+26 -2
View File
@@ -787,13 +787,37 @@ Split-CamelCase имени.
]
```
### 7.3 Enum
### 7.3 Enum (Перечисление)
| Поле JSON | Умолчание | XML элемент |
|-----------|----------|-------------|
| `values` | `[]` | → EnumValue в ChildObjects |
| `comment` | пусто | Comment |
| `useStandardCommands` | `false` | UseStandardCommands (у Enum дефолт **false**, в отличие от прочих типов) |
| `quickChoice` | `true` | QuickChoice (у Enum дефолт **true**) |
| `choiceMode` | `BothWays` | ChoiceMode (BothWays/FromForm/QuickChoice) |
| `choiceHistoryOnInput` | `Auto` | ChoiceHistoryOnInput |
| `listPresentation` / `extendedListPresentation` / `explanation` | пусто | презентации (ML) |
| `defaultListForm` / `defaultChoiceForm` / `auxiliaryListForm` / `auxiliaryChoiceForm` | пусто | *ListForm/*ChoiceForm (ссылка на форму) |
| `standardAttributes` | (блок всегда) | `""` — opt-out: подавить all-default блок стандартных реквизитов (Order/Ref); ~14% перечислений его опускают, правило не выводимо |
Других настраиваемых свойств нет — все дефолтные.
**Значения (`values`)** — массив, каждый элемент строка ЛИБО объект:
- строка `"Имя"` → значение с авто-синонимом из имени (Split-CamelCase);
- объект `{ "name": "Имя", "synonym"?, "comment"? }`, где `synonym` — строка ИЛИ `{ru, en}` (мультиязычный),
либо `""` для явно пустого синонима (когда авто-синоним из имени неуместен).
Пример:
```json
{ "type": "Enum", "name": "СтатусыОбработки", "comment": "(Демо)",
"useStandardCommands": true, "choiceMode": "QuickChoice",
"listPresentation": { "ru": "Статусы обработки", "en": "Processing statuses" },
"standardAttributes": "",
"values": [
{ "name": "Новый", "synonym": { "ru": "Новый", "en": "New" }, "comment": "начальный статус" },
{ "name": "ВРаботе", "synonym": "" },
"Завершен"
] }
```
### 7.4 Constant