Releases: 1c-syntax/bsl-language-server
Releases · 1c-syntax/bsl-language-server
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
v0.13.3
v0.13.2
v0.13.1
v0.13.0
- Добавлена возможность исключать из анализа файлы на поддержке (при наличии конфигурации поставщика). Для этого в конфигурационный файл добавлено свойство
computeDiagnosticSkipSupport
(перечисление). Подробнее: Конфигурирование - Время анализа файла сокращено на ~20%
- Обновление до Java11
- Добавлена поставка BSL LS в виде самодостаточного zip-архива для платформ Windows, Linux и MacOS
- Добавлены метрики модуля:
- расчет цикломатической сложности
- количество строк комментариев
- Добавлены новые диагностики:
- Код расположен вне области
CodeOutOfRegion
- Директивы компиляции методов
CompilationDirectiveLost
- Лишняя директива компиляции
CompilationDirectiveNeedLess
- Выполнение запроса в цикле
CreateQueryOnCycle
- Цикломатическая сложность
CyclomaticComplexity
- Повторяющиеся разделы модуля
DuplicateRegion
- Область не должна быть пустой
EmptyRegion
- Использование метода ДанныеФормыВЗначение
FormDataToValue
- Использование метода ПолучитьФорму
GetFormMethod
- Нестандартные разделы модуля
NonStandardRegion
- Использование метода ПользователиОС
OSUsersMethod
- Метод не должен содержать много возвратов
TooManyReturns
- Неиспользуемый параметр
UnusedParameters
- Код расположен вне области
- Доработаны диагностики:
- UsingServiceTag - фраза
// Вставить содержимое обработчика
и ее английские аналоги теперь считается служебным тегом и диагностируется как ошибка - UnreachableCode - исправлено ложное срабатывание на
#Область
и#КонецОбласти
- UsingHardcodeNetworkAddress - исправлены ложные срабатывания на строках, содержащих двоеточия
- SpaceAtStartComment - больше не срабатывает на строках, считающихся закомментированным кодом
- CommentedCode - уточнены правила определения кода
- UnusedLocalMethod - убрано срабатывание на
ПриСозданииОбъекта
в модулях OneScript - TimeoutsInExternalResources - убраны ложные срабатывания на конфигурациях с режимом совместимости 8.3.7 и менее
- MultilingualStringHasAllDeclaredLanguages - исправлен ряд ложных срабатываний на сложных локализованных строках
- OneStatementPerLine - добавлен показ дополнительных срабатываний диагностики
- CommitTransactionOutsideTryCatch - исправлено ложное не-срабатывание в случае, когда
ЗафиксироватьТранзакцию
является последним оператором в модуле - MissingSpace - убрано ложное срабатывание на унарных плюсе и минусе при передаче числового параметра как аргумента метода
- MagicNumbers - добавлен параметр, разрешающий использование магических чисел как индексов
- UsingServiceTag - фраза
- Добавлен quick fix для диагностики:
- EmptyRegion
- Добавлен обработчик
textDocument/codeLens
, отображающий информацию о цикломатической сложности метода - Для диагностик добавлена возможность определения необходимости срабатывания на основе типа модуля
- Добавлен перевод параметров диагностик на английский язык
- Добавлен новый тэг диагностик -
localize
- проблемы локализации - Добавлен новый тип диагностик -
security hotspot
- подробнее в документации - Исправлено необнаружение метаданных конфигурации в некоторых случаях
- Форматер больше не съедает имя библиотеки OneScript, начинающейся с цифры
- json-файл с результатами анализа теперь хранит базовый каталог анализа и относительные пути к файлам
- В конфигурации BSL LS свойство
computeDiagnostics
заменено наcomputeDiagnosticsTrigger
- Расширена документация
- Расширена json-схема для конфигурационного файла
- Конфигурационный файл теперь доступен по короткой ссылке:
https://1c-syntax.github.io/bsl-language-server/configuration/schema.json