mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-02 16:20:54 +03:00
feat(cf-edit): sort-childObjects без аргумента выравнивает и порядок групп видов
Настройка newObjectPosition не чинит накопленное, а собранная навыками конфигурация могла держать группы видов не в каноне — первая же выгрузка платформы давала диф. Теперь вызов без значения приводит в порядок и сами группы. Вызов с явным видом этого не делает: назвали вид — операция остаётся точечной и трогает только имена внутри него. Приём тот же, что уже работал для имён: переставляется содержимое существующих узлов, а не сами узлы, поэтому отступы и структура файла не меняются, а диф остаётся перестановкой строк. Отличие в том, что меняется и имя тега: в py это присваивание el.tag, в PS имя элемента неизменяемо, поэтому узел заменяется через ReplaceChild — он сохраняет окружающие пробельные узлы на месте (тот же приём, что в meta-edit.ps1). Проверки: порты дают байт-в-байт одинаковый файл; повторный прогон пишет Modified: 0 и не меняет ни байта; на боевой выгрузке УТ (13 979 строк) команда сообщает Modified: 0 — там уже канон, и Bot остался между DefinedType и CommonCommand. Раундтрип через платформу 8.3.24: отсортированная конфигурация вернулась побайтово той же, то есть наш канон совпадает с платформенным и сортировка не создаёт работы следующей выгрузке. Правило видов с осмысленным порядком продолжает действовать для ИМЁН: в раундтрипе языки остались как были. Положение самой группы оно не регулирует — это порядок платформы. Три прежних кейса фиксировали поведение «группы не трогаем» и переписаны по факту. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QoAJmoNbgWKobA7JGgN5S3
This commit is contained in:
co-authored by
Claude Opus 5
parent
1bc943e846
commit
989b3490bc
@@ -1,4 +1,4 @@
|
||||
# cf-edit v1.25 — Edit 1C configuration root (Configuration.xml)
|
||||
# cf-edit v1.26 — Edit 1C configuration root (Configuration.xml)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
[CmdletBinding(PositionalBinding=$false)]
|
||||
param(
|
||||
@@ -595,6 +595,44 @@ function Do-SortChildObjects([string]$batchVal) {
|
||||
$script:modifyCount++
|
||||
Info "Sorted: $typeName ($($els.Count))"
|
||||
}
|
||||
|
||||
if ($requested.Count -gt 0) { return }
|
||||
|
||||
# Без аргумента приводим в порядок и сами группы видов: собранная навыками конфигурация
|
||||
# может держать их не в каноне, и первая же выгрузка платформы даст диф. Переставляем
|
||||
# содержимое существующих узлов, а не узлы, поэтому отступы и структура файла не меняются —
|
||||
# в дифе только перестановка строк. Имя тега у XmlElement неизменяемо, поэтому там, где вид
|
||||
# меняется, узел заменяется через ReplaceChild: он сохраняет окружающие пробельные узлы.
|
||||
$elems = @()
|
||||
foreach ($child in $script:childObjsEl.ChildNodes) {
|
||||
if ($child.NodeType -eq 'Element') { $elems += $child }
|
||||
}
|
||||
$tags = @(); $texts = @()
|
||||
foreach ($e in $elems) { $tags += $e.get_LocalName(); $texts += $e.InnerText }
|
||||
$rank = @()
|
||||
for ($i = 0; $i -lt $tags.Count; $i++) {
|
||||
$r = $script:typeOrder.IndexOf($tags[$i])
|
||||
if ($r -lt 0) { $r = $script:typeOrder.Count }
|
||||
$rank += $r
|
||||
}
|
||||
# Порядок стабильный: вторым ключом идёт исходная позиция
|
||||
$order = @(0..($tags.Count - 1) | Sort-Object @{e={$rank[$_]}}, @{e={$_}})
|
||||
$same = $true
|
||||
for ($i = 0; $i -lt $order.Count; $i++) { if ($order[$i] -ne $i) { $same = $false; break } }
|
||||
if ($same) { return }
|
||||
|
||||
for ($i = 0; $i -lt $elems.Count; $i++) {
|
||||
$srcIdx = $order[$i]
|
||||
if ($tags[$i] -ceq $tags[$srcIdx]) {
|
||||
$elems[$i].InnerText = $texts[$srcIdx]
|
||||
continue
|
||||
}
|
||||
$newEl = $script:xmlDoc.CreateElement($tags[$srcIdx], $script:mdNs)
|
||||
$newEl.InnerText = $texts[$srcIdx]
|
||||
[void]$script:childObjsEl.ReplaceChild($newEl, $elems[$i])
|
||||
}
|
||||
$script:modifyCount++
|
||||
Info "Reordered type groups: $($elems.Count) entries"
|
||||
}
|
||||
|
||||
# Стиль существующего файла для round-trip-сохранения: BOM / EOL / регистр encoding /
|
||||
|
||||
Reference in New Issue
Block a user