mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-31 00:37:47 +03:00
fix(meta-edit): modify-property Type — структурный дескриптор типа, guard от порчи
Корневой modify-property Type у ПВХ/Константы расплющивал структурный <Type> (<v8:Type> + квалификаторы) в скалярный текст, а meta-validate это пропускал. meta-edit (v1.21): modify-property Type перестраивает дескриптор через готовый build_value_type_xml (составной тип, квалификаторы, ref-типы); прочие структурные свойства с дочерними узлами → ошибка до записи файла вместо тихой порчи. meta-validate (v1.10): корневой <Type> со скалярным текстом без <v8:Type>/<v8:TypeSet> теперь ошибка (был false negative). Порты PS1/PY синхронны. Регрессионные кейсы: modify-property-type-pvh (структурный Type + ref), error-scalar-root-type (детект порчи). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
6318018bc1
commit
fbdf07e18a
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# meta-edit v1.20 — Edit existing 1C metadata object XML (+add-predefined предопределённые Ext/Predefined.xml)
|
||||
# meta-edit v1.21 — Edit existing 1C metadata object XML (+modify-property Type: структурный дескриптор, guard от порчи)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
|
||||
import argparse
|
||||
@@ -1915,6 +1915,27 @@ def modify_properties(props_def):
|
||||
if isinstance(prop_value, bool):
|
||||
value_str = "true" if prop_value else "false"
|
||||
|
||||
# Structural value-type property (корневой <Type> у Константы, ПВХ) —
|
||||
# перестроить дескриптор типа через build_value_type_xml (не расплющивать в скаляр)
|
||||
if prop_name == "Type":
|
||||
type_indent = get_child_indent(properties_el)
|
||||
new_type_xml = build_value_type_xml(type_indent, value_str)
|
||||
new_type_nodes = import_fragment(new_type_xml)
|
||||
if new_type_nodes:
|
||||
type_idx = list(properties_el).index(prop_el)
|
||||
new_type_nodes[0].tail = prop_el.tail
|
||||
properties_el.insert(type_idx + 1, new_type_nodes[0])
|
||||
remove_node_with_whitespace(prop_el)
|
||||
info(f"Modified property: Type = {value_str}")
|
||||
modify_count += 1
|
||||
continue
|
||||
|
||||
# Guard: не расплющивать структурное свойство (с дочерними узлами) в скалярный текст —
|
||||
# это молча повредит XML. Завершаем ошибкой ДО записи файла.
|
||||
if len(list(prop_el)) > 0:
|
||||
print(f"meta-edit: modify-property: свойство '{prop_name}' структурное (содержит дочерние узлы) — установка скалярного текста повредит XML; не поддерживается", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
# Set inner text — clear children first, set text
|
||||
for ch in list(prop_el):
|
||||
prop_el.remove(ch)
|
||||
|
||||
Reference in New Issue
Block a user