Skip to content

Releases: 1c-syntax/bsl-language-server

v1.0.5

Choose a tag to compare

@nixel2007 nixel2007 released this 20 Jul 05:40
5d471f6

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

Choose a tag to compare

@nixel2007 nixel2007 released this 12 Jul 16:13

Изменения и исправления

  • 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

Choose a tag to compare

@nixel2007 nixel2007 released this 04 Jul 18:37
dab0b69

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

Choose a tag to compare

@nixel2007 nixel2007 released this 25 Jun 14:18
3225f15

Общие исправления

  • 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

Choose a tag to compare

@nixel2007 nixel2007 released this 23 Jun 07:21
7e399a1

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

Релиз направлен на стабилизацию и ускорение новых механизмов.

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

Choose a tag to compare

@nixel2007 nixel2007 released this 19 Jun 14:56
bcba086

Версия 1.0.0 — рубежный релиз. Основой стала полностью новая система типов, наделяющая сервер знаниями о доступных типах платформы и движка OneScript, и умеющая выводить типы переменных на основании возвращаемых значений методов. Существенно расширена поддержка протокола LSP — добавлены автодополнение, подсказка по параметрам, иерархия типов и другие запросы (вплоть до возможностей LSP 3.18). Добавлен экспериментальный режим работы в качестве MCP-сервера и собран полноценный каталог возможностей в документации.

Новая система типов

Сердце релиза — заново спроектированная система типов (model, registry, inferencer, TypeService).
Это единый слой, который знает обо всех типах проекта и умеет выводить тип выражения в произвольной точке кода. На нём построены подсказка при наведении, автодополнение, подсказки по параметрам, семантическая подсветка и новые диагностики.

  • Единая модель и реестр типов. Типы собираются из нескольких источников в общий реестр:
    • платформенные типы 1С:Предприятие (через bsl-context) из синтакс-помощника на вашей машине;
    • типы конфигурации (через MDClasses) — менеджеры объектов, реквизиты и т.п.;
    • типы OneScript из синтакс-помощника OneScript 2.1, а также пользовательские OScript-классы.
  • Вывод типов выражений (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-...
Read more

v1.0.0-rc.7

v1.0.0-rc.7 Pre-release
Pre-release

Choose a tag to compare

@nixel2007 nixel2007 released this 18 Jun 15:45
5c2c668

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

v1.0.0-rc.6 Pre-release
Pre-release

Choose a tag to compare

@nixel2007 nixel2007 released this 18 Jun 12:10
5d1d590

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

v1.0.0-rc.5 Pre-release
Pre-release

Choose a tag to compare

@nixel2007 nixel2007 released this 17 Jun 13:35
b146a92

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

v1.0.0-rc.4 Pre-release
Pre-release

Choose a tag to compare

@nixel2007 nixel2007 released this 15 Jun 16:51
3ec2a97

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