Справка платформы (синтаксис-помощник) питает hover, completion и разрешение имён по платформенным типам и методам. Анализатор читает её из корпуса — каталога-пакета с JSON и манифестом. Этот документ описывает два действия:
- собрать корпус из установленной платформы 1С;
- указать на него анализатору в конфигурации или переменной окружения.
Общее описание секции [platform_help] и остальных источников — в
configuration/PROJECT_CONFIGURATION.md.
Корпус собирается из установленной у вас платформы 1С. Тексты справки — материал 1С, он не покрыт лицензиями проекта; публикация собранного корпуса — вопрос ваших прав на справку 1С. См.
LICENSING.mdиNOTICE.md, который кладётся в каждый пакет.
- Установленная платформа 1С:Предприятие.
- Каталог установки, в котором лежат оба архива справки:
shcntx_ru.hbkиshlang_ru.hbk. Подойдёт каталог версии или его подкаталогbin: архивы ищутся сначала рядом с указанным каталогом, затем в егоbin.- Windows:
C:\Program Files\1cv8\<версия>\bin - Linux:
/opt/1cv8/x86_64/<версия>(или егоbin)
- Windows:
- Бинарь анализатора. Ниже он называется
bsl-analyzer; при запуске из исходников этоcargo run -p bsl-analyzer --bin bsl-analyzer-app --.
Внешние программы (7z и т. п.) не нужны: архивы читаются самим анализатором.
bsl-analyzer platform-help package
(--hbk-dir <КАТАЛОГ> | --corpus <ФАЙЛ.json>)
-o <НОВЫЙ_КАТАЛОГ>
--corpus-id <ИМЯ_СБОРКИ>
[--platform-version <ВЕРСИЯ>]
| Флаг | Назначение |
|---|---|
--hbk-dir |
Каталог с shcntx_ru.hbk и shlang_ru.hbk (см. выше). |
--corpus |
Вместо архивов — уже готовый корпус JSON, упаковывается как есть. Ровно один из --hbk-dir / --corpus обязателен. |
-o, --output |
Новый каталог пакета. Он не должен существовать: существующий каталог не перезаписывается. |
--corpus-id |
Стабильное имя сборки, например platform-help-8.3.27.2214. Обязателен. |
--platform-version |
Версия платформы корпуса. По умолчанию берётся из имени каталога установки, если оно является номером версии (8.3.27.2214); иначе версия в манифесте не указывается. |
Windows (PowerShell):
bsl-analyzer platform-help package `
--hbk-dir "C:\Program Files\1cv8\8.3.27.2214\bin" `
-o "D:\platform-help\8.3.27.2214" `
--corpus-id platform-help-8.3.27.2214Linux:
bsl-analyzer platform-help package \
--hbk-dir /opt/1cv8/x86_64/8.3.27.2214 \
-o ~/platform-help/8.3.27.2214 \
--corpus-id platform-help-8.3.27.2214Команда печатает манифест в JSON. Корпус перед записью проверяется на пригодность: пакет, который анализатор отверг бы, не создаётся.
Каталог <НОВЫЙ_КАТАЛОГ> с тремя файлами:
| Файл | Содержимое |
|---|---|
platform_data.json |
Корпус справки. |
manifest.json |
schema_version (1), corpus_id, platform_version (может отсутствовать), extractor_version, corpus_file (platform_data.json), sha256 корпуса. |
NOTICE.md |
Уведомление о том, что тексты корпуса — материал 1С. |
Пакет — обычные статические файлы; выложить его можно в любое доступное вам место, откуда их отдают по HTTP(S): веб-сервер, объектное хранилище, раздел релизов репозитория, общий сетевой каталог (для него подойдёт путь, URL не нужен). Требования для доступа по URL:
manifest.jsonиplatform_data.jsonлежат в одном каталоге: корпус берётся по имениcorpus_fileотносительно адреса манифеста;- манифест не больше 1 МиБ, корпус не больше 512 МиБ.
Проект не публикует корпус и не обещает его публикацию.
source = "external" и ровно один из двух ключей: path или url.
Локальный путь:
[platform_help]
source = "external"
path = "platform-help/8.3.27.2214"path — каталог пакета с manifest.json, сам manifest.json либо
отдельный platform_data.json (без манифеста версия справки считается
неизвестной). Относительный путь отсчитывается от каталога файла
конфигурации.
Адрес в сети:
[platform_help]
source = "external"
url = "https://example.org/platform-help/8.3.27.2214/manifest.json"url — адрес manifest.json, а не каталога и не корпуса. Анализатор
скачивает манифест и корпус, сверяет SHA-256 и только после этого сохраняет
копию в кэше пользователя отдельно для этого адреса. Если адрес позже
недоступен, используется последний валидный пакет того же адреса с
предупреждением в журнале; если его нет — справки нет.
Пустое значение, оба ключа сразу или ни одного — ошибка конфигурации.
export BSL_PLATFORM_HELP_CORPUS=/path/to/platform-help/8.3.27.2214$env:BSL_PLATFORM_HELP_CORPUS = "D:\platform-help\8.3.27.2214"export BSL_PLATFORM_HELP_CORPUS=https://example.com/platform-help/manifest.jsonЗначение — локальный путь (каталог пакета, manifest.json или
platform_data.json) либо http://- или https://-адрес manifest.json. Адрес грузится
тем же загрузчиком, что и url в [platform_help]: лимиты размера, SHA-256,
кэш для этого адреса и откат на последний валидный пакет того же адреса.
Пустое или состоящее из пробелов значение считается незаданным.
- Схема
http://иhttps://обрабатывается одинаково (регистр схемы не важен);http://передаёт данные без шифрования. Молчаливого отката на встроенные факты нет. - Значение, похожее на URL, но не являющееся
http://- илиhttps://-адресом (https:/host/m.json,http:/host/m.json,https//host/m.json,//user:pw@host/m.json,user:pw@host/m.json,ftp://…), не считается путём: это ошибка конфигурации, значение в журнал не печатается. Путь с буквой диска (C:/help) и путь, лишь упоминающий схему (./https://x), остаются путями; значение с?,#или@тоже считается адресом, поэтому путь с такими символами задаётся через[platform_help]сpath, а не переменной. - Переменная действует лишь когда в конфигурации нет секции
[platform_help]: заданная секция всегда имеет приоритет, а непустая переменная при этом игнорируется с предупреждением в журнале. - Библиотека
bsl-platformбез приложения читает из переменной только путь;https://-адрес даёт явную ошибку вhelp_missing_reason, а не попытку прочитать файл с таким именем. - В журнал и сообщения об ошибках адрес попадает без
user:password@, строки запроса и фрагмента: остаются схема, хост и путь.
При запуске (LSP, analyze, MCP) в журнал пишется одна строка:
- выбор источника переменной
BSL_PLATFORM_HELP_CORPUS, уровень info —platform help source chosen by the environment variableс полемsource; - переменная задана при наличии
[platform_help], уровень warn —BSL_PLATFORM_HELP_CORPUS is ignored: the configuration has a [platform_help] section, which decides the source; - успех, уровень info —
platform help loadedс полямиsource(external (<путь или url без userinfo и query>)),origin=external,location,platform_version,digest(SHA-256 корпуса),status,types,methods; - отказ, уровень warn —
platform help unavailable; platform lookups and docs are emptyс полемreason: причина (нет файла, не сошёлся SHA-256, адрес недоступен и т. п.).
Если принадлежащий адресу кэш использован вместо свежей загрузки, дополнительно
пишется предупреждение serving the last valid package downloaded from this URL.
Источник выбирается один раз при запуске: после смены [platform_help] или
переменной перезапустите сервер. Явно заданный источник другим не
подменяется: если он не загрузился, справки нет, а анализатор продолжает
работу.