Skip to content

Latest commit

 

History

History
282 lines (217 loc) · 29.7 KB

index.md

File metadata and controls

282 lines (217 loc) · 29.7 KB

BSL Language Server

Actions Status Download JitPack GitHub Releases GitHub All Releases Quality Gate Maintainability Coverage Qodana Transifex Benchmark telegram

Реализация протокола language server protocol для языка 1C (BSL) - языка 1С:Предприятие 8 и OneScript.

Замеры производительности - SSL 3.1

Возможности

  • Форматирование файла
  • Форматирование выбранного диапазона
  • Определение символов текущего файла (области, процедуры, функции, переменные, объявленные через Перем)
  • Определение сворачиваемых областей - #Область, #Если, процедуры и функции, блоки кода, пакеты запросов
  • Показ когнитивной и цикломатической сложности метода
  • Всплывающая подсказка по локальным методам и методам общих модулей/модулей менеджеров
  • Переходы к определению методов
  • Поиск мест использования методов
  • Иерархия вызовов методов
  • Расширение текущего выделения (expand selection)
  • Отображение представления цвета и конвертация между Цвет и WebЦвета
  • Диагностики
  • "Быстрые исправления" (quick fixes) для ряда диагностик и "быстрые действия" (code actions)
  • Запуск движка диагностик из командной строки
  • Запуск форматирования файлов в каталоге из командной строки
  • Переименование символов

Поддерживаемые операции протокола

??? workspace | Операция | Поддержка | Комментарий | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | | didChangeWorkspaceFolders | no | | | didChangeConfiguration | yes | с ограничениями, см. #1431 | | didChangeWatchedFiles | no | | | symbol | yes | | | executeCommand | yes | | | applyEdit | no | | | willCreateFiles | no | |

??? "Text Synchronization" | Операция | Поддержка | Комментарий | | --------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | | didOpen | yes | | | | didChange | yes | textDocumentSyncKind = Full | | | didClose | yes | | | | didSave | yes | | | | willSave | no | | | | willSaveWaitUntil | no | | |

??? textDocument | Операция | Поддержка | Комментарий | Конфигурируется? | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ---------------- | | publishDiagnostics | yes | tagSupport = true
versionSupport = true
список диагностик | да | | completion | no | resolveProvider = false | | | completionItem/resolve | no | | | | hover | yes | contentFormat = MarkupContent | | | signatureHelp | no | | | | declaration | no | не применимо в 1С:Предприятие | | | definition | yes | linkSupport = true | | | typeDefinition | no | | | | implementation | no | не применимо в 1С:Предприятие | | | references | yes | | | | documentHighlight | no | | | | documentSymbol | yes | hierarchicalDocumentSymbolSupport = true | | | codeAction | yes | codeActionKinds = ? (см. #1433)
isPreferredSupport = true | да | | codeAction/resolve | no | | | | codeLens | yes | resolveProvider = false | да | | codeLens/resolve | yes | | | | codeLens/refresh | yes | | | | documentLink | yes | Показ гиперссылок на документацию по диагностикам.
tooltipSupport = true
resolveProvider = false | да | | documentLink/resolve | no | | | | documentColor | yes | | | | colorPresentation | yes | | | | formatting | yes | | | | rangeFormatting | yes | | | | onTypeFormatting | no | | | | rename | yes | | | | prepareRename | yes | | | | foldingRange | yes | | | | selectionRange | yes | | | | prepareCallHierarchy | yes | | | | callHierarchy/incomingCalls | yes | | | | callHierarchy/outgoingCalls | yes | | | | semanticTokens | no | | | | linkedEditingRange | no | | | | moniker | no | | | | inlayHint | yes | resolveProvider = false | да | | inlayHint/resolve | no | | | | inlayHint/refresh | yes | | |

Запуск из командной строки

Запуск 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.

По умолчанию тексты диагностик выдаются на русском языке. Для переключения языка сообщений от движка диагностик необходимо настроить параметр 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

Конфигурационный файл

Подробное описание конфигурационного файла приведено на этой странице

Благодарности

Огромное спасибо всем контрибьюторам проекта, всем участвовавшим в обсуждениях, помогавшим с тестированием.

Вы потрясающие!

Спасибо компаниям, поддерживающим проекты с открытым исходным кодом, а особенно тем, кто поддержали нас:


YourKit

Создатель инновационных и интеллектуальных инструментов для профилирования приложений Java и .NET YourKit, LLC любезно предоставил нам лицензии на продукт YourKit Java Profiler.

С помощью YourKit Java Profiler мы мониторим и улучшаем производительность проекта.


JetBrains

Создатель профессиональных инструментов разработки программного обеспечения, инновационных и мощных, JetBrains поддержал наш проект, предоставив лицензии на свои продукты, в том числе на IntelliJ IDEA Ultimate.

IntelliJ IDEA Ultimate один из лучших инструментов в своем классе.


Digilabs

Digilabs - авторы Алькир- программного комплекса по мониторингу производительности систем на базе 1С:Предприятие 8. Digilabs предоставляет нам серверные мощности для проведения постоянного тестирования производительности BSL Language Server.