mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-21 17:55:53 +03:00
fix(meta-info,meta-compile,+5): правки по ревью — регистр, BOM, голый менеджер, порог
Семь находок ревью, все подтверждены воспроизведением: 1. Голый менеджер в источниках печатался по-английски: карта объектных видов применялась только к форме с точкой, а meta-compile пишет «cfg:DocumentManager» обычным v8:Type. Восемнадцать добавленных *Manager-записей были недостижимы. Суффикс «(все)» ему не ставится — это сам тип менеджера, а не класс объектов. 2. Новые регулярки прощающего ввода расходились между портами: -replace в PowerShell регистронезависим, re.sub — нет. «ДокументОбъект (Все)» проходил в ps1 и падал в py. Добавлен re.IGNORECASE — это задокументированная ловушка портирования, и она же снова сработала. 3. В шесть py-портов попал BOM (перекодировка при бампе версии), и перед «#!/usr/bin/env python3» он ломает shebang на POSIX. Снят там, где его не было в HEAD; в mxl-compile.py он был изначально и оставлен. 4. Правило со стрелкой из Resolve-TypeStr убрано. form-compile режет тип по [|+] ДО резолвера, поэтому строка глоссария «A -> B | C» молча превращалась в составной тип «A | C» вместо одного A. Половина строки, принятая за тип, — хуже громкого отказа. Остались суффикс «(все)» и счётчик «— типов: N». 5. py-порт meta-info не переиспользовал общий климб до корня конфигурации: правка тогда молча не применилась, и порты разошлись по структуре. 6. Found выставлялся до разбора состава определяемого типа: падение внутри давало «состав пуст» — ложь вместо «файл типа не разобран». 7. Порог сворачивания источников считался по сумме множеств и явных типов, а сворачивались только явные: пять множеств плюс один тип прятали этот тип, а шесть типов без множеств давали «и ещё» после пустоты. Порог теперь по числу явных типов, «и ещё» убрано как ложное. Плюс формы источника подписки описаны в reference самого навыка: раньше они были только в docs/meta-dsl-spec.md, а навык обязан быть самодостаточным. Добавлен кейс на голого менеджера — без него находка 1 вернулась бы незамеченной. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
510c9163e3
commit
e9d45984dc
@@ -2503,9 +2503,6 @@ function Resolve-TypeStr {
|
||||
$typeStr = ($typeStr -replace '\s*\((?:все|all)\)\s*$', '').Trim()
|
||||
$typeStr = ($typeStr -replace '\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '').Trim()
|
||||
$typeStr = ($typeStr -replace '\s*\((?:типов|types):\s*\d+\)\s*$', '').Trim()
|
||||
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||
# раскрытие справа — берём левую часть, она и есть тип.
|
||||
if ($typeStr -match '^(.+?)\s*(?:→|->)\s*.+$') { $typeStr = $Matches[1].Trim() }
|
||||
|
||||
# Параметризованные типы: Number(15,2), Строка(100)
|
||||
if ($typeStr -match '^([^(]+)\((.+)\)$') {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/env python3
|
||||
# form-compile v1.199 — Compile 1C managed form from JSON or object metadata
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
import argparse
|
||||
@@ -3912,14 +3912,9 @@ def resolve_type_str(type_str):
|
||||
# и счётчик состава. Копипаста строки оттуда — обычный путь, поэтому хвост снимаем молча.
|
||||
# Срезаем ТОЛЬКО эти известные формы: круглые скобки заняты параметризованными типами
|
||||
# (Число(15,2)), слепой срез скобок сломал бы их.
|
||||
type_str = re.sub(r'\s*\((?:все|all)\)\s*$', '', type_str).strip()
|
||||
type_str = re.sub(r'\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '', type_str).strip()
|
||||
type_str = re.sub(r'\s*\((?:типов|types):\s*\d+\)\s*$', '', type_str).strip()
|
||||
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
|
||||
# раскрытие справа — берём левую часть, она и есть тип.
|
||||
m = re.match(r'^(.+?)\s*(?:→|->)\s*.+$', type_str)
|
||||
if m:
|
||||
type_str = m.group(1).strip()
|
||||
type_str = re.sub(r'\s*\((?:все|all)\)\s*$', '', type_str, flags=re.IGNORECASE).strip()
|
||||
type_str = re.sub(r'\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '', type_str, flags=re.IGNORECASE).strip()
|
||||
type_str = re.sub(r'\s*\((?:типов|types):\s*\d+\)\s*$', '', type_str, flags=re.IGNORECASE).strip()
|
||||
# Параметризованные типы: Number(15,2), Строка(100)
|
||||
m = re.match(r'^([^(]+)\((.+)\)$', type_str)
|
||||
if m:
|
||||
|
||||
Reference in New Issue
Block a user