1C HBK BSL — расширение для VS Code / CursorРасширение подключает LSP-сервер Лицензия: см. LICENSE (MIT). Возможности
Python в рантайме не нужен — в работе участвует только нативный бинарник Откуда берётся сервер (
|
| Подход | Плюсы | Минусы |
|---|---|---|
Бинарник внутри VSIX (по платформам: darwin-arm64, linux-x64, …) |
Работает сразу после установки, без сети и без настройки; предсказуемая версия сервера. | Нужно собирать отдельный VSIX на целевую ОС; размер пакета больше. |
| Только скачивание с Releases | Меньший универсальный пакет; можно всегда тянуть последний билд с релиза. | Первый запуск требует сети; возможны лимиты GitHub; версия должна совпадать с расширением. |
Практическая рекомендация: для публикации в Marketplace оставить платформенные VSIX с вложенным бинарником (как сейчас в CI) — лучший UX. Скачивание с релиза — запасной путь и для пользователей без бинарника в пакете. Оба варианта в коде уже поддерживаются; приоритет у явного пути и вложенного bin/.
Настройки
Основные ключи (полный список — в package.json → contributes.configuration):
| Ключ | Назначение |
|---|---|
onecHbkBsl.serverPath |
Путь к onec-hbk-bsl или onec-hbk-bsl.exe |
onecHbkBsl.indexDbPath |
Путь к SQLite-индексу (пусто = по умолчанию) |
onecHbkBsl.logLevel |
Уровень логов LSP |
onecHbkBsl.diagnostics.enabled |
Включить диагностики при вводе |
onecHbkBsl.diagnostics.select / ignore |
Список кодов правил |
onecHbkBsl.format.indentSize |
Отступ при форматировании |
Стандартный editor.formatOnType для bsl не запускает полное форматирование файла при каждом символе: у сервера единственный триггер — перевод строки (\n), и ответ — одна правка только отступа текущей строки. Если отключите editor.formatOnType, отступ после Enter будет считаться только эвристикой редактора (language-configuration.json), без уточнения от LSP.
language-configuration.json: indentationRules (fallback без LSP)
В VS Code это декларативные regex (документация): при вводе/переносе строк редактор подстраивает отступ, если строка совпала с increaseIndentPattern (следующая строка глубже) или decreaseIndentPattern (текущая — меньше). Для JS/TS в примерах Microsoft чаще смотрят на незакрытые { ( [; у BSL блоки — ключевые слова (Если…Тогда, КонецЕсли, #Область и т.д.), поэтому паттерны другие.
У многих грамматик BSL для VS Code в типичной поставке в language-configuration.json часто только folding, без indentationRules — автоотступ при Enter там в основном даёт редактор (копирование отступа, editor.autoIndent) и/или языковой сервер, а не отдельный богатый JSON.
В нашем расширении regex дополняют типичный стиль 1С: многострочное условие с Тогда на отдельной строке и конец Цикл на отдельной строке, плюс #Область / #КонецОбласти. Это не заменяет семантику _indent_at в LSP при включённом formatOnType, но улучшает поведение, если LSP недоступен или отключён format on type.
Сборка расширения (разработчики)
Из каталога vscode-extension/:
npm ci
npm run compile # webpack → out/extension.js
Упаковка VSIX (локально) с тем же бинарником, что только что собрали — из корня репозитория (PyInstaller → vscode-extension/bin/ → webpack → vsce):
# один раз: зависимости расширения
cd vscode-extension && npm ci && cd ..
# свежий бинарник + VSIX (не вызывайте vsce без sync — попадёт старый bin/)
make vsix
Или вручную: make extension-bin (или make build и make sync-extension-bin), затем cd vscode-extension && npm run compile && npx @vscode/vsce package --no-dependencies -o onec-hbk-bsl-local.vsix.
Проверка типов без бандла:
npx tsc --noEmit -p ./
Репозиторий
Исходный код сервера, индексатор и CI:
https://github.com/mussolene/1c_hbk_bsl