Внезапно, даже не дожидаясь 2024-го года, выпущен новый релиз BSL Language Server под номером 0.22.0.
Можно сказать, что это maintainance-релиз, так как новой функциональности вроде как и нет. Зато до релиза дошли три очень важных внутренних изменения.
Во-первых, мы наконец-то переехали на Spring Boot 3.1 и JDK17. Помимо большей лицензионной чистоты (мы больше не нарушаем копирайты Оракл из-за использования “незаконных” аннотаций jsr-305), нам наконец-то доступны фичи вроде switch expressions, instanceOf pattern matching и прочие records. В моем топе, конечно же, вариант быстрого вызова
stream.toList() вместо длинного stream.collect(Collectors.toList()). Посмотрели таки во fluent, молодцы :DВо-вторых, была решена одна из самых старых (около 4 лет) проблем долгого “прогрева” сервера при начале работы, когда рассчитываются метаданные конфигурации, или контекст сервера наполняется файлами. Выражалось это в зависании всплывающей подсказки, задержке в появлении дерева символов документа, да и вообще BSL Language Server вёл себя очень неповоротливо. Как обычно, большинство проблем можно решить банальным чтением документации, а мне на будущее теперь в назидание напоминание, что про опасность долгих параллельных расчётов на общем пуле потоков в каждом втором ответе про многопоточку на StackOverflow пишут не просто так :)
И в-третьих, так называемая проблема логирования. Несколько месяцев назад в плагине для VSCode была обновлена зависимость от vscode-language-client - собственно бридж между самим VSCode и BSL Language Server, который занимается преобразованием запросов к/от сервера в конкретные окошки в редакторе. Среди прочего в этом обновлении было изменение поведения обработки получаемых данных “не по протоколу” - без требуемых заголовков и объектов. И если раньше language-client просто кидал информационное сообщение в отдельный лог, доступный в VSCode, то в новой версии ребята из Microsoft не придумали ничего лучше, чем просто падать с исключением и выключать подключённый лэнг сервер.
А что делает любое уважающее себя джава приложение, когда внутри себя перехватывает ошибку? Правильно, выводит предупреждение в лог… Из-за этого поведения и была большая часть падений BSL Language Server на стартапе, и теперь она решена - если к серверу подключен клиент, то вместо вывода сообщения в обычный выхлоп stdout, сообщение перехватывается и отправляется на клиента.
Чейнджлог как и всегда доступен по ссылочке ниже. Хотя я и так почти все рассказал :)
https://github.com/1c-syntax/bsl-language-server/releases/tag/v0.22.0