mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-24 21:51:02 +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,4 +1,4 @@
|
||||
# meta-validate v1.9 — Validate 1C metadata object structure
|
||||
# meta-validate v1.10 — Validate 1C metadata object structure (+корневой <Type>: скаляр без структуры = ошибка)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
param(
|
||||
[Parameter(Mandatory)]
|
||||
@@ -558,6 +558,26 @@ if ($propsNode) {
|
||||
}
|
||||
}
|
||||
|
||||
# Корневой <Type> (дескриптор типа значения — Константа, ПВХ) должен быть структурным:
|
||||
# <v8:Type>/<v8:TypeSet>, а не скалярный текст. Скаляр = повреждённый тип (напр. после
|
||||
# старого meta-edit modify-property Type). См. issue #42.
|
||||
$rootTypeEl = $propsNode.SelectSingleNode("md:Type", $ns)
|
||||
if ($rootTypeEl) {
|
||||
$v8Types = $rootTypeEl.SelectNodes("v8:Type", $ns)
|
||||
$v8TypeSets = $rootTypeEl.SelectNodes("v8:TypeSet", $ns)
|
||||
$scalarText = ""
|
||||
foreach ($cn in $rootTypeEl.ChildNodes) {
|
||||
if ($cn.NodeType -eq 'Text' -or $cn.NodeType -eq 'CDATA') {
|
||||
$t = $cn.Value.Trim()
|
||||
if ($t) { $scalarText = $t; break }
|
||||
}
|
||||
}
|
||||
if ($v8Types.Count -eq 0 -and $v8TypeSets.Count -eq 0 -and $scalarText) {
|
||||
Report-Error "4. Property <Type> содержит скалярный текст '$scalarText' без структуры типа (<v8:Type>/<v8:TypeSet>) — повреждённый дескриптор типа значения"
|
||||
$check4Ok = $false
|
||||
}
|
||||
}
|
||||
|
||||
if ($check4Ok) {
|
||||
Report-OK "4. Property values: $enumChecked enum properties checked"
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# meta-validate v1.9 — Validate 1C metadata object structure (Python port)
|
||||
# meta-validate v1.10 — Validate 1C metadata object structure (Python port) (+корневой <Type>: скаляр без структуры = ошибка)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
import argparse
|
||||
import os
|
||||
@@ -555,6 +555,18 @@ if props_node is not None:
|
||||
check4_ok = False
|
||||
enum_checked += 1
|
||||
|
||||
# Корневой <Type> (дескриптор типа значения — Константа, ПВХ) должен быть структурным:
|
||||
# <v8:Type>/<v8:TypeSet>, а не скалярный текст. Скаляр = повреждённый тип (напр. после
|
||||
# старого meta-edit modify-property Type). См. issue #42.
|
||||
root_type_el = find(props_node, "md:Type")
|
||||
if root_type_el is not None:
|
||||
scalar_text = inner_text(root_type_el).strip()
|
||||
v8_types = find_all(root_type_el, "v8:Type")
|
||||
v8_type_sets = find_all(root_type_el, "v8:TypeSet")
|
||||
if len(v8_types) == 0 and len(v8_type_sets) == 0 and scalar_text:
|
||||
report_error(f"4. Property <Type> содержит скалярный текст '{scalar_text}' без структуры типа (<v8:Type>/<v8:TypeSet>) — повреждённый дескриптор типа значения")
|
||||
check4_ok = False
|
||||
|
||||
if check4_ok:
|
||||
report_ok(f"4. Property values: {enum_checked} enum properties checked")
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user