Общие изменения
- 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