diff --git a/.claude/skills/help-add/scripts/add-help.ps1 b/.claude/skills/help-add/scripts/add-help.ps1 index 053c5c283..54689ff56 100644 --- a/.claude/skills/help-add/scripts/add-help.ps1 +++ b/.claude/skills/help-add/scripts/add-help.ps1 @@ -1,4 +1,4 @@ -# help-add v1.20 — Add built-in help to 1C object (+write_xml_file/write_utf8_bom: общий эталон записи) +# help-add v1.21 — Add built-in help to 1C object (+write_xml_file/write_utf8_bom: общий эталон записи) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -184,6 +184,17 @@ if (-not (Test-Path $extDir)) { exit 1 } +# Код языка идёт и в текст XML, и в имя файла страницы, поэтому проверяем его до записи: +# пустое значение дало бы файл «.html» и пустой , а разделитель пути — +# запись мимо каталога Ext/Help. Оба отказа платформы были бы тихими. +# +# Копия этой проверки есть в template-add (навыки автономны, формат «дескриптор + +# страница» у них общий). Держать копии одинаковыми — сознательно. +if ($Lang -notmatch '^[A-Za-z0-9_-]+$') { + Write-Error "Недопустимый код языка: '$Lang'`nОжидается код вида ru, en (буквы, цифры, дефис, подчёркивание)" + exit 1 +} + $helpXmlPath = Join-Path $extDir "Help.xml" if (Test-Path $helpXmlPath) { Write-Error "Справка уже существует: $helpXmlPath" diff --git a/.claude/skills/help-add/scripts/add-help.py b/.claude/skills/help-add/scripts/add-help.py index 6873d2f90..a4639f7ee 100644 --- a/.claude/skills/help-add/scripts/add-help.py +++ b/.claude/skills/help-add/scripts/add-help.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# help-add v1.20 — Add built-in help to 1C object (+write_xml_file/write_utf8_bom: общий эталон записи) +# help-add v1.21 — Add built-in help to 1C object (+write_xml_file/write_utf8_bom: общий эталон записи) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse @@ -329,6 +329,17 @@ def main(): print(f"Каталог объекта не найден: {ext_dir}. Проверьте путь ObjectName (например Catalogs/МойСправочник).", file=sys.stderr) sys.exit(1) + # Код языка идёт и в текст XML, и в имя файла страницы, поэтому проверяем его до записи: + # пустое значение дало бы файл «.html» и пустой , а разделитель пути — + # запись мимо каталога Ext/Help. Оба отказа платформы были бы тихими. + # + # Копия этой проверки есть в template-add (навыки автономны, формат «дескриптор + + # страница» у них общий). Держать копии одинаковыми — сознательно. + if not re.match(r"^[A-Za-z0-9_-]+$", lang): + print(f"Недопустимый код языка: '{lang}'", file=sys.stderr) + print("Ожидается код вида ru, en (буквы, цифры, дефис, подчёркивание)", file=sys.stderr) + sys.exit(1) + help_xml_path = os.path.join(ext_dir, "Help.xml") if os.path.exists(help_xml_path): print(f"Справка уже существует: {help_xml_path}", file=sys.stderr) diff --git a/tests/skills/cases/help-add/lang-invalid.json b/tests/skills/cases/help-add/lang-invalid.json new file mode 100644 index 000000000..57aeee00e --- /dev/null +++ b/tests/skills/cases/help-add/lang-invalid.json @@ -0,0 +1,20 @@ +{ + "name": "Недопустимый код языка отвергается до записи", + "preRun": [ + { + "script": "epf-init/scripts/init", + "args": { + "-Name": "МояОбработка", + "-SrcDir": "{workDir}" + } + } + ], + "params": { + "objectName": "МояОбработка" + }, + "args_extra": [ + "-Lang", + "../evil" + ], + "expectError": "Недопустимый код языка" +}