Общие изменения
- Добавлено слияние контекста расширений и основной конфигурации. Поиск ссылок, переходы к определению и прочие механизмы языкового сервера теперь корректно работают при переходах из основной конфигурации в расширение и обратно;
- В процедуру чтения метаданных добавлено чтение стандартных реквизитов, что должно снизить шум от диагностик языка запросов;
- Расширена реализация Language Server Protocol:
- поддержана инкрементальная модель синхронизации содержимого документов в запросе
textDocument/didChange- меньший объем передаваемых данных между клиентом и сервером при редактировани файлов; - добавлена обработка запросов
textDocument/diagnostic- асинхронный запрос диагностик с клиента, когда клиент считает нужным обновить диагностики, вместо принудительной отправки диагностик с сервера (textDocument/publishDiagnostics). Старый режим отправки диагностик отключается, если клиент поддерживается запрос диагностик с клиента; - добавлена обработка запросов
textDocument/semanticTokens/full- теперь языковой сервер помогает семантически разукрашивать текст в редакторе на основе имеющегося у него контекста проекта; - добавлена обработка запросов
workspace/didChangeWatchedFiles- теперь изменения файлов вне редактора будут приводить к обновлению состояния в контексте языкового сервера, например,git checkoutили создание/изменение файлов через консоль; - добавлена обработка запросов
workspace/diagnostic/refresh- изменение конфигурации языкового сервера будет отправлять на клиента запрос обновления диагностик;
- поддержана инкрементальная модель синхронизации содержимого документов в запросе
- Поставляемые дистрибутивы теперь имеют базовое ограничение в 4 GB RAM;
- В конфигурационный файл добавлены:
diagnostics->minimumLSPDiagnosticLevel- позволяет задать минимальный уровень серьезности LSP диагностик для запуска. Диагностики с уровнем серьезности ниже указанного не будут запускаться;diagnostics->overrideMinimumLSPDiagnosticLevel- позволяет задать минимальный уровень серьезности для LSP диагностик. Если уровень диагностики ниже указанного, он будет повышен до указанного;diagnostics->metadata- коллекция (соответствие) переопределений метаданных диагностик. Элементами коллекции являются json-объекты, где ключом объекта являтеся ключ диагностики, а значением - json-объект с переопределяемыми параметрами диагностики. Можно переопределить:type,severity,scope,modules,minutesToFix,activatedByDefault,compatibilityMode,tags,canLocateOnProject,extraMinForComplexityиlspSeverity;references->commonModuleAccessors- cписок паттернов "Модуль.Метод" для методов, возвращающих ссылку на общий модуль (например, `ОбщегоНазначения.ОбщийМодуль("ИмяМодуля");capabilities- коллекция для переопределения параметров инициализации языкового сервера;
- Все запросы к документу (диагностики, всплывающая подсказка и проч) теперь дожидаются применения очереди изменений к документу (didChange) перед началом отработки. Это должно снизить количество ошибок, возникающих из-за рассинхронизации данных между различными компонентами сервера и контекстом документа;
- Расширение поддержки OneScript - добавлена поддержка аннотаций как значений параметров аннотаций;
- Добавлено определение обращений к общим модулям через конструкцию вида
МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");. Для таких обращений теперь работает поиск ссылок, информация о наведении и другие операции, поддерживаемые для обычных обращений к методам черезУправлениеДоступом; - Добавлена всплывающая подсказка при наведении на имя общего модуля;
- Оптимизация хранения внутренних структур данных для снижения потребления оперативной памяти;
- Расчет контекста конфигурации теперь происходит после получения уведомления
initialized, а не во время ответа наinitialize;
Новые диагностики
- Логическое 'ИЛИ' в соединениях запроса (LogicalOrInJoinQuerySection);
- Разыменование ссылочных полей запроса через точку (QueryNestedFieldsByDot);
- Серверные вызовы в событиях форм (ServerCallsInFormEvents);
- Небезопасное использование метода НайтиПоКоду() (UnsafeFindByCode);
- Бесполезный тернарный оператор (UselessTernaryOperator);
Изменения существующих диагностик
- Typo - добавлено кэширование результатов проверки орфографии на диске. Кэш создается в каталоге пользователя, хранится в разрезе пути к проверяемому проекту, и содержит до 125.000 значений или 3 МБ на проект. Возможен перенос кэша для использования на CI, подробнее - см. документацию;
- MagicDate - даты, используемые в качестве ключей или значений структур и соответствий больше не считаются магическими;
- MagicNumber - числа, используемые в качестве ключей или значений структур и соответствий больше не считаются магическими;
- TransferringParametersBetweenClientAndServer - добавлена возможность указания список имен параметров, которые игнорируются диагностикой, т.к. явно используются в форме для клиентского кэширования значений;
- AllFunctionPathMustHaveReturnDiagnostic - добавлен учет условий препроцессора;
- ExternalAppStartingDiagnostic - тип диагностики изменен на
SecurityHotspot; - LineLengthDiagnostic - добавлен параметр
excludeTrailingComments, позволяющий подавить срабатывания диагностики на строках с концевыми комментариями; - MissingSpaceDiagnostic - исправлены падения при наличии знаков пунктуации в начале или конце модуля;
- QueryToMissingMetadataDiagnostic - добавлена поддержка кубов и измерений кубов при обращении к Внешним Источникам Данных;
- UnreachableCodeDiagnostic - добавлена проверка блоков кода в теле модуля;
- Множественные уточнения документации к диагностикам;
Исправленные общие ошибки
- Исправлены выявленные ошибки в построителях ControlFlowGraph и ExpressionTree, приводившие к различным падениям при наборе текста;
- Исправлена взаимоблокировка, возникающая при активном взаимодействии с документом в редакторе, приводившая к полной остановке получения ответов по документу от языкового сервера;
- Исправлена ошибка, когда трейс-лог мог не включаться до пересохранения конфигурационного файла при работающем языковом сервере;
- Исправлена ошибка не србатывания игнорирования дианостик в файле, содержащем только комментарии;
- Исправлена невозможность переопределения параметров логирования или spring через аргументы командной строки;
- Исправлена ошибка, которая могла приводить к зависанию процесса языкового сервера при выводе сообщения в момент закрытия контекста приложения;
Обновление значимых зависимостей
- Spring Boot:
3.4.4->3.5.8 - Language Tool:
6.5->6.7 - BSL Parser:
0.26.0->0.29.0 - MDClasses:
0.15.0->0.17.0
Изменения для разработчиков
- Сборка дистрибутивов и релизных jar-файлов переведена на JDK 25;
- Тестирование производится под версиями JDK 17, 21 и 25;
- Оптимизированы сборочные линии в pull-request - теперь дублирующиея события on push не выполняются, если для этой ветки существует pull-request;
- В аннотацию
DiagnosticMetadataдобавлено свойствоlspSeverity, позволяющее переопределить рассчитываему серьезность диагностики по LSP на предоставленное значение; - Проект переведен на использование jspecify для обеспечения null-безопасности;
- Расширено покрытие классов javadoc'ами;
- Починена автоконфигурация Sentry из соответствующего стартера;
- В связи с развитием форка
1c-syntax/antlrи перенесом большей части доработок в ядро antlr, классBSLParserRuleContextзаменен наParserRuleContext; - Добавлено событие
ServerContextDocumentRemovedEvent; - Добавлен метод
DocumentContext#getMdoRefдля упрощения получения mdoRef без необходимости вызоваMdoRefBuilder. - Добавлены новые варианты вызова
DiagnosticStorage#addDiagnostic; - ReferenceIndex теперь содержит ссылки на общие модули;
- Некоторые методы
Treesсделаны дженериками для автоматического приведения типов; - Репозиторий подключен к DeepWiki.
Спасибо!
- @asosnoviy
- @Copilot
- @EvilBeaver
- @johnnyshut
- @Levon444
- @nixel2007
- @ovcharenko-di
- @sagittarius-s
- @theshadowco
New Contributors
- @Copilot made their first contribution in #3481
- @johnnyshut made their first contribution in #3538
- @sagittarius-s made their first contribution in #3638
- @Levon444 made their first contribution in #3471
Full Changelog: v0.24.2...v0.25.0