BSL Language Server
June 18, 2026 · View on GitHub
Реализация протокола language server protocol для языка 1C (BSL) - языка 1С:Предприятие 8 и OneScript.
- Руководство контрибьютора
- Возможности
- Запуск из командной строки
- Запуск в режиме websocket
- Запуск в режиме анализатора
- Запуск в режиме форматтера
- Запуск в режиме MCP
- Конфигурационный файл
- Репортеры
- Диагностики
- Дополнительные возможности
- Часто задаваемые вопросы
- Системные требования
- Благодарности
Замеры производительности - SSL 3.1
Возможности
Каждая возможность языкового сервера — с краткой анимированной демонстрацией (см. полный каталог):
- Автодополнение кода — Контекстные подсказки по мере ввода: глобальные функции, методы и свойства объектов (с выводом типа), типы после оператора
Новый, ключевые слова и локальные переменные. - Переход к определению — Переход к объявлению процедуры, функции, переменной или метода из места использования. Работает внутри модуля и между модулями конфигурации.
- Переход к реализациям — Для классов OneScript, использующих библиотеку наследования
extends: переход от метода интерфейса (&Интерфейс) ко всем одноимённым методам реализующих его классов (&Реализует). - Поиск использований — Поиск всех мест использования символа по проекту.
- Всплывающая документация — При наведении на символ показывает сигнатуру, тип и описание из комментариев.
- Подсказка по параметрам — При вводе вызова метода показывает список параметров и подсвечивает текущий.
- Диагностики — Подсветка ошибок, потенциальных проблем и нарушений стандартов прямо в коде и в панели Проблемы.
- Быстрые исправления — Предлагает автоматические исправления диагностик и рефакторинги по сочетанию клавиш у проблемного места.
- Форматирование — Форматирование всего документа, выделенного фрагмента и по мере набора (отступы, регистр ключевых слов).
- Переименование — Безопасное переименование символа со всеми его использованиями.
- Связанное редактирование — Редактирование объявления локального символа (переменной, параметра) одновременно изменяет все его вхождения в модуле — без вызова переименования.
- Структура документа — Дерево процедур, функций и областей модуля — в панели Структура и в быстром переходе.
- Поиск символов по проекту — Быстрый переход к любому методу или объекту во всём проекте по имени.
- Подсветка вхождений — Подсветка всех вхождений символа под курсором, а также парных ключевых слов конструкции (Если…КонецЕсли и т.п.).
- Иерархия вызовов — Кто вызывает метод и кого вызывает он — в виде разворачиваемого дерева.
- Иерархия типов — Для классов OneScript, использующих библиотеку наследования
extends: дерево супертипов и подтипов по аннотациям&Расширяети&Реализует. - Сворачивание кода — Сворачивание процедур, функций, областей и блоков для удобной навигации.
- Умное выделение — Пошаговое расширение и сужение выделения по синтаксическим границам.
- Семантическая подсветка — Точная подсветка на основе разбора кода: переменные, параметры, методы, аннотации, а также язык запросов (SDBL) внутри строк.
- Подсказки-вставки — Встроенные в код подсказки — например, имена параметров в вызовах.
- Код-линзы — Информационные строки над процедурами: когнитивная и цикломатическая сложность, запуск тестов и покрытие.
- Цвета: превью и палитра — Превью цвета для
Новый Цвет(...)иWebЦвета.*. Клик по образцу открывает палитру — выбор цвета обновляет код. Для веб-цветов доступна конвертация в RGB-представление (Новый Цвет) и обратно. - Гиперссылки в коде — Кликабельные ссылки прямо в тексте модуля: ссылки
См./Seeв документирующих комментариях ведут к упомянутому методу или объекту; URL в комментариях открываются в браузере; а опционально (по умолчанию выключено,documentLink.showDiagnosticDescription) сам диагностируемый фрагмент становится ссылкой на документацию диагностики.
Дополнительно (вне каталога демонстраций — командная строка и рабочие области):
- Запуск движка диагностик из командной строки
- Запуск форматирования файлов в каталоге из командной строки
- Поддержка работы с несколькими рабочими областями (multi-workspace)
Поддерживаемые операции протокола
??? workspace
| Операция | Поддержка | Комментарий |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
| didChangeWorkspaceFolders | | Динамическое добавление и удаление рабочих областей |
| didChangeConfiguration |
| с ограничениями, см. #1431 |
| didChangeWatchedFiles |
| |
| didCreateFiles |
| Фильтры:
**/*.bsl, **/*.os, каталоги |
| didRenameFiles | | Фильтры:
**/*.bsl, **/*.os, каталоги |
| didDeleteFiles | | Фильтры:
**/*.bsl, **/*.os, каталоги |
| symbol | | |
| executeCommand |
| |
| diagnostic/refresh |
| отправляется при изменении конфигурации |
| applyEdit |
| |
| willCreateFiles |
| |
??? "Text Synchronization"
| Операция | Поддержка | Комментарий |
| --------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
| didOpen | | | |
| didChange |
| textDocumentSyncKind = Incremental | |
| didClose |
| | |
| didSave |
| | |
| willSave |
| | |
| willSaveWaitUntil |
| | |
??? textDocument
| Операция | Поддержка | Комментарий | Конфигурируется? |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ---------------- |
| publishDiagnostics | | tagSupport = true
versionSupport = true
список диагностик | да |
| diagnostic | | interFileDependencies = true
workspaceDiagnostics = false | нет |
| completion | | resolveProvider = true
triggerCharacters = .
completionItem.labelDetailsSupport = true
Предлагает методы, функции и конструкторы с сигнатурами, члены типов после точки, локальные переменные и ключевые слова | |
| completionItem/resolve | | Ленивое дотягивание documentation (описание члена/функции) при поддержке клиентом | |
| hover |
| contentFormat = MarkupContent | |
| signatureHelp |
| triggerCharacters =
(, ,
retriggerCharacters = , | |
| declaration | | не применимо в 1С:Предприятие | |
| definition |
| linkSupport = true | |
| typeDefinition |
| | |
| implementation |
| только для интерфейсов OneScript библиотеки extends (&Реализует) | |
| references |
| | |
| documentHighlight |
| Подсветка связанных конструкций: if/elsif/else/endif, try/except/endtry, циклы, регионы, скобки | |
| documentSymbol |
| hierarchicalDocumentSymbolSupport = true | |
| codeAction |
| codeActionKinds = ? (см. #1433)
isPreferredSupport = true | да |
| codeAction/resolve | | | |
| codeLens |
| resolveProvider = true | да |
| codeLens/resolve |
| | |
| codeLens/refresh |
| | |
| documentLink |
| Показ гиперссылок на документацию по диагностикам.
tooltipSupport = true
resolveProvider = false | да |
| documentLink/resolve | | | |
| documentColor |
| | |
| colorPresentation |
| | |
| formatting |
| | |
| rangeFormatting |
| | |
| onTypeFormatting |
| firstTriggerCharacter =
\n
moreTriggerCharacter = ; | |
| rename | | | |
| prepareRename |
| | |
| foldingRange |
| | |
| selectionRange |
| | |
| prepareCallHierarchy |
| | |
| callHierarchy/incomingCalls |
| | |
| callHierarchy/outgoingCalls |
| | |
| prepareTypeHierarchy |
| только для OneScript-классов библиотеки extends | |
| typeHierarchy/supertypes |
| только для OneScript-классов библиотеки extends | |
| typeHierarchy/subtypes |
| только для OneScript-классов библиотеки extends | |
| semanticTokens/full |
| multilineTokenSupport = true | |
| semanticTokens/full/delta |
| | |
| semanticTokens/range |
| | |
| linkedEditingRange |
| | |
| moniker |
| | |
| inlayHint |
| resolveProvider = true | да |
| inlayHint/resolve |
| | |
| inlayHint/refresh |
| | |
Запуск из командной строки
Запуск jar-файлов осуществляется через java -jar path/to/file.jar.
java -jar bsl-language-server.jar --help
BSL language server
Usage: bsl-language-server [-h] [-c=<path>] [COMMAND [ARGS]]
-c, --configuration=<path>
Path to language server configuration file
-h, --help Show this help message and exit
Commands:
analyze, -a, --analyze Run analysis and get diagnostic info
format, -f, --format Format files in source directory
version, -v, --version Print version
lsp, --lsp LSP server mode (default)
websocket, -w, --websocket Websocket server mode
При запуске BSL Language Server в обычном режиме будет запущен сам Language Server, взаимодействующий по протоколу [LSP](language server protocol). Для взаимодействия используются stdin и stdout.
Ключ -c (--configuration) задаёт путь к конфигурационному файлу. Если ключ не указан, BSL Language Server автоматически ищет файл .bsl-language-server.json сначала в текущем каталоге, а затем в домашнем каталоге пользователя. Подробнее — на странице Конфигурационный файл.
По умолчанию тексты диагностик выдаются на русском языке. Для переключения языка сообщений от движка диагностик необходимо настроить параметр language в конфигурационном файле или вызвав событие workspace/didChangeConfiguration:
{
"language": "en"
}
Запуск в режиме websocket
По умолчанию взаимодействие с сервером идет через стандартные потоки ввода/вывода. Но вы можете запустить BSL Language Server со встроенным веб-сервером и взаимодействовать с ним через websocket.
Для этого необходимо запустить BSL Language Server с ключом --websocket или -w:
Usage: bsl-language-server websocket [-h] [--app.websocket.lsp-path=<path>]
[-c=<path>] [--server.port=<port>]
Websocket server mode
--app.websocket.lsp-path=<path>
Path to LSP endpoint. Default is /lsp
-c, --configuration=<path> Path to language server configuration file
-h, --help Show this help message and exit
--server.port=<port> Port to listen. Default is 8025
После запуска BSL Language Server будет доступен по адресу ws://localhost:8025/lsp.
Для переопределения порта к LSP-серверу необходимо использовать параметр --server.port, за которым следует номер желаемого порта.
Для переопределения пути к LSP-серверу необходимо использовать параметр --app.websocket.lsp-path, за которым следует желаемый путь, начинающийся с /.
Пример строки запуска BSL Language Server в режиме websocket с указанием порта 8080:
java -jar bsl-language-server.jar --websocket --server.port=8080
При работе с большим проектом рекомендуется дополнительно указывать параметр -Xmx, отвечающий за предел оперативной памяти для java процесса. Размер выделяемой памяти зависит от размера анализируемой кодовой базы.
java -Xmx4g -jar bsl-language-server.jar ...остальные параметры
Запуск в режиме анализатора
Для запуска в режиме анализа используется параметр --analyze (сокращенно -a).
Usage: bsl-language-server analyze [-hq] [-c=<path>] [-o=<path>] [-s=<path>]
[-r=<keys>]...
Run analysis and get diagnostic info
-c, --configuration=<path>
Path to language server configuration file
-h, --help Show this help message and exit
-o, --outputDir=<path> Output report directory
-q, --silent Silent mode
-r, --reporter=<keys> Reporter key (console, junit, json, tslint, generic)
-s, --srcDir=<path> Source directory
-w, --workspaceDir=<path>
Workspace directory
Для указания каталога расположения анализируемых исходников используется параметр --srcDir (сокращенно -s), за которым следует путь (относительный или абсолютный) к каталогу исходников.
Для формирования отчета об анализе требуется указать один из "репортеров". Для указания репортера используется параметр --reporter (сокращенно -r), за которым следует ключ репортера. Допустимо указывать несколько репортеров. Список репортетов см. в разделе Репортеры.
Пример строки запуска анализа:
java -jar bsl-language-server.jar --analyze --srcDir ./src/cf --reporter json
При анализе больших исходников рекомендуется дополнительно указывать параметр -Xmx, отвечающий за предел оперативной памяти для java процесса. Размер выделяемой памяти зависит от размера анализируемой кодовой базы.
java -Xmx4g -jar bsl-language-server.jar ...остальные параметры
Запуск в режиме форматтера
Для запуска в режиме форматтера используется параметр --format (сокращенно -f).
Usage: bsl-language-server format [-hq] [-s=<path>]
Format files in source directory
-h, --help Show this help message and exit
-q, --silent Silent mode
-s, --src=<path> Source directory or file
Для указания каталога расположения форматируемых исходников (или файла) используется параметр --src (сокращенно -s), за которым следует путь (относительный или абсолютный) к каталогу исходников (или файлу).
Пример строки запуска форматирования:
java -jar bsl-language-server.jar --format --src ./src/cf
Конфигурационный файл
Подробное описание конфигурационного файла приведено на этой странице
Благодарности
Огромное спасибо всем контрибьюторам проекта, всем участвовавшим в обсуждениях, помогавшим с тестированием.
Вы потрясающие!
Спасибо компаниям, поддерживающим проекты с открытым исходным кодом, а особенно тем, кто поддержали нас:
Создатель профессиональных инструментов разработки программного обеспечения, инновационных и мощных, JetBrains поддержал наш проект, предоставив лицензии на свои продукты, в том числе на IntelliJ IDEA Ultimate.
IntelliJ IDEA Ultimate один из лучших инструментов в своем классе.
Digilabs - авторы Алькир- программного комплекса по мониторингу производительности систем на базе 1С:Предприятие 8. Digilabs предоставляет нам серверные мощности для проведения постоянного тестирования производительности BSL Language Server.
