mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-08 03:00:52 +03:00
fix(meta-compile): константа без valueType получала тип значения "Constant"
Определение {"type": "Constant", "name": "X"} эмитило <v8:Type>Constant</v8:Type>:
в тип значения попадал ВИД объекта. Платформа отвергала всю конфигурацию целиком —
«Неизвестное имя типа - Constant», — то есть один минимальный объект ронял загрузку.
Причина: Emit-ConstantProperties передавал корневое определение в общий Build-TypeStr,
а тот читает valueType, иначе type. Для реквизита это верно, для корневого определения
нет: там type — вид объекта. Добавлен флаг ValueTypeOnly, которым корневые эмиттеры
отключают подхват; заодно убрано мёртвое условие в typeEmpty, пришедшее туда из
контекста реквизита.
Поведение теперь совпадает с документированным (reference/simple.md): Строка(10).
Проверено платформой 8.3.24.1691.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NBsZA5cr2WFThtgp7i5WVi
This commit is contained in:
co-authored by
Claude Opus 5
parent
cc0b7d3b64
commit
5592590a0e
@@ -1,4 +1,4 @@
|
||||
# meta-compile v1.102 — Compile 1C metadata object from JSON
|
||||
# meta-compile v1.103 — Compile 1C metadata object from JSON
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
[CmdletBinding(PositionalBinding=$false)]
|
||||
param(
|
||||
@@ -1080,8 +1080,10 @@ function Emit-FillValue {
|
||||
# --- 5. Attribute shorthand parser ---
|
||||
|
||||
function Build-TypeStr {
|
||||
param($obj)
|
||||
$t = if ($obj.valueType) { "$($obj.valueType)" } elseif ($obj.type) { "$($obj.type)" } else { "" }
|
||||
# ValueTypeOnly — для корневого определения объекта: там ключ type означает ВИД объекта
|
||||
# (Constant, Catalog, …), а не тип значения, и подхватывать его нельзя.
|
||||
param($obj, [switch]$ValueTypeOnly)
|
||||
$t = if ($obj.valueType) { "$($obj.valueType)" } elseif (-not $ValueTypeOnly -and $obj.type) { "$($obj.type)" } else { "" }
|
||||
if ($t -and -not $t.Contains('(')) {
|
||||
if ($t -eq "String" -and $obj.length) {
|
||||
$t = "String($($obj.length))"
|
||||
@@ -2771,8 +2773,8 @@ function Emit-ConstantProperties {
|
||||
if ($def.comment) { X "$i<Comment>$(Esc-XmlText $def.comment)</Comment>" } else { X "$i<Comment/>" }
|
||||
|
||||
# Type — valueType (пустой явный '' → <Type/>, реквизит без типа; отсутствие → String дефолт).
|
||||
$valueType = Build-TypeStr $def
|
||||
$typeEmpty = ($null -ne $def.valueType -and "$($def.valueType)".Trim() -eq '') -or ($null -ne $def.type -and "$($def.type)".Trim() -eq '')
|
||||
$valueType = Build-TypeStr $def -ValueTypeOnly
|
||||
$typeEmpty = ($null -ne $def.valueType -and "$($def.valueType)".Trim() -eq '')
|
||||
if ($typeEmpty) { X "$i<Type/>" }
|
||||
else { if (-not $valueType) { $valueType = "String" }; Emit-ValueType $i $valueType }
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# meta-compile v1.102 — Compile 1C metadata object from JSON
|
||||
# meta-compile v1.103 — Compile 1C metadata object from JSON
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
|
||||
import argparse
|
||||
@@ -1194,8 +1194,10 @@ def emit_fill_value(indent, type_str, spec, has_spec, type_empty=False):
|
||||
# 5. Attribute shorthand parser
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
def build_type_str(obj):
|
||||
t = str(obj.get('valueType') or obj.get('type') or '')
|
||||
def build_type_str(obj, value_type_only=False):
|
||||
# value_type_only — для корневого определения объекта: там ключ type означает ВИД объекта
|
||||
# (Constant, Catalog, …), а не тип значения, и подхватывать его нельзя.
|
||||
t = str(obj.get('valueType') or ('' if value_type_only else obj.get('type')) or '')
|
||||
if t and '(' not in t:
|
||||
if t == 'String' and obj.get('length'):
|
||||
t = f"String({obj['length']})"
|
||||
@@ -2869,9 +2871,8 @@ def emit_constant_properties(indent):
|
||||
else:
|
||||
X(f'{i}<Comment/>')
|
||||
# Type — valueType (явный '' → <Type/>, реквизит без типа; отсутствие → String дефолт).
|
||||
value_type = build_type_str(defn)
|
||||
type_empty = (defn.get('valueType') is not None and str(defn.get('valueType')).strip() == '') or \
|
||||
(defn.get('type') is not None and str(defn.get('type')).strip() == '')
|
||||
value_type = build_type_str(defn, value_type_only=True)
|
||||
type_empty = defn.get('valueType') is not None and str(defn.get('valueType')).strip() == ''
|
||||
if type_empty:
|
||||
X(f'{i}<Type/>')
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user