github 1c-syntax/bsl-language-server v0.25.0

18 hours ago

Общие изменения

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

Новые диагностики

Изменения существующих диагностик

  • 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.

Спасибо!

New Contributors

Full Changelog: v0.24.2...v0.25.0

Don't miss a new bsl-language-server release

NewReleases is sending notifications on new releases.