mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-17 23:35:22 +03:00
refactor(xdto-info): легенда обозначений в выводе, а не в инструкции
Инструкция несла 14-строчный пример вывода — то самое, что модель увидит, запустив навык, но читаемое при каждой загрузке инструкции. Та же логика, по которой из xdto-validate убран каталог проверок. Легенда при этом нужна: ← Имя, [значение элемента], · Пакет из вывода сами не читаются. Поэтому она переехала в вывод и печатается только для тех обозначений, которые в нём реально встретились — на плоском типе легенды нет вовсе. В самом навыке уже был такой прецедент: режим списка пакетов поясняет свои колонки прямо в выводе. Инструкция сократилась с 99 до 77 строк. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
105ba67cb5
commit
1a1bbbac6f
@@ -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}");')
|
||||
|
||||
Reference in New Issue
Block a user