Releases: 1c-syntax/bsl-language-server
Release list
v1.0.5
What's Changed
Общие исправления
- fix(mcp): устранить дедлок analyze_file на .os-классах Autumn by @sfaqer in #4273
- fix(inlayhints): не показывать тип переменной, если имя уже несёт имя типа by @nixel2007 in #4267
Улучшения производительности
- fix(references): атомарная переиндексация и обновление индекса замороженных документов by @sfaqer in #4261
- perf(references): массивы вместо concurrent-множеств в LocationRepository (−305 МиБ, чтение 42×, индексация 37×) by @nixel2007 in #4271
- perf(references): компактное хранение обращений + пакетная запись (−375 МиБ) by @nixel2007 in #4272
- perf(references): слить Location в SymbolOccurrence (−~85 МиБ) by @nixel2007 in #4270
- perf: снизить память и время генерации SARIF (analyze) — #4248 by @sfaqer in #4275
- perf(references): компактный SymbolOccurrence через short-координаты by @nixel2007 in #4276
- perf(reporters): вычислять метрики документов только при необходимости by @nixel2007 in #4278
Full Changelog: v1.0.4...v1.0.5
v1.0.4
Изменения и исправления
- fix(cli): Защита от неожиданного включения DEBUG-режима Spring Boot (в том числе в Code plugin) by @nixel2007 in #4244
Множественные оптимизации скорости работы и потребления памяти:
- perf(references): индекс вхождений по строке для O(1) getReference by @nixel2007 in #4249
- perf(references): индекс объявлений символов по строке для O(1) резолва by @nixel2007 in #4252
- perf(types): мемоизация инференса узла выражения в пределах прохода по документу by @nixel2007 in #4251
- perf(types): резолв членов по терминалу вместо повторного спуска по AST by @nixel2007 in #4250
- perf(references): terminal-aware резолюция ссылок вместо повторного спуска по AST by @nixel2007 in #4253
- fix(diagnostics): не подменять тип ресивера типом охватывающего выражения в UnknownMember by @nixel2007 in #4254
- perf(diagnostics): резолв типа конструктора через терминальный путь ReferenceFinder by @nixel2007 in #4256
- perf(context): резолв символов объявления через индекс selection-range by @nixel2007 in #4255
- perf(diagnostics): не спускаться в простые операторы в EmptyStatement by @nixel2007 in #4257
- perf(references): хелпер Positions и отказ от лишних Range при взятии позиции by @nixel2007 in #4258
- perf(diagnostics): ограничение пула JLanguageTool by @sfaqer in #4260
- perf(references): компактный индекс поиска вхождения по позиции by @sfaqer in #4259
- perf(diagnostics): считать диагностики на bounded-пуле вместо ForkJoinPool by @nixel2007 in #4264
Full Changelog: v1.0.3...v1.0.4
v1.0.3
What's Changed
- Наведение (hover): исправлено определение конструктора при обрыве рекурсивной цепочки ссылок «См.» — by @nixel2007 (#4207)
- MCP: инструменты MCP помечены как доступные только для чтения (read-only) — by @nixel2007 (#4227)
- Подсказки в коде (inlay hints): исправлена настройка
methodCall— раньше она документировалась как единый переключатель подсказок к вызовам методов (пользовательских и платформенных), но по факту игнорировалась, иmethodCall: falseничего не выключал. Теперь поставщики объединены под одним ключом, и настройка работает как задумано — by @sfaqer (#4234) - Автодополнение: типы полей элемента
Соответствиетеперь сохраняются при автокомплите — by @nixel2007 (#4208) - Типы: тип строки-аккумулятора больше не расширяется до «Строка, Число» (#4205) — by @nixel2007 (#4239)
- Работа с одиночными файлами (LSP): исправлен анализ отдельного файла и untitled-документов без открытого workspace — by @nixel2007 (#4240)
- Типы: ссылки «См.» теперь резолвятся в определение через type service, а в подсказке при наведении они стали кликабельными — by @nixel2007 (#4209)
Полный список изменений: v1.0.2...v1.0.3
v1.0.2
Общие исправления
- feat(mcp): Добавлен новый MCP tool global_member_search для поиска глобальных свойств и методов by @nixel2007 in #4199
- fix(types): вложенные и рекурсивные см.-ссылки в выводе типов, hover и автокомплите by @nixel2007 in #4196
- fix(definition): переход к определению члена через source-defined символ дескриптора by @nixel2007 in #4202
Full Changelog: v1.0.1...v1.0.2
v1.0.1
Общие изменения
Релиз направлен на стабилизацию и ускорение новых механизмов.
- perf(references): ускорить reference-индекс — компараторы-константы и hash-карта by @nixel2007 in #4174
- perf(context): кэшировать MD-объект и mdoRef документа (lazy) by @nixel2007 in #4180
- perf(references): не вызывать MDOType.fromValue для идентификаторов без свойства by @nixel2007 in #4181
- fix(types): разрешать См.-ссылку в описании возвращаемого значения функции by @nixel2007 in #4183
- fix(semanticTokens): подсвечивать вложенные типы в описаниях методов by @nixel2007 in #4184
- perf(context): объединить обход регионов и переменных в один проход by @nixel2007 in #4176
- fix(types): не подмешивать «Произвольный» к объявленному типу элемента коллекции by @nixel2007 in #4185
- perf(context): мемоизировать findCommonModule (workspace-scoped кэш) by @nixel2007 in #4186
- Use 1c-syntax.github.io javadoc link for antlr4 by @nixel2007 in #4187
- perf(types): компактное представление односложного TypeSet by @nixel2007 in #4188
- perf(types): идемпотентная регистрация member-source в MetadataCollectionSpecializer by @nixel2007 in #4189
- perf(workspacesymbol): убрать copy-on-write бакеты и лишнюю переиндексацию by @nixel2007 in #4193
Full Changelog: v1.0.0...v1.0.1
🎉 v1.0.0 🎉
Версия 1.0.0 — рубежный релиз. Основой стала полностью новая система типов, наделяющая сервер знаниями о доступных типах платформы и движка OneScript, и умеющая выводить типы переменных на основании возвращаемых значений методов. Существенно расширена поддержка протокола LSP — добавлены автодополнение, подсказка по параметрам, иерархия типов и другие запросы (вплоть до возможностей LSP 3.18). Добавлен экспериментальный режим работы в качестве MCP-сервера и собран полноценный каталог возможностей в документации.
Новая система типов
Сердце релиза — заново спроектированная система типов (model, registry, inferencer, TypeService).
Это единый слой, который знает обо всех типах проекта и умеет выводить тип выражения в произвольной точке кода. На нём построены подсказка при наведении, автодополнение, подсказки по параметрам, семантическая подсветка и новые диагностики.
- Единая модель и реестр типов. Типы собираются из нескольких источников в общий реестр:
- платформенные типы 1С:Предприятие (через
bsl-context) из синтакс-помощника на вашей машине; - типы конфигурации (через
MDClasses) — менеджеры объектов, реквизиты и т.п.; - типы OneScript из синтакс-помощника OneScript 2.1, а также пользовательские OScript-классы.
- платформенные типы 1С:Предприятие (через
- Вывод типов выражений (inference). Сервер определяет тип переменной/выражения под курсором в том числе по присваиванию, по возвращаемому значению функций (включая межмодульный вывод) и по полям структур, формируемых функцией-конструктором.
- Специализация обобщенных членов. Поддерживаются сложные конструкции вида
Справочники.ИмяСправочника.ИмяМетодаВозващающегоСтруктуру().ПолеСтруктуры. На каждом этапе этой цепочки доступны и всплывающие подсказки и автодополнение. - Типизация через комментарии. Поддерживаются документирующие комментарии параметров методов, возвращаемых значений, переменных уровня модуля и локальных переменных. Ссылки
см.и функции-конструкторы корректно разрешаются в типы. - Поля структуры и колонки таблицы значений. Для структур и колонок таблиц значений ведется анализ как объявленных в документирующем комментарии колонок, так и добавленных явно в коде.
- Специализация элементов коллекций. При использовании цикла
Для Каждоговыводится тип итератора на основании описания коллекции. Итерация поМассив из ЧислоположитЧислов тип переменной-итератора. - Билингвальность. Полноценная поддержка русских и английских имён типов и членов: двуязычное отображение в подсказках при наведении, автодополнении и подсказках по параметрам; классификация смешанных имён; показ информации на «своём» языке символа (BSL/OneScript).
- Конструкторы, async и вариадик-параметры. Отдельное понятие для конструктора OScript-класса; учёт модификатора
Асинху объявлений и вызовов методов; поддержка variadic-параметров в методах (повторяемые параметры, как, например, вСтрШаблон). - Поддержка OneScript как языка первого класса. В систему типов заведены понятия Класса и Модуля OneScript, а так же понятие подключаемой "библиотеки" с анализом lib.config и "соглашения о каталогах".
- Пользовательские коллекции. Классы OneScript с аннотацией
&Обходимоерегистрируются как коллекции — выводится тип элементов при обходеДля Каждого. - Семантическая подсветка на базе системы типов. Подсветка теперь богаче и корректно различает платформенные и пользовательские переменные и методы, асинхронные и статические функции.
Поддержка фреймворка «ОСень» (Autumn)
Поверх новой системы типов добавлена поддержка DI-фреймворка «ОСень» (Autumn) для OneScript: сервер распознаёт аннотации фреймворка, индексирует желуди и точки внедрения, и выводит типы внедряемых зависимостей - благодаря чему на компонентах «ОСени» работают автодополнение, всплывающие подсказки и переходы.
- Вывод типов внедряемых зависимостей (DI). Вывод типов для аннотаций
&Пластилин, как в режиме внедрения одиночного желудя, так и при внедрении коллекций. - Аннотации компонентов и внедрения Мета-аннотации (
&Лог,&Контроллер, killjoy и др.) распознаются и выводятся в соответствующие типы. &ПсевдонимДля(AliasFor) учитывается при разрешении типов внедряемых зависимостей.- Навигация по желудям. Двунаправленный переход между объявлением желудя или завязи, и точками его внедрения: новые код-линзы и быстрые действия.
Поддержка библиотеки наследования extends (OneScript)
Поверх новой системы типов реализована поддержка библиотеки наследования extends для OneScript: сервер распознаёт её аннотации и строит модель отношений типов, на которой работают переход к реализациям и иерархия типов.
- Аннотации наследования. Распознаются
&Расширяет(extends),&Реализует(implements) и&Интерфейс(interface); по ним выстраиваются связи «супертип ↔ подтип» и «интерфейс ↔ реализация». - Переход к реализациям (
textDocument/implementation) — от метода интерфейса (&Интерфейс) ко всем одноимённым методам реализующих его классов (&Реализует). - Иерархия типов (
textDocument/prepareTypeHierarchy,typeHierarchy/supertypes,typeHierarchy/subtypes) — дерево супертипов и подтипов по&Расширяет/&Реализует, сSymbolKind.Interfaceдля интерфейсов.
Поддержка протокола LSP
Добавлен каталог возможностей в документации docs/capabilities.
Сама поддержка протокола существенно расширена — реализованы новые запросы и улучшены существующие, вплоть до возможностей LSP 3.17/3.18.
Новые обрабатываемые запросы
- Добавлена обработка запроса
textDocument/completionиcompletionItem/resolve— автодополнение кода: глобальные функции, методы и свойства объектов (с выводом типа), типы послеНовый, ключевые слова и локальные переменные; нечёткий поиск (подстрока и подпоследовательность), ранжирование черезsortText, сигнатура и тип вlabelDetails(LSP 3.17),commitCharacters, отложенная документация через resolve, размещение курсора после скобок. - Добавлена обработка запроса
textDocument/signatureHelp— подсказка по параметрам вызываемого метода с подсветкой текущего параметра и учётом клиентских возможностей (labelOffset,documentationFormat, контекст retrigger). - Добавлена обработка запроса
inlayHint/resolve— отложенное наполнение подсказки-вставки (в v0.29.0 не поддерживался). - Добавлена обработка запроса
textDocument/implementation— переход к реализациям (поддержкаLocationLink); подробности — в разделе «Поддержка библиотеки наследованияextends». - Добавлена обработка запросов
textDocument/prepareTypeHierarchy,typeHierarchy/supertypesиtypeHierarchy/subtypes— иерархия типов; подробности — в разделе «Поддержка библиотеки наследованияextends». - Добавлена обработка запроса
textDocument/linkedEditingRange— одновременное редактирование объявления локального символа и всех его вхождений без вызова переименования. - Добавлена обработка запроса
textDocument/onTypeFormatting— форматирование по мере набора (флагuseOnTypeFormatting). - Добавлена обработка запроса
textDocument/rangesFormatting— форматирование нескольких диапазонов (LSP 3.18). - Добавлена обработка запроса
textDocument/prepareRename— подготовка переименования сPrepareRenameResultи placeholder. - Объявлена поддержка нескольких рабочих пространств —
workspace/didChangeWorkspaceFolders(workspaceFolders.supportedиchangeNotifications): динамическое добавление и удаление workspace folders (см. раздел «Поддержка нескольких рабочих пространств»). - Добавлена поддержка операций над файлами
workspace/didCreateFiles, [workspace/didRenameFiles](https://microsoft.github.io/language-...
v1.0.0-rc.7
What's Changed
- docs(index): убрать дублирование возможностей в разделе каталога by @nixel2007 in #4148
- build(deps): обновление до Spring Boot 4.1.0 by @nixel2007 in #4149
Full Changelog: v1.0.0-rc.6...v1.0.0-rc.7
v1.0.0-rc.6
What's Changed
- refactor(types): глобальная область видимости — члены синтетического типа ГлобальныйКонтекст by @nixel2007 in #4135
- feat(infrastructure): виртуальные потоки для исполнителей запросов LSP by @nixel2007 in #4140
- feat(oscript): регистрировать &Обходимое-классы OneScript как коллекции by @nixel2007 in #4134
- feat(completion): нечёткий поиск в автодополнении (подстрока + подпоследовательность) by @nixel2007 in #4147
- build(deps): bump io.sentry.jvm.gradle from 6.11.0 to 6.12.0 by @dependabot[bot] in #4145
Full Changelog: v1.0.0-rc.5...v1.0.0-rc.6
v1.0.0-rc.5
What's Changed
- fix(completion): не дублировать скобку — убрать commit character "(" у вызываемых by @nixel2007 in #4127
- feat(completion): паритет completion item — пользовательские методы и конструкторы как платформенные by @nixel2007 in #4129
- docs(index): актуализировать таблицу capabilities by @nixel2007 in #4130
- feat(mcp): proactive roots/list bootstrap + расширенный type_info + новый global_member_info by @sfaqer in #4131
- feat(semantictokens): не красить собственные реквизиты конфигурации как defaultLibrary by @nixel2007 in #4132
- feat(semantictokens): не красить методы модулей конфигурации как defaultLibrary by @nixel2007 in #4136
- fix(types): не удерживать DocumentContext в кэше контрактов событий by @nixel2007 in #4137
- fix(sentry): не падать на null-версии сервера при инициализации Sentry by @nixel2007 in #4141
- fix(diagnostics): сбрасывать Lazy-кэш диагностик до workspace/diagnostic/refresh by @sfaqer in #4139
- fix: переход диагностики BadExceptionCategory на TypeService.resolve (#1935) by @erprivalov in #4128
Full Changelog: v1.0.0-rc.4...v1.0.0-rc.5
v1.0.0-rc.4
What's Changed
- fix(sentry): распознавать pre-release версии с точкой в rc.N by @nixel2007 in #4124
- fix(symbol): сделать WorkspaceSymbolIndex синглтоном (#4123) by @nixel2007 in #4125
Full Changelog: v1.0.0-rc.3...v1.0.0-rc.4