Skip to content

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

v0.16.0

14 Sep 17:33
c62ae5c
Compare
Choose a tag to compare

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

  • Добавлен анализатор текстов запросов, расположенных в модулях.
  • Добавлен отслеживатель факта изменения файла конфигурации. Теперь 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

07 Jun 13:40
3fa4455
Compare
Choose a tag to compare
  • Оптимизирована работа диагностики MissingSpaces
  • Исправлено ложное срабатывание диагностики MissingSpaces, когда файл заканчивается точкой с запятой без перевода строки

v0.15.1

02 Jun 15:24
88dca5e
Compare
Choose a tag to compare
  • Исправлено непредсказуемое падение BSL LS при открытии проекта с малым количеством файлов

v0.15.0

31 May 11:03
9f44026
Compare
Choose a tag to compare

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

  • 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

06 Apr 14:11
376794e
Compare
Choose a tag to compare

Исправлены падения сервера при наличии пробелов в пути

v0.14.0

01 Apr 12:53
8d5c6a1
Compare
Choose a tag to compare

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

  • Ускорено чтение информации о метаданных и настройках поддержки конфигурации
  • Сокращено потребление оперативной памяти в режиме анализа
  • Исправлена работа "висячих комментариев" для отключения диагностик
  • Добавлена возможность редактировать несохраненные файлы, а так же файлы, располагающиеся по сетевым путям
  • Оптимизирована работа диагностик в случае, если выключено игнорирование диагностик по настройкам поддержки (значение 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

28 Jan 14:33
Compare
Choose a tag to compare
  • Исправлены пустые диапазоны на дополнительных местах срабатывания CodeOutOfRegion

v0.13.2

28 Jan 13:11
e472db1
Compare
Choose a tag to compare
  • Исправлено формирование области срабатывания для диагностики CodeOutOfRegion

v0.13.1

28 Jan 10:55
3c80423
Compare
Choose a tag to compare
  • Исправлено позиционирование диагностики CodeOutOfRegion

v0.13.0

24 Jan 12:35
8675610
Compare
Choose a tag to compare
  • Добавлена возможность исключать из анализа файлы на поддержке (при наличии конфигурации поставщика). Для этого в конфигурационный файл добавлено свойство computeDiagnosticSkipSupport (перечисление). Подробнее: Конфигурирование
  • Время анализа файла сокращено на ~20%
  • Обновление до Java11
  • Добавлена поставка BSL LS в виде самодостаточного zip-архива для платформ Windows, Linux и MacOS
  • Добавлены метрики модуля:
    • расчет цикломатической сложности
    • количество строк комментариев
  • Добавлены новые диагностики:
  • Доработаны диагностики:
    • UsingServiceTag - фраза // Вставить содержимое обработчика и ее английские аналоги теперь считается служебным тегом и диагностируется как ошибка
    • UnreachableCode - исправлено ложное срабатывание на #Область и #КонецОбласти
    • UsingHardcodeNetworkAddress - исправлены ложные срабатывания на строках, содержащих двоеточия
    • SpaceAtStartComment - больше не срабатывает на строках, считающихся закомментированным кодом
    • CommentedCode - уточнены правила определения кода
    • UnusedLocalMethod - убрано срабатывание на ПриСозданииОбъекта в модулях OneScript
    • TimeoutsInExternalResources - убраны ложные срабатывания на конфигурациях с режимом совместимости 8.3.7 и менее
    • MultilingualStringHasAllDeclaredLanguages - исправлен ряд ложных срабатываний на сложных локализованных строках
    • OneStatementPerLine - добавлен показ дополнительных срабатываний диагностики
    • CommitTransactionOutsideTryCatch - исправлено ложное не-срабатывание в случае, когда ЗафиксироватьТранзакцию является последним оператором в модуле
    • MissingSpace - убрано ложное срабатывание на унарных плюсе и минусе при передаче числового параметра как аргумента метода
    • MagicNumbers - добавлен параметр, разрешающий использование магических чисел как индексов
  • Добавлен 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