mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-02 08:20:49 +03:00
feat(cf-edit): виды с осмысленным порядком не сортируются автоматически
Правило «Subsystem не упорядочиваем» распространено на четыре вида и вынесено в семью is_order_sensitive_type / Test-OrderSensitiveType: раньше литерал "Subsystem" был размазан по четырём точкам — регистрация в Register-InChildObjects, add-childObject, заимствование в расширение и сортировка. CommonAttribute — исключение самого стандарта #std467: у общих реквизитов-разделителей порядок в дереве задаёт порядок установки параметров сеанса (https://github.com/1C-Company/v8-code-style/issues/78). Единственный из четырёх, где сортировка ломает поведение, а не только диф. CommandGroup и Language добавлены по замерам. В ACC 15 живых групп команд из 39 не перечислены ни в одном GroupsOrder — как и подсистемы, они падают на порядок дерева. Порядок языков задаёт порядок <v8:item> в мультиязычных строках по всей выгрузке. Прежний вывод «сортировать их безопасно» опирался на стендовый прогон, где не было ни подсистем (а значит и CommandInterface.xml), ни второго языка у объектов: ломаться там было нечему, и отсутствие изменений ничего не доказывало. PaletteColor сортируется — это переменные цветов. Второе послабление стандарта (объекты «Удалить*» можно держать в конце ветки) не реализуем: типовые им не пользуются — в ACC 360 таких объектов из 373 стоят по алфавиту, а сортировка стандарту не противоречит. Оговорено в гайде. 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
ecde0d1c41
commit
1046e6018c
@@ -386,6 +386,21 @@ def get_new_object_position(cfg_dir):
|
||||
return "end"
|
||||
|
||||
|
||||
def is_order_sensitive_type(type_name):
|
||||
"""Виды, у которых порядок в дереве несёт смысл: автоматически их не упорядочиваем.
|
||||
|
||||
CommonAttribute — исключение самого стандарта (#std467): у общих реквизитов-разделителей
|
||||
порядок в дереве задаёт порядок установки параметров сеанса. Subsystem и CommandGroup:
|
||||
пока они не перечислены в <SubsystemsOrder> / <GroupsOrder> файла Ext/CommandInterface.xml,
|
||||
порядок дерева задаёт порядок в интерфейсе, а платформа эти списки сама не заводит
|
||||
(в выгрузке ACC вне GroupsOrder 15 живых групп из 39). Language: порядок языков задаёт
|
||||
порядок <v8:item> в мультиязычных строках по всей выгрузке.
|
||||
Явно названный вид сортируется в любом случае.
|
||||
Реестр семьи: tests/skills/check-inline-drift.mjs.
|
||||
"""
|
||||
return type_name in ("CommonAttribute", "Subsystem", "CommandGroup", "Language")
|
||||
|
||||
|
||||
def compare_metadata_names(a, b):
|
||||
"""Порядок имён объектов метаданных, как в дереве Конфигуратора.
|
||||
|
||||
@@ -795,7 +810,7 @@ def main():
|
||||
# end (по умолчанию) кладёт после последнего объекта того же вида, byName — по имени.
|
||||
# Subsystem по имени не упорядочиваем никогда: порядок подсистем в дереве задаёт
|
||||
# порядок разделов в панели, пока их не перечислили в <SubsystemsOrder>.
|
||||
by_name = (type_name != "Subsystem"
|
||||
by_name = (not is_order_sensitive_type(type_name)
|
||||
and get_new_object_position(config_dir) == "byName")
|
||||
insert_before = None
|
||||
last_same = None
|
||||
@@ -867,7 +882,7 @@ def main():
|
||||
continue
|
||||
groups.setdefault(localname(child), []).append(child)
|
||||
|
||||
targets = requested or [t for t in groups if t != "Subsystem"]
|
||||
targets = requested or [t for t in groups if not is_order_sensitive_type(t)]
|
||||
for type_name in targets:
|
||||
els = groups.get(type_name, [])
|
||||
if len(els) < 2:
|
||||
|
||||
Reference in New Issue
Block a user