mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-03 10:10:21 +03:00
fix(meta-decompile): регистрочувствительное сравнение с дефолтом
Аудит всех 198 сравнений в декомпиляторе после того, как ловушка PS (-eq/-ne регистронезависимы) сработала трижды подряд: синоним метода, RootURL и синоним шаблона теряли значение, отличавшееся от дефолта только регистром. Сравнения разделены на два класса. Рискованный — где дефолт ВЫВОДИТСЯ ИЗ ДАННЫХ (имя, синоним, обработчик): там регистр реально гуляет. Такие сравнения синонимов уже были регистрочувствительными с прошлой кампании; оставались три — обработчик метода против "ИмяШаблона+ИмяМетода", состав UsePurposes и список InputByString. Исправлены. Add-EnumProp (центральный хелпер сравнения с дефолтом) тоже переведён на -cne: на текущем корпусе это no-op, платформа пишет enum канонически, но снимает латентную ловушку. Инлайновые сравнения с enum-литералами (~150 шт.) оставлены как есть: там дефолт — фиксированная константа формата, а не данные, и расхождение по регистру означало бы неканоничный enum от платформы, чего не бывает. Проверка (изменений нет ни на одном корпусе): сервисы ERP+БП 46/46, сервисы УТ 25/25, справочники УТ 519/519, tier-1 УТ 1282/1283, справочники acc+erp+ut 2157/2159, сюиты meta-compile 76/76 и meta-decompile 3/3. Два расхождения в справочниках — давний пробел по предопределённым элементам, воспроизводится и на коде до правки. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
05beeca7d3
commit
a305c1bc89
@@ -1,4 +1,4 @@
|
||||
# meta-decompile v0.59 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
|
||||
# meta-decompile v0.60 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
#
|
||||
# Поддержаны: Catalog, ExchangePlan, ChartOfCharacteristicTypes, ChartOfAccounts, ChartOfCalculationTypes, Document,
|
||||
@@ -435,7 +435,9 @@ $cmt = P 'Comment'; if ($cmt) { $dsl['comment'] = $cmt }
|
||||
|
||||
# Свойства Catalog (omit-on-default). Порядок ключей — как удобно DSL.
|
||||
function Add-BoolProp { param([string]$key, [string]$tag, [bool]$default) $v = P $tag; if ($null -ne $v) { $b = ($v -eq 'true'); if ($b -ne $default) { $dsl[$key] = $b } } }
|
||||
function Add-EnumProp { param([string]$key, [string]$tag, [string]$default) $v = P $tag; if ($null -ne $v -and $v -ne '' -and $v -ne $default) { $dsl[$key] = $v } }
|
||||
# -cne: сравнение с дефолтом ВСЕГДА регистрочувствительное. PS -ne регистронезависим, и значение,
|
||||
# отличающееся от дефолта только регистром, молча терялось (ловилось трижды: синонимы, RootURL).
|
||||
function Add-EnumProp { param([string]$key, [string]$tag, [string]$default) $v = P $tag; if ($null -ne $v -and $v -ne '' -and $v -cne $default) { $dsl[$key] = $v } }
|
||||
function Add-IntProp { param([string]$key, [string]$tag, [int]$default) $v = P $tag; if ($null -ne $v -and $v -ne '') { $iv = [int]$v; if ($iv -ne $default) { $dsl[$key] = $iv } } }
|
||||
|
||||
Add-BoolProp 'hierarchical' 'Hierarchical' $false
|
||||
@@ -719,7 +721,7 @@ if ($objType -eq 'CommonForm') {
|
||||
if ($upNode) {
|
||||
$ups = @($upNode.SelectNodes('v8:Value', $nsm) | ForEach-Object { $_.InnerText })
|
||||
$def2 = @('PlatformApplication', 'MobilePlatformApplication')
|
||||
$same = ($ups.Count -eq $def2.Count); if ($same) { for ($k=0; $k -lt $ups.Count; $k++) { if ($ups[$k] -ne $def2[$k]) { $same=$false; break } } }
|
||||
$same = ($ups.Count -eq $def2.Count); if ($same) { for ($k=0; $k -lt $ups.Count; $k++) { if ($ups[$k] -cne $def2[$k]) { $same=$false; break } } }
|
||||
if (-not $same -and $ups.Count -gt 0) { $dsl['usePurposes'] = [System.Collections.ArrayList]@($ups) }
|
||||
}
|
||||
$ep = Get-MLValue ($props.SelectSingleNode('md:ExtendedPresentation', $nsm)); if ($null -ne $ep) { $dsl['extendedPresentation'] = $ep }
|
||||
@@ -955,7 +957,7 @@ if ($ibNode) {
|
||||
if ($cl -gt 0) { $ibDef += "StandardAttribute.Code" }
|
||||
$ibShort = @($ibActual | ForEach-Object { Short-Field $_ })
|
||||
$same = ($ibShort.Count -eq $ibDef.Count)
|
||||
if ($same) { for ($k = 0; $k -lt $ibShort.Count; $k++) { if ($ibShort[$k] -ne $ibDef[$k]) { $same = $false; break } } }
|
||||
if ($same) { for ($k = 0; $k -lt $ibShort.Count; $k++) { if ($ibShort[$k] -cne $ibDef[$k]) { $same = $false; break } } }
|
||||
if (-not $same) { $dsl['inputByString'] = [System.Collections.ArrayList]@($ibShort) }
|
||||
}
|
||||
|
||||
@@ -1241,7 +1243,7 @@ if ($childObjs) {
|
||||
$handlerVal = if ($mHandler) { $mHandler.InnerText } else { '' }
|
||||
$synDefault = ($null -eq $mSyn) -or ("$mSyn" -ceq (Split-CamelWords $mName))
|
||||
$cmtEmpty = (-not $mCmt) -or (-not $mCmt.InnerText)
|
||||
if ($handlerVal -eq "$tName$mName" -and $synDefault -and $cmtEmpty) {
|
||||
if ($handlerVal -ceq "$tName$mName" -and $synDefault -and $cmtEmpty) {
|
||||
$methods[$mName] = $httpVal
|
||||
} else {
|
||||
$mo = [ordered]@{ httpMethod = $httpVal }
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# meta-decompile v0.59 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
|
||||
# meta-decompile v0.60 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
#
|
||||
# Зеркало meta-decompile.ps1 (КАНОН). Структура 1:1 — те же имена функций, порядок, комментарии.
|
||||
|
||||
Reference in New Issue
Block a user