From 21ebd814ded4aa8f96656873654c133d5426bd5b Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Tue, 29 Sep 2026 17:38:19 +0300 Subject: [PATCH] =?UTF-8?q?fix(skd-validate):=20=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=BF=D0=BE=20=D1=80=D0=B5=D0=B2=D1=8C=D1=8E=20?= =?UTF-8?q?=E2=80=94=20=D0=B1=D0=B8=D1=82=D0=B0=D1=8F=20=D1=81=D1=85=D0=B5?= =?UTF-8?q?=D0=BC=D0=B0=20=D0=B8=20MaxErrors=20=D0=B2=20XSD-=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Битый .xsd в каталоге версии давал необработанное исключение (PS — на чтении схем, py — на построении модели подсказок); теперь в обоих портах предупреждение «do not compile — not checked». Отложенные ошибки атрибутов в PS учитывают MaxErrors на каждой строке. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018dc2yLQfw6wppbopM1Y4Ps --- .claude/skills/skd-validate/scripts/skd-validate.ps1 | 12 ++++++++---- .claude/skills/skd-validate/scripts/skd-validate.py | 3 ++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.claude/skills/skd-validate/scripts/skd-validate.ps1 b/.claude/skills/skd-validate/scripts/skd-validate.ps1 index d0c6c8b29..ce04ba565 100644 --- a/.claude/skills/skd-validate/scripts/skd-validate.ps1 +++ b/.claude/skills/skd-validate/scripts/skd-validate.ps1 @@ -1211,10 +1211,13 @@ function Invoke-XsdCheck { # дописываем элемент в саму схему СКД: вторую схему того же namespace без SourceUri # XmlSchemaSet молча отбрасывает. $schemas = @() - foreach ($f in Get-ChildItem -LiteralPath $useDir -Filter *.xsd -File) { - $fs = [System.IO.File]::OpenRead($f.FullName) - try { $schemas += [System.Xml.Schema.XmlSchema]::Read($fs, $null) } finally { $fs.Dispose() } - } + # Битый .xsd (например, недокачанный) — предупреждение, а не падение навыка + try { + foreach ($f in Get-ChildItem -LiteralPath $useDir -Filter *.xsd -File) { + $fs = [System.IO.File]::OpenRead($f.FullName) + try { $schemas += [System.Xml.Schema.XmlSchema]::Read($fs, $null) } finally { $fs.Dispose() } + } + } catch { Report-Warn "XSD: schemas in '$useDir' do not compile — not checked: $($_.Exception.Message)"; return } $dcs = $schemas | Where-Object { $_.TargetNamespace -ceq $xsdDcsNs } | Select-Object -First 1 $hasRoot = $false foreach ($it in $dcs.Items) { @@ -1283,6 +1286,7 @@ function Invoke-XsdCheck { # Имя — в дети родителя (и у пустого элемента: он тоже сосед для подсказки) if ($script:xsdStack.Count -gt 0) { [void]$script:xsdStack[$script:xsdStack.Count - 1].children.Add($r.LocalName) } foreach ($pa in $script:xsdPending) { + if ($script:stopped) { break } $xt = $r.GetAttribute("type", "http://www.w3.org/2001/XMLSchema-instance") $info = @{ elem = $r.LocalName; parent = $(if ($script:xsdStack.Count -gt 0) { $script:xsdStack[$script:xsdStack.Count - 1].name } else { '' }); xsiNs = ''; xsiLocal = '' } if ($xt) { diff --git a/.claude/skills/skd-validate/scripts/skd-validate.py b/.claude/skills/skd-validate/scripts/skd-validate.py index 4c6289ef9..ea0cab440 100644 --- a/.claude/skills/skd-validate/scripts/skd-validate.py +++ b/.claude/skills/skd-validate/scripts/skd-validate.py @@ -1309,11 +1309,12 @@ def xsd_check(): use_ver = cands[0] exact = use_ver == ver - model = xsd_model(os.path.join(xsd_root, use_ver)) tmp = tempfile.mkdtemp(prefix="skd-xsd-") try: try: schema = _xsd_build_schema(os.path.join(xsd_root, use_ver), tmp) + # Модель — после компиляции, как в PS-мастере: битый .xsd даёт предупреждение, а не трейсбэк + model = xsd_model(os.path.join(xsd_root, use_ver)) except Exception as ex: report_warn(f"XSD: schemas in '{os.path.join(xsd_root, use_ver)}' do not compile — not checked: {ex}") return