/bsl-validate - вызовы общих модулей против выгрузки

SkillDev tools

Validates common module calls in BSL against a configuration export - whether the module exists and its method is exported. Works without the platform, using the index from 1c-config-index.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the /bsl-validate - вызовы общих модулей против выгрузки skill

What this skill tells your AI

The instructions your AI receives, as published by desko77/cursor-1c-skills in skills/1c-bsl-validate/SKILL.md and read by ahel’s review.

Отвечает на один вопрос: вызванный метод общего модуля вообще существует и экспортный ли он. Переименовали метод или сняли Экспорт - вызовы в других модулях об этом не узнают до запуска.

Работает без EDT, без платформы и без базы. Синтаксис BSL этот навык НЕ проверяет - для синтаксиса есть отдельный сервер 1c-syntax-checker-mcp.

Параметры

ПараметрОбяз.Умолч.Описание
ModulePathда-Файл .bsl либо каталог - тогда обходится рекурсивно
IndexPathда-Индекс от 1c-config-index
UnknownCallsнет-Дополнительно искать вызовы неизвестных имен (только общие модули)
Detailedнет-Показать счетчики даже когда есть замечания
MaxErrorsнет30Не выводить больше N замечаний

Команда

python skills/1c-config-index/scripts/config-index.py -ConfigPath src -OutFile .cache/index.json
python skills/1c-bsl-validate/scripts/bsl-validate.py -ModulePath src -IndexPath .cache/index.json
powershell.exe -NoProfile -File "skills/1c-bsl-validate/scripts/bsl-validate.ps1" -ModulePath "src" -IndexPath ".cache/index.json"

Основная проверка: метод общего модуля

Вызов вида ОбщиеФункции.Метод, где ОбщиеФункции есть в индексе среди общих модулей, проверяется точно: метод обязан быть в списке экспортных. Ложных срабатываний тут нет - левая часть однозначно опознана как общий модуль по имени из конфигурации.

Работает в ЛЮБЫХ модулях: формы, объекта, менеджера, общего.

Список экспортных методов индекс собирает разбором Ext/Module.bsl с вырезанными строчными комментариями. Закомментированная процедура призраком в список не попадет.

Дополнительная проверка: неизвестные имена (флаг -UnknownCalls)

Ищет Имя.Метод, где Имя не объявлено в модуле, не общий модуль и не глобальная коллекция платформы. Так ловится вызов УДАЛЕННОГО общего модуля.

Проверка идет только в общих модулях и только по флагу. Причина простая: у общего модуля список доступных имен замкнут - все, что не локальная переменная, параметр или глобальная коллекция, обязано быть общим модулем. У модуля формы или объекта это не так: Дерево.ПолучитьЭлементы обращается к реквизиту формы, который нигде не объявлен, и такая проверка выдала бы ложное срабатывание на каждый реквизит.

Локальными считаются: Перем, параметры процедур и функций (включая значения по умолчанию), цели присваиваний, переменные циклов Для и Для Каждого.

Список глобальных коллекций платформы в навыке заведомо НЕПОЛНЫЙ - их сотни. Именно поэтому проверка и включается флагом: с ним она полезна, без него ничего не портит.

Чего НЕ проверяется

Это не компилятор BSL. Без платформы недоступны типы выражений, число и типы параметров вызова, директивы компиляции, доступность метода с клиента или сервера.

Намеренно пропускается:

  • цепочки - в Справочники.Номенклатура.СоздатьЭлемент корнем считается Справочники, а не Номенклатура;
  • вызов через переменную - если имя объявлено в модуле, оно не трогается;
  • строковые литералы и комментарии вырезаются до разбора: тексты запросов внутри строк полны точек, иначе каждая вторая строка запроса стала бы вызовом.

Все замечания - предупреждения, код возврата всегда 0. Это самый шумный класс проверок из всех, что можно сделать по выгрузке, и ошибка тут дороже пропуска.

Связанные навыки

  • 1c-config-index - строит индекс, без него проверка не работает
  • 1c-query-validate - проверка текста запроса по той же выгрузке
  • 1c-cfe-patch-method - перехват метода в расширении

Signals

GitHub stars
57
Forks
13
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
x-1c-bsl-validate-desko77
Source
github.com/desko77/cursor-1c-skills