refactor(xdto-info): легенда обозначений в выводе, а не в инструкции

Инструкция несла 14-строчный пример вывода — то самое, что модель увидит,
запустив навык, но читаемое при каждой загрузке инструкции. Та же логика,
по которой из xdto-validate убран каталог проверок.

Легенда при этом нужна: ← Имя, [значение элемента], · Пакет из вывода сами
не читаются. Поэтому она переехала в вывод и печатается только для тех
обозначений, которые в нём реально встретились — на плоском типе легенды
нет вовсе. В самом навыке уже был такой прецедент: режим списка пакетов
поясняет свои колонки прямо в выводе.

Инструкция сократилась с 99 до 77 строк.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-07-26 13:05:15 +03:00
co-authored by Claude Opus 5
parent 105ba67cb5
commit 1a1bbbac6f
6 changed files with 66 additions and 30 deletions
@@ -491,6 +491,23 @@ function Show-PackageOverview($pkg) {
O "Следующий шаг: -Name <Тип> — структура типа для заполнения"
}
# Легенда едет вместе с выводом, а не живёт в инструкции: показываем только те
# обозначения, которые реально встретились, иначе она сама становится шумом.
function Write-Legend($rows) {
$text = ($rows | ForEach-Object { $_.Type + " " + ($_.Flags -join ",") + " " + ($_.Notes -join ",") }) -join " "
$items = @()
if ($text -match "объект ") { $items += "объект X — присвоить вложенный объект XDTO, состав раскрывает -Depth" }
if ($text -match "") { $items += "← Имя — исходный тип из схемы, слева от стрелки развёрнутое значение" }
if ($text -match "список") { $items += "список — коллекция, заполняется через .Добавить()" }
if ($text -match "до \d") { $items += "до N — коллекция с ограничением сверху" }
if ($text -match "значение элемента") { $items += "значение элемента — собственное значение узла XML" }
if ($text -match "·") { $items += "· Пакет — тип объявлен в другом пакете" }
if ($items.Count -eq 0) { return }
O ""
O "Обозначения:"
foreach ($i in $items) { O " $i" }
}
function Show-Type($pkg, [string]$typeName) {
$el = $pkg.Types[$typeName]
$kind = $el.get_LocalName()
@@ -525,6 +542,7 @@ function Show-Type($pkg, [string]$typeName) {
$own = @($rows | Where-Object { $_.Indent -eq 0 })
O "Свойства ($($own.Count)):"
Write-Rows $rows
Write-Legend $rows
O ""
O "Создание:"
O " Тип = ФабрикаXDTO.Тип(`"$($pkg.Namespace)`", `"$typeName`");"
@@ -2,6 +2,7 @@
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import os
import re
import sys
from lxml import etree
@@ -486,6 +487,31 @@ def show_package_overview(pkg):
O("Следующий шаг: -Name <Тип> — структура типа для заполнения")
# Легенда едет вместе с выводом, а не живёт в инструкции: показываем только те
# обозначения, которые реально встретились, иначе она сама становится шумом.
def write_legend(rows):
text = " ".join(r["Type"] + " " + ",".join(r["Flags"]) + " " + ",".join(r["Notes"]) for r in rows)
items = []
if "объект " in text:
items.append("объект X — присвоить вложенный объект XDTO, состав раскрывает -Depth")
if "" in text:
items.append("← Имя — исходный тип из схемы, слева от стрелки развёрнутое значение")
if "список" in text:
items.append("список — коллекция, заполняется через .Добавить()")
if re.search(r"до \d", text):
items.append("до N — коллекция с ограничением сверху")
if "значение элемента" in text:
items.append("значение элемента — собственное значение узла XML")
if "·" in text:
items.append("· Пакет — тип объявлен в другом пакете")
if not items:
return
O("")
O("Обозначения:")
for i in items:
O(" " + i)
def show_type(pkg, type_name):
el = pkg.Types[type_name]
if local(el) == "valueType":
@@ -522,6 +548,7 @@ def show_type(pkg, type_name):
own = [r for r in rows if r["Indent"] == 0]
O(f"Свойства ({len(own)}):")
write_rows(rows)
write_legend(rows)
O("")
O("Создание:")
O(f' Тип = ФабрикаXDTO.Тип("{pkg.Namespace}", "{type_name}");')