Releases: 1c-syntax/bsl-language-server
Releases · 1c-syntax/bsl-language-server
v0.16.1
v0.16.0
Общие изменения
- Добавлен анализатор текстов запросов, расположенных в модулях.
- Добавлен отслеживатель факта изменения файла конфигурации. Теперь BSL Language Server будет обновлять свои настройки налету после сохранения/удаления/появления файла конфигурации.
- Добавлена обработка запроса
workspace/symbol
для формирования списка символов рабочей области. - Добавлена обработка кастомного запроса
textDocument/x-diagnostics
, который может использоваться для получения списка диагностик документа. - Используемый словарь LanguageTool обновлен до версии 5.0.2.
- Добавлены диагностики:
- Запрет экспортных глобальных переменных модуля (ExportVariables);
- Соединение с вложенными запросами (JoinWithSubQuery);
- Соединение с виртуальными таблицами (JoinWithVirtualTable);
- Имена объектов метаданных не должны превышать допустимой длины наименования (MetadataObjectNameLength);
- Конструктор элемента стиля (StyleElementConstructors);
- Использование ключевого слова "ОБЪЕДИНИТЬ" в запросах (UnionAll).
- Изменены диагностики:
- Ключ диагностики "Использование метода РольДоступна" изменен с
IsInRoleMethodDiagnostic
наIsInRoleMethod
; MissingVariableDescription
- исправлено определение описания переменной, если она содержит аннотации;CommonModuleNameCached
- исправлены ложные срабатывания диагностики при корректном именовании модуля;CommonModuleNameClientServer
- исправлено ложное срабатывание диагностики, если у модуля установлен флаг "Обычное приложение";NonStandardRegion
- для модуля HTTP-сервиса добавлены стандартные областиОбработчикиСобытий
иСлужебныеПроцедурыИФункции
- Ключ диагностики "Использование метода РольДоступна" изменен с
- Добавлен "сode action" для создания недостающих в модуле стандартных областей.
- Исправлена ошибка однопоточного парсинга метаданных конфигурации при запуске анализа проекта.
- Исправлено неверное определение аннотаций расширений, как кастомных.
- Репортер
generic
теперь точнее мапит типы и серьезность замечаний из BSL Language Server на типы и серьезность замечаний формата "generic issue". - Репортер
json
теперь содержит ссылку наmdoRef
. - Обновлена зависимость BSL Parser:
- Исправлены ошибки разрыва препроцессором;
- Реализована поддержка препроцессорных вставок
#Вставка
и#Удаление
.
- Обновлена зависимость MDClasses - увеличен объем доступных к анализу данных конфигураций и расширений, парсинг файлов переведен с Jackson на XStream.
Изменения для разработчиков
- Проект переведен на фреймворк Spring Boot. Все провайдеры и диагностики теперь являются бинами, как следствие теперь для получения произвольных зависимостей может использоваться (и используется) dependency injection. Например, теперь диагностика может получить ссылку на
LanguageServerConfiguration
. - Добавлены события по обновлению настроек
LanguageServerConfiguraion
-LanguageServerConfigurationChangeEvent
иLanguageServerConfigurationFileChangeEvent
. Для подписки на события можно использовать Spring Events API - Основным артефактом BSL Language Server теперь является "тонкий" jar-файл без зависимостей. Это позволяет удобнее подключать BSL Language Server как библиотеку в другие приложения. Старый вариант поставки в виде "толстого" исполняемого jar-файла доступен в виде артефакта с классификатором
-exec
. - Добавлен класс
BSLLSBinding
для упрощения встраивания BSL Language Server в другие приложения и инициализации контекта Spring Boot. - Класс
DiagnosticSupplier
разделен на несколько компонентов и удален. Для расчета списка диагностик документа следует использоватьDocumentContext#getDiagnostics()
, для получения списка уже рассчитанных диагностик (если они были рассчитаны) -DocumentContext#getComputedDiagnostics()
- Расширения Symbol API:
- В интерфейс
Symbol
добавлен методыgetSymbolKind()
иisDeprecated()
для упрощения анализа символов; - В
MethodSymbol
добавлена информация о применяемой директиве компиляции и списке аннотаций; - Добавлен новый тип visitor'а, который можно использовать для построения диагностик -
AbstractSymbolTreeDiagnostic
.
- В интерфейс
- Добавлен API для работы с запросами:
- Добавлен метод
DocumentContext#getQueries()
для получения списка запросов документа; - Добавлен новый тип visitor'а для построения диагностик языка запросов -
AbstractSDBLVisitorDiagnostic
.
- Добавлен метод
v0.15.2
v0.15.1
v0.15.0
Общие изменения
- BREAKING CHANGE Изменен формат конфигурационного файла. Одно из ключевых отличий - разнесение параметров по типам сервисов. Например, конфигурирование диагностик теперь происходит в
diagnostics
->parameters
, а не вdiagnostics
. Обновленное описание доступно на сайте и в схеме - Для настройки диагностик добавлено свойство
mode
, позволяющее полностью отключить диагностики, полностью включить все диагностики, включить все кроме указанных, отключить все кроме указанных - Расширена документация по BSL LS. Добавлены страницы часто задаваемых вопросов и системных требований
- Добавлена обработка запроса
textDocument/documentLink
- по каждой диагностике теперь доступна всплывающая ссылка на страницу с документацией (например, вVSCode
) - В ответ на запрос
textDocument/documentSymbol
для каждого символа добавлена информация о статусе "устарел" - Гарантированная поддержка JDK14
- Обновлен внешний вид интерфейса командной строки. Теперь параметры явно привязаны к командам, доступна справка по каждой команде
- Оптимизирована работа парсера bsl-файлов, парсера метаданных конфигурации, общих механизмов BSL Language Server
- Добавлен экспорт данных о строках к покрытию в формате
GenericCoverage
(в виде нового репортера) - Тэги игнорирования диагностик (
BSLLS-выкл
) теперь нечувствительны к регистру - В команду
analyze
добавлен параметр--workspaceDir
, отвечающий за базовый каталог, относительно которого формируются пути файлов в отчете - В команды добавлен флаг
--silent
для сокращения количества выводимых в консоль сообщений (в т.ч. прогресс-бар) - Исправлена ошибка сбора информации о методе, приводящая к падению анализа, если имя метода совпадало с ключевым словом
- Добавлены диагностики:
- Кеширование программного интерфейса (
CachedPublic
) - Присвоение общему модулю (
CommonModuleAssign
) - Общий модуль недопустимого типа (
CommonModuleInvalidType
) - Пропущен постфикс "ПовтИсп" (
CommonModuleNameCached
) - Пропущен постфикс "Клиент" (
CommonModuleNameClient
) - Пропущен постфикс "КлиентСервер" (
CommonModuleNameClientServer
) - Пропущен постфикс "ПолныеПрава" (
CommonModuleNameFullAccess
) - Пропущен постфикс "Глобальный" (
CommonModuleNameGlobal
) - Глобальный модуль с постфиксом "Клиент" (
CommonModuleNameGlobalClient
) - Пропущен постфикс "ВызовСервера" (
CommonModuleNameServerCall
) - Нерекомендуемое имя общего модуля (
CommonModuleNameWords
) - Подряд идущие пустые строки (
ConsecutiveEmptyLines
) - Отсутствует проверка признака ОбменДанными.Загрузка в обработчике событий объекта (
DataExchangeLoading
) - Устаревшие объекты платформы 8.3.12 (
DeprecatedAttributes8312
) - Использование устаревшего метода "ТекущаяДата" (
DeprecatedCurrentDate
) - Устаревшие методы не должны использоваться (
DeprecatedMethodCall
) - Использование устаревшего метода клиентского приложения (
DeprecatedMethods8310
) - Использование устаревших глобальных методов платформы 8.3.17 (
DeprecatedMethods8317
) - Избыточная проверка параметра АвтоТест (
ExcessiveAutoTestCheck
) - Выполнение произвольного кода на сервере (
ExecuteExternalCode
) - Выполнение произвольного кода в общем модуле на сервере (
ExecuteExternalCodeInCommonModule
) - Функция всегда возвращает одно и то же примитивное значение (
FunctionReturnsSamePrimitive
) - Использование метода РольДоступна (
IsInRoleMethodDiagnostic
) - Все объявления переменных должны иметь описание (
MissingVariablesDescription
) - Присвоение значения свойству ЭтотОбъект (
ThisObjectAssign
) - Небезопасное использование функции БезопасныйРежим() (
UnsafeSafeModeMethodCall
)
- Кеширование программного интерфейса (
- Изменены диагностики:
BeginTransactionBeforeTryCatch
- исправлено ложное срабатывание диагностики на методах, содержащихНачатьТранзакцию
в имениCreateQueryInCycle
- исправлено ложное срабатывание диагностики на коде видаДля Каждого из РезультатЗапроса.Выгрузить() Цикл
CompilationDirectiveNeedLess
- исправлена ссылка на ИсточникFunctionNameStartsWithGet
- исправлена ссылка на ИсточникNonExportMethodsInApiRegion
- исправлено ложное не-срабатывание диагностики в областиСлужебныйПрограммныйИнтерфейс
MultilingualStringHasAllDeclaredLanguages
- исправлено ложное срабатывание диагностики при передачи строки через переменнуюParseError
- исправлено неверное позиционирование диагностики, приводящее к остановке анализа в SonarQube, если ошибка вешалась на "конец файла"Typo
- расширен список слов-исключенийUnreachableCode
- исправлено ложное срабатывание диагностики на инструкции препроцессоруUsingFindElementByString
- исправлено ложное не-срабатывание диагностики при вызове функции, вложенного в вызов функцииUsingModalWindows
- теперь включена по умолчанию, работает только на режиме совместимости 8.3.3 и новееUsingSynchronousCalls
- теперь включена по умолчанию, работает только на режиме совместимости 8.3.3 и новее
- Оптимизированы диагностики:
EmptyRegion
FunctionShouldHaveReturn
InvalidCharacterInFile
MethodSize
SelfAssign
SelfInsertion
SemicolonPresence
SeveralCompilerDirectives
UsingCancelParameter
UsingServiceTag
Изменения для разработчиков
- На сайте добавлены разделы:
javadoc
- руководство по стилю
- структура диагностики, назначение и содержимое файлов
MethodSymbol
теперь содержит информацию о параметрах метода, статусеdeprecated
- Исправлено определение типа переменной в
VariableSymbol
- Для построения дополнительного контекста всего сервера при начале работы выполняется дополнительный проход по всем файлам и построение первичных данных (в т.ч.
SymbolTree
) - Добавлены новые абстрактные диагностики:
AbstractCommonModuleNameDiagnostic
- для проверки общего модуля на имяAbstractExecuteExternalCodeDiagnostic
- для проверки выполнения методовВыполнить
иВычислить
AbstractDiagnostic
теперь содержит ссылку наDocumentContext
в поле по аналогии с другими абстрактными диагностикамиDocumentContext#getTokens
теперь возвращает токенEOF
- Исправлена обрезка пустых строк в конце контента при вызове
DocumentContext#getContentList
v0.14.1
v0.14.0
Общие изменения
- Ускорено чтение информации о метаданных и настройках поддержки конфигурации
- Сокращено потребление оперативной памяти в режиме анализа
- Исправлена работа "висячих комментариев" для отключения диагностик
- Добавлена возможность редактировать несохраненные файлы, а так же файлы, располагающиеся по сетевым путям
- Оптимизирована работа диагностик в случае, если выключено игнорирование диагностик по настройкам поддержки (значение
NEVER
) - Исправлено определение максимального уровня поддержки для объекта, если в конфигурации есть несколько конфигураций поставщика
- Исправлено выстраивание дерева областей и методов в дереве символов (панель Outline в VSCode)
- Исправлены падения и блокировки ресурсов при редактировании больших файлов
- В дерево символов добавлена информация о переменных (уровня модуля и уровня метода), объявленных через
Перем
- Падение одной из диагностик при анализе больше не останавливает анализ целиком
- Добавлены диагностики:
- Определения методов должны размещаться перед операторами тела модуля (
CodeBlockBeforeSub
) - Устаревшее использование типа "УправляемаяФорма" (
DeprecatedTypeManagedForm
) - Имя функции не должно начинаться с "Получить" (
FunctionNameStartsWithGet
) - Инициализация параметров методов и конструкторов вызовом вложенных методов (
NestedFunctionInParameters
) - Все методы программного интерфейса должны иметь описание (
PublicMethodsDescription
) - Вызов функции КаталогВременныхФайлов() (
TempFilesDir
) - Опечатка (
Typo
) - Использование возможностей выполнения внешнего кода (
UsingExternalCodeTools
) - Некорректное использование метода ОтменитьТранзакцию() (
WrongUseOfRollbackTransactionMethod
)
- Определения методов должны размещаться перед операторами тела модуля (
- Добавлен quick fix для диагностики:
DeprecatedTypeManagedForm
- Изменены диагностики:
CompilationDirectiveLost
теперь позиционируется на имя метода, а не на первую строку определенияUnusedLocalMethod
теперь работает и в общих модулях конфигурацииUnaryPlusInConcatenation
теперь работает оптимальнее- Диагностики, анализирующие мультиязычные строки, теперь работают оптимальнее
UsingThisFormDiagnostic
теперь ловит присваивание к свойствуЭтаФорма
через точкуMissingSpace
теперь ловит начало строки после равно без пробелаFormDataToValue
теперь учитывает наличие директив компиляции и не срабатывает во внеконтекстных методахNonStandardRegion
больше не срабатывает на областьИнициализация
в модуле набора записейTimeoutsInExternalResources
- добавлен параметрanalyzeInternetMailProfileZeroTimeout
, позволяющий отключить анализ таймаута для объекта ИнтернетПочтовыйПрофиль, имеющий таймаут по умолчаниюEmptyRegion
теперь позиционируется на начало области, а не на область целиком
Изменения для разработчиков
- Информация о методах, областях, переменных теперь хранится в виде дерева в объекте
SymbolTree
- Упрощено конфигурирование диагностик - если параметры диагностики являются примитивными типами или строками, конфигурирование производится автоматически, без необходимости переопределения
configure
- Версия lsp4j обновлена до 0.9.0