mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-03 18:20: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
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
#
|
#
|
||||||
# Поддержаны: Catalog, ExchangePlan, ChartOfCharacteristicTypes, ChartOfAccounts, ChartOfCalculationTypes, Document,
|
# Поддержаны: Catalog, ExchangePlan, ChartOfCharacteristicTypes, ChartOfAccounts, ChartOfCalculationTypes, Document,
|
||||||
@@ -435,7 +435,9 @@ $cmt = P 'Comment'; if ($cmt) { $dsl['comment'] = $cmt }
|
|||||||
|
|
||||||
# Свойства Catalog (omit-on-default). Порядок ключей — как удобно DSL.
|
# Свойства 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-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 } } }
|
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
|
Add-BoolProp 'hierarchical' 'Hierarchical' $false
|
||||||
@@ -719,7 +721,7 @@ if ($objType -eq 'CommonForm') {
|
|||||||
if ($upNode) {
|
if ($upNode) {
|
||||||
$ups = @($upNode.SelectNodes('v8:Value', $nsm) | ForEach-Object { $_.InnerText })
|
$ups = @($upNode.SelectNodes('v8:Value', $nsm) | ForEach-Object { $_.InnerText })
|
||||||
$def2 = @('PlatformApplication', 'MobilePlatformApplication')
|
$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) }
|
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 }
|
$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" }
|
if ($cl -gt 0) { $ibDef += "StandardAttribute.Code" }
|
||||||
$ibShort = @($ibActual | ForEach-Object { Short-Field $_ })
|
$ibShort = @($ibActual | ForEach-Object { Short-Field $_ })
|
||||||
$same = ($ibShort.Count -eq $ibDef.Count)
|
$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) }
|
if (-not $same) { $dsl['inputByString'] = [System.Collections.ArrayList]@($ibShort) }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1241,7 +1243,7 @@ if ($childObjs) {
|
|||||||
$handlerVal = if ($mHandler) { $mHandler.InnerText } else { '' }
|
$handlerVal = if ($mHandler) { $mHandler.InnerText } else { '' }
|
||||||
$synDefault = ($null -eq $mSyn) -or ("$mSyn" -ceq (Split-CamelWords $mName))
|
$synDefault = ($null -eq $mSyn) -or ("$mSyn" -ceq (Split-CamelWords $mName))
|
||||||
$cmtEmpty = (-not $mCmt) -or (-not $mCmt.InnerText)
|
$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
|
$methods[$mName] = $httpVal
|
||||||
} else {
|
} else {
|
||||||
$mo = [ordered]@{ httpMethod = $httpVal }
|
$mo = [ordered]@{ httpMethod = $httpVal }
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/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
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
#
|
#
|
||||||
# Зеркало meta-decompile.ps1 (КАНОН). Структура 1:1 — те же имена функций, порядок, комментарии.
|
# Зеркало meta-decompile.ps1 (КАНОН). Структура 1:1 — те же имена функций, порядок, комментарии.
|
||||||
|
|||||||
Reference in New Issue
Block a user