Перейти к содержанию

Приложение А. История релизов

Релиз 2023.5 от 31.03.2023

Новые правила

  • Опечатки в комментариях (CommentSpelling).

Доработки

  • Правило WrongVerifyEmptyQueryResult: игнорирует использование Следующий() в условии блока Если...КонецЕсли при использовании в этом блоке выборки любым способом (например, при присвоении, возврате и передаче в качестве параметров);
  • Правило TempTableNotIndexed: поля таблицы, стоящей в левой части соединения, не требуют индексирования;
  • Правило UnknownRole: имена проверяемых функций вынесены в настраиваемый параметр;
  • Правило UsingLeftOuterJoin: исправлено ошибочное определение стороны соединения при использовании вложенных запросов в источниках (например, в условии временной таблицы).

Релиз 2023.4 от 03.03.2023

Общее

  • Экранирующие комментарии не участвуют в парсинге документирующих комментариев. Они не считаются частью текстов документирования и не вызывают ложных срабатываний проверок документирующих комментариев.

Релиз 2023.3 от 17.02.2023

Общее

  • В парсер языка запросов добавлена возможность указывать внешние источники в качестве таблицы оператора Поместить.

  • Исправлена ошибка экранирования проверки OneSymbolVariable.

  • Правило ExportVariable исключено из профиля Рекомендуемый.

  • В исключения синтаксических проверок по умолчанию добавлены исключения форм слов Штрихкод, Штрихкодирование, Маркировка, Немаркируемый.

Доработки

  • Правила QuerySourceAliasNaming и QueryFieldAliasNaming: добавлены исключения для псевдонимов, генерируемых конструктором запросов. QuerySourceAliasNaming также допускает в качестве псевдонима использовать идентификатор последней части квалификатора источника.

  • Правило UnusedParameterCheck: в сообщении об ошибке выводит имена параметров и методов в том же виде, как они введены в исходном коде (не приводит к заглавным).

  • Правило WrongVerifyEmptyQueryResult: разрешает использовать выборку из запроса в условии, например Если Выборка.Следующий() Тогда, если внутри блока используются данные, полученные из этой выборки.

  • Правило CommentedOutCodeLine: не проверяет комментарии указания строгой типизации См. ОбщийМодуль.ИмяФункции().

  • Правила DocumentationReturnValue и DocumentationParameters: добавлено игнорирование документирующих комментариев, ссылающихся в описании на другие процедуры и функции // См. ОбщийМодуль.ИмяФункции().

Релиз 2023.2 от 03.02.2023

Доработки

  • Правило ExceptWithoutLog: настраиваемый параметр для указания своих методов логирования работает регистронезависимо и принимает любые имена методов (глобальные методы, методы общих модулей, модулей менеджеров и объектов). В настройке нужно указывать только имя метода (после точки).

  • Правило ExportMethodOutsideStandardRegion: добавлено исключение для модулей форм, т.к. в модулях форм по стандарту необязательно наличие областей программного интерфейса.

  • Правила BeginTransactionInTryBlock и WrongUsageOfRollbackTransactionMethod: уточнены описания, приведены в соответствие реализованным в правилах проверкам, примеры заменены на рекомендации с ИТС.

  • Правило KeyWordNotCanonical: добавлена проверка И, Неопределено, Истина, Ложь, Null. Изменена логика работы настраиваемых параметров: по умолчанию считает верными Для Каждого, Для каждого, ИЛИ, Или, НЕ, Не, ЛОЖЬ, Ложь, ИСТИНА, Истина, NULL, Null. Параметрами включается более строгая проверка - Для Каждого, Или, Не, Ложь, Истина, Null.

  • Правило ImmediatelyReturnedVariable: проверка игнорирует ситуацию, когда в присвоении в правой части участвует возвращаемая переменная.

  • Удалено правило ReturnsDocumentation, т.к. проверка оказалась задублирована.

  • Актуализированы описания всех правил, проверяющих документирующие комментарии (Documentation*);

Релиз 2023.1 от 20.01.2023

Общее

  • Исправлена работа настройки пропуска кода основной конфигурации sonar.bsl.skipVendorCodeInChangeAndValidate, настройка работает независимо от параметра использования поглощающих комментариев sonar.bsl.skipAbsorptionComments.

  • Настройка sonar.bsl.skipVendorCodeInChangeAndValidate добавлена в настраиваемые параметры в веб-интерфейсе.

Доработки

  • Правило UnusedModule: актуализирован список исключенных из проверки типов модулей для исправления ложных срабатываний.

  • Правило UndocumentedPublicApi: по умолчанию проверяет наличие описание только в экспортных процедурах и функциях, размещенных в области ПрограммныйИнтерфейс. Добавлены параметры для проверки всех экспортных методов и настройки списка проверяемых областей.

  • Правило WrappingArguments: добавлено исключение для построчного заполнения параметров для исправления ложных срабатываний.

Релиз 2022.8 от 29.12.2022

Общее

  • Добавлен параметр sonar.bsl.maxDepthSearchConfiguration, позволяющий настроить глубину поиска корня конфигурации. Эта настройка необходима для проектов на больших репозиториях с большой глубиной вложенности. Значение по умолчанию - 4. Если при заданной глубине корень конфигурации не будет найден, то не будут выполняться проверки, использующие метаданные.

Доработки

  • Правило UnknownRole: исправлены ложные срабатывания при проверке модулей внешних обработок или модулей без контекста метаданных (без корня конфигурации) и анализ многострочных литералов.

  • Правило CodeOutsideRegion: исправлено ложное срабатывание при применении в модуле конструкции #Иначе ВызватьИсключение(...) #КонецЕсли согласно стандарту Поддержка толстого клиента, управляемое приложение, клиент-сервер.

  • Правило NestedFunctionCalls: добавлена настройка исключений, некоторые исключения установлены по умолчанию, добавлена проверка на использование в качестве параметров конструкторов вида Новый. Разрешено использовать в качестве параметров глобальные и локальный вызовы без параметров, создание структур с тремя и менее параметрами.

Релиз 2022.7 от 06.12.2022

Общее

  • Обновлена библиотека mdclasses до версии 0.10.3.

  • Обновлен механизм проверки лицензий (текущие лицензии продолжают работать в прежнем виде).

  • Доработан механизм поглощающих комментариев. Добавлена возможность отключать конкретные правила на блоки кода, отключать и включать одним комментарием несколько правил, включать проверку всех ранее отключенных правил.

Доработки

  • Правило UnknownRole: добавлен параметр Проверять существование по всех конфигурациях проекта (учитывать сводный контекст), при включении которого поиск ролей будет выполняться во всех конфигурациях проекта, а не только в конфигурации, содержащей анализируемый модуль.

Релиз 2022.6 от 02.11.2022

Общее

  • Защищенные паролем модули пропускаются при построении контекста конфигурации и не выводятся как ошибки разбора кода.

  • Добавлен расчет сводного контекста объектов метаданных:

  • Если в анализируемом проекте присутствует больше одной конфигурации, по ним строится объединенное дерево метаданных, которое используется в правилах для поиска объектов метаданных (проверки их существования). При этом в анализируемой папке могут находиться несколько конфигураций и/или расширений в любом сочетании, все их объекты будут объединены в сводный контекст.

  • Например, при включении для правила сводного контекста объектов метаданных использование в исходном коде расширений незаимствованных объектов основной конфигурации не будет считаться ошибкой.

  • Построение сводного контекста отключается параметром sonar.bsl.denyCumulativeContextComputation.

Доработки

  • Правило VerifyMetadata: добавлен параметр Проверять существование по всех конфигурациях проекта (учитывать сводный контекст), при включении которого поиск объектов метаданных будет выполняться во всех конфигурациях проекта, а не только в конфигурации, содержащей анализируемый модуль.
  • Правило VerifyMetadataInQuery: добавлен параметр Проверять существование по всех конфигурациях проекта (учитывать сводный контекст), при включении которого поиск объектов метаданных будет выполняться во всех конфигурациях проекта, а не только в конфигурации, содержащей анализируемый модуль.
  • Правило EnumValueExistCheck: добавлен параметр Проверять существование по всех конфигурациях проекта (учитывать сводный контекст), при включении которого поиск значений перечислений будет выполняться во всех конфигурациях проекта, а не только в конфигурации, содержащей анализируемый модуль.

Релиз 2022.5 от 22.09.2022

Общее

  • Обновлена библиотека mdclasses до версии 0.10.2. Проведена инвентаризация маппинга доступных mdclasses объектов (недостающие объекты и свойства включены в проверки метаданных).

Новые правила

  • Безумные многострочные литералы (CrazyMultilineString);
  • Перенос параметров процедур, функций и методов (WrappingArguments);
  • Имя функции начинается с глагола (FunctionNameStartsWithVerb).

Доработки

  • Правило VariableWithoutDescription: убрано ложное срабатывание при наличии директивы компиляции у переменной.

Документация

  • Правило MethodNaming: описание приведено в соответствие содержанию и логике проверки.

Релиз 2022.4 от 24.08.2022

Общее

  • Обновлена библиотека mdclasses до версии 0.10: в проверки метаданных включены новые типы объектов метаданных (внешние источники данных, планы обменов, боты).

Новые правила

  • Перенос арифметических выражений (WrappingArithmeticExpressions);
  • Перенос логических выражений (WrappingBooleanExpressions);
  • Использование "ё" в метаданных (YOInMetadata);
  • Обязательные роли не являются основными (StandardRolesNotInDefaults);
  • Устаревшие синхронные методы объекта HTTPСоединение (DeprecatedHttpConnectionMethods8321);
  • Бесполезные скобки в выражениях (UselessParenthesis).

Доработки

  • Правило ParseError: убрано ложное срабатывание при разборе модулей, защищенных паролем;
  • Правило NoPasswordProtectedModules: включена проверка всех модулей, которые можно защитить паролем, добавлена проверка модулей в формате EDT.

Документация

  • Правило LineLength: описание приведено в соответствие содержанию и логике проверки;
  • Правило VerifyMetadata: исправлена опечатка в сообщении об ошибке.

Релиз 2022.3 от 24.06.2022

Общее

  • Добавлена возможность исключать из проверки код в расширениях;
  • При использовании пустого профиля качества плагин не будет начинать полноценный анализ исходных файлов.

Новые правила

  • Установлено право "ИнтерактивнаяПометкаУдаленияПредопределенныхДанных" (InteractiveSetDeletionMarkPredefinedData);
  • Установлено право "ИнтерактивноеСнятиеПометкиУдаленияПредопределенныхДанных" (InteractiveClearDeletionMarkPredefinedData);
  • Отсутствуют необходимые права у роли "ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок" (InteractiveOpenExtMissingRights).

Релиз 2022.2 от 27.04.2022

Общее

  • В проект добавлен препроцессор языка 1С

Новые правила

  • Некорректный синоним обязательной роли (WrongStandardRoleSynonym)
  • Отсутствует обязательная роль (MissingStandardRole)
  • Ограничение права интерактивного удаления помеченных на удаление предопределенных объектов (InteractiveDeletionOfMarkedPredefined)
  • Нерекомендуемое использование метода "ЗаписьЖурналаРегистрации" (WriteLogEventWrongUsage)
  • Ограниченное использование оператора "Перейти" (RestrictedGoToUsage)

Доработки

  • Исправлено наименование правила AsyncCallOnExitWithoutCancel

Следующие правила переработаны с учетом нового препроцессора языка 1С:

  • CodeOutsideRegion
  • EmptyRegion
  • ExportMethodOutsideStandardRegion
  • NestedStandardRegion
  • NonStandardRegion
  • RegionNaming
  • RepeatingStandardRegions
  • StandardRegion
  • NonExportMethodInInterfaceRegion

Релиз 2022.1 от 18.02.2022

Общее

  • Значительно переработаны стандартные профили качества. Часть проверок исключена из всех профилей, для их включения необходимо вручную добавить необходимую проверку в пользовательский профиль качества

Новые правила

  • Взаимодействие с внешними ресурсами (UsingExternalObjectsCheck)
  • Метаданные расширения не содержат префикса (ExtensionMetadataWithoutPrefix)
  • Использование недоступных асинхронных методов (UnavailableAsyncMethods)
  • Отсутствие логирования ошибки (ExceptWithoutLog)
  • Неправильный тип расширения (WrongExtensionType)

Доработки

  • Правило InteractiveDeletionOfPredefinedCheck исправлено NPE при проверках пустых ролей.
  • Исправлено NPE при расчете поглощающих комментариев

Документация

  • Версия mkdocs обновлена до 8.1.5

Релиз 2021.7 от 06.12.2021

Общее

  • Теперь в проекте 300 нативных правил
  • У части проверок снят статус Beta

Новые правила

  • Вызов несуществующего метода объекта (NonExistentMethod)
  • Проверка существования метаданных в коде (VerifyMetadata)
  • Бессмысленный асинхронный метод (UselessAsyncMethod)
  • Опечатки в текстах запросов (QuerySpelling)
  • Некорректный синоним (WrongSynonym)
  • Синонимы должны быть написаны без опечаток (SynonymSpelling)
  • Вызов асинхронных методов в событии ПриЗавершенииРаботыСистемы без установки Отказа (AsyncCallOnExitWithoutCancel)
  • Использование точки с запятой в конце метода (SemicolonAfterMethod)
  • Поддержка обычного приложения (OrdinaryAppSupport)
  • Ограничение права интерактивного удаления предопределенных (InteractiveDeletionOfPredefined)

Доработки

  • Исправлена ошибка экранирования кода, при использовании русских слов "выкл/вкл"
  • Значение свойства sonar.bsl.platformEdition по умолчанию теперь в формате VERSION_8_x_x
  • Правило UndefinedVariableUsage: учтены реквизиты объектов и форм
  • Правило UnusedFormAttribute: учтены преобразования объектов в прикладные типы и обратно
  • Правило CodeOutsideRegion: модуля команды теперь обрабатывается корректно
  • Правило StandardRegion: исключены срабатывания на области, у которых есть пробел между хешем и ключевым словом Область
  • Правила UnusedMethodCheck и UnusedParameter: из анализа временно исключены формы (до перехода на mdclasses 1.0)
  • Правило DeprecatedGlobalCall: исключены срабатывания на методах, которые еще не существуют к текущей версии совместимости
  • Правило ScheduledOnStart: теперь поддерживается формат EDT
  • Правило EnumValueExist: теперь поддерживается анализ перечисления Клавиша

Документация

  • Добавлена страница с лицензиями используемых библиотек
  • Уточнено описание SilverLint для EDT
  • Поправлена разметка в списках
  • Исправлено некоторое количество опечаток

Релиз 2021.6 от 29.09.2021

Общее

  • 7 новых правил проверки качества кода
  • Поддержка разыменования предопределенных значений в грамматике языка запросов

Новые правила

  • Использование экспортной переменной ExportVariable
  • Избыточное использование перечисления параметров TrailingComma
  • Вызов асинхронных методов в событии ПриЗавершенииРаботыСистемы AsyncCallOnExit
  • Использование синхронных методов в транзакции SynchronousMethodsInTransaction
  • Метод недоступный в веб-клиенте UnavailableWebClientMethod
  • Чтение свойства доступного только для записи SaveOnlyProperty
  • Обращение к несуществующему значению перечисления EnumValueExist

Доработки

  • Правило DataExchangeLoad: теперь учитывается параметр-источник в подписках на события
  • Правило UnusedParameterCheck: теперь использует контекст платформы
  • Правило SynchronousMethods: OneScript исключен из анализа
  • Правило MDOWithoutSynonym: исправлен NPE при анализе расширений 1C
  • Правило ScheduledOnStartCheck: исправлен NPE при анализе расширений 1C
  • Свойство проекта sonar.bsl.platformEdition поддерживает значения в формате 8.x.x / VERSION_8_x_x

Документация

  • Дополнено описание некоторых правил

Релиз 2021.5.1 от 10.08.2021

Доработки:

  • Правило DeprecatedThisForm: теперь проверяются только модули форм;
  • Правило UsingReservedNames: теперь не учитывается регистр написания имен каталогов выгрузки общих модулей.

Релиз 2021.5 от 30.07.2021

  • 9 новых правил проверки качества кода
  • Новое свойство проекта sonar.bsl.platformEdition - версия платформы 1С, используется для анализа внешних отчетов и обработок
  • Анализ потока данных: пред расчет таблицы символов

Новые правила

  • Присвоение значения свойству доступному только для чтения ReadOnlyProperty
  • Некорректное использование СтрШаблон StrTemplate
  • Использование зарезервированных имен UsingReservedNames
  • Перекрытие зарезервированных имен OverlappingReservedNames
  • Приведение к числу слишком большой разрядности CastToNumber
  • Использование синхронных методов SynchronousMethods
  • Использование устаревшего метода "Найти" DeprecatedFind
  • Использование устаревшего типа "УправляемаяФорма" DeprecatedManagedForm
  • Использование устаревшего свойства "ЭтаФорма" DeprecatedThisForm

Доработки

  • Правило UnusedMethod: учтен контекст платформы
  • Правило DeprecatedGlobalCall: из анализа исключены скрипты на OneScript
  • Правило UnknownPreprocessorCommand: из анализа исключены скрипты на OneScript
  • Исправлено позиционирования нарушений в динамическом списке
  • В анализе метаданных теперь участвуют формы без модулей

Документация

  • Добавлена информация о параметре включения поглощающих комментариях

Релиз 2021.4 от 28.06.2021

  • 7 новых правил проверки качества
  • Доработан парсер с учетом специфики платформы 8.3.18:
  • Ключевые слова Ждать и Асинх можно использовать как обычные имена переменных, вне асинхронных методов;
  • Расширена поддержка асинхронных выражений;
  • Добавлена поддержка экранирования срабатывания замечаний в коде с помощью служебных тегов;
  • Добавлена начальная поддержка контекста платформы;
  • Из плагина удалена телеметрия;

Новые правила

  • Использование устаревших методов глобального контекста (DeprecatedGlobalCall);
  • Нарушена сортировка объектов метаданных верхнего уровня по имени по возрастанию в дереве метаданных (BrokenSortingTopMetadataObjects);
  • Скрытие пароля в метаданных (HidingPasswordInMetadata).
  • Краткая информация о конфигурации отличается от синонима (BriefInformation);
  • Подробная информация отличается от синонима (DetailedInformation);
  • Синоним должен оканчиваться на номер редакции/подредакции (ConfigurationVersion);
  • В корне конфигурации не заполнены "авторские права" (Copyright);

Доработки

  • Правило ExportMethodOutsideStandardRegion: исправлено ошибочное определение области к которой относится метод;
  • Правило FuncIsAProc: исправлено некорректное срабатывание, при совпадении имен функции и локальной переменной;
  • Правило MetadataSynonymCheck: теперь для объектов метаданных с префиксом "Удалить" ("Obsolete"), проверяется наличие префикса "(не используется)" (англ. "(not used)");
  • Правило UnusedFormAttribute: теперь из проверки исключается реквизит "Объект", если у него установлено свойство "Основной реквизит";
  • Правило WrongVerifyEmptyQueryResultCheck: исправлено ложное срабатывание на корректную работу с выборкой запроса;
  • Правило StringLiteralInQuery: исправлено ложное срабатывание на литералы в запросах динамических списков;
  • Правила UnusedMethod, EmptyMethod и CommentedOutCodeLine добавлены в профиль "1С: Совместимо";
  • Правило EqualConditions: исправлено ложное срабатывание на разные выражения, отличающиеся лишь оператором сравнения;
  • Правило ExcessFieldsInTemporaryTable: Исправлены ложные срабатывания на поля используемые во вложенных запросах;
  • Правило LostQueryParameter: исправлены ложное срабатывание на корректную инициализацию запроса и дублирование замечаний;
  • Правило CastInTry: теперь из проверки исключаются вызовы даты Дата(1, 1, 1);
  • Правило UnreachableCode: переработано с использованием CFG. Добавлен новый параметр, включенный по умолчанию, который исключает из проверки методы содержащие инструкции препроцессора;
  • Правило EmptyMethod: добавлена проверка английских вариантов именования переопределяемого модуля, улучшена производительность;
  • Правило AwaitInAsyncMethods: исключены ложные срабатывания на Ждать вне асинхронных методов, дополнено описание;
  • Правило Spelling: исправлены "плавающие" результаты проверки, после повторной проверки конфигурации.

Релиз 2021.3 от 07.05.2021

  • Расчет графов потока управления
  • Поддержка разбора кода с инструкциями препроцессора #Вставка, #КонецВставки, #Удаление, #КонецУдаления

Новые правила

  • Избыточное наличие секции Параметры в комментарии процедуры (функции) без параметров (DocumentationExcessParametersSection)
  • Наличие типа возвращаемого значения в описании экспортной функции (ReturnsDocumentation)
  • Приведение типов в Попытке (CastInTry)
  • Использование Асинх методов вне клиентского контекста (NotClientAsync)

Доработки

  • Правило ReturnStatementLast: все точки выхода функции должны заканчиваться Возврат или ВызватьИсключение (с помощью графов потока управления).
  • Правило EqualBlock: при сравнении выражений теперь правильно учитывается порядок в котором идут арифметические знаки.
  • Правило UnknownPreprocessorCommand: поддержка инструкций препроцессора #Вставка, #КонецВставки, #Удаление, #КонецУдаления.
  • Правило PairBeginCommitTransactionCall: из проверки теперь исключается только те методы, которые находятся внутри блока условий и где следующий оператор является прерыванием потока кода.
  • Правило UnreachableCode: исключены срабатывания при нескольких ; подряд.
  • Правило OneStatementPerLine: исключены срабатывания при нескольких ; подряд.
  • Правило NonStandardRegion: расширен список имен стандартных областей.
  • Правило Spelling: ключевое слово НСтр добавлено в исключения.
  • Правило IllegalDeletionFromCollection: из проверки исключается случаи, когда после удаления или очистки идет оператор прерывания цикла.
  • Правило FormEventHandlerPointsToNonExistingMethod: расширен список имен стандартных обработчиков.
  • Правило ReturnObjectsInReuseModule: исключены срабатывания на методы, возвращающие ссылку, а не объект.

Релиз 2021.2.2 от 12.04.2021

  • Исправлено NPE при проверке запросов динамических списков

Релиз 2021.2.1 от 08.04.2021

  • Исправлена ошибка расчета контекста модулей

Релиз 2021.2 от 02.04.2021

  • Анализ запросов из макетов СКД
  • Новый парсер документирующих комментариев

Новые правила

  • Экспортный метод в модуле с повторным использованием значений (PublicMethodInReuseModule)
  • Некорректный порядок программных выражений (StatementBeforeMethodDef)
  • Нерекомендуемый вызов устаревшего метода (DeprecatedMethodCall)
  • Использование нестандартных имен областей верхнего уровня (NonStandardRegion)
  • Использование унарного плюса в конкатенации строк (StringUnaryExpr)
  • Неизвестная команда препроцессора (UnknownPreprocessorCommand)
  • Использование не кроссплатформенных объектов (UsingNotCrossPlatformObjects)
  • Использование "Ждать" в не "Асинх" методах (AwaitInAsyncMethods)
  • Неправильное использование метода "ОтменитьТранзакцию" (WrongUsageOfRollbackTransactionMethod)
  • Неиспользуемые поля в выборке временной таблицы (ExcessFieldsInTemporaryTable)
  • Использование сертификатов в коде (HardcodeCertificate)

Доработки

  • Правило ExportMethodOutsideStandardRegion: расширен список разрешенных областей

Релиз 2021.1 от 12.02.2021

  • Новое ядро анализа.
  • Анализ запросов динамических списков.
  • Поддержка конструкций Асинх/Ждать при разборе текстов модулей.

Новые правила

  • Роль "АдминистраторСистемы" не содержит необходимых прав доступа (AdminRightsWithoutNecessaryRights)
  • Имена переменных не должны начинаться с нижнего подчеркивания (UnderscoreInVariableName)
  • Имя метаданных должно быть написано без опечаток (MetadataSpelling)
  • Некорректное имя конфигурации (InvalidConfigurationName)
  • Асинхронные конструкции доступны с версии платформы 8.3.18 (AsyncConstructionsAvailableSince8318)

Запросы от клиентов

  • Правило FuncIsAProc:
  • Не используемые функции исключены из анализа.
  • Обработчики "HTTP-сервисов" и "Web-сервисов" исключены из анализа.
  • Правило TrashComments: исправлено ложные срабатывания на текстах лицензий в начале модулей.
  • Правило CompilationDirectiveUse: поддержка директив "Клиент, МобильноеПриложениеКлиент, МобильноеПриложениеСервер, МобильныйКлиент, ТолстыйКлиентОбычноеПриложение, ТолстыйКлиентУправляемоеПриложение, Сервер, ВнешнееСоединение, ТонкийКлиент, ВебКлиент"

Доработки

  • Правило UndocumentedPublicApi: правило добавлено в профиль "1С: Совместимо".
  • Правило EqualMethodCallsInDifferentCodeBranches: при расчете одинаковых блоков учитываются только выражения с возвращаемыми значениями.
  • Правило FieldMustHaveAlias: тексты запросов динамических списков по умолчанию не анализируются, но могут быть включены с помощью параметра Анализировать динамические списки.
  • Правило ComparingWithNull: при анализе теперь не учитывается конструкция Выразить(NULL КАК ...).
  • Правило SymbolsFromDifferentLanguages: из анализа исключены форматные строки. Например, ДФ=dd.MM.yy.
  • Правило UnusedMethod: теперь в контексте анализа участвуют обработчики формы / элементов формы, команды, подключаемые обработки. Добавлен параметр Список методов исключений для исключения "сложных" подключаемых обработчиков.
  • Правило Spelling: значительно уменьшено время анализа за счет кеширования анализируемых данных.
  • Проверка SymbolsFromDifferentLanguages: из анализа исключены строки, превышающие значение параметра Лимит длины строк.
  • Исправлено падение анализа с символом "+" в пути к файлу.

Техническое

  • Обновление Gradle до 6.8.1
  • Переход на Kotlin DSL при конфигурировании Gradle

Релиз 1.33.1 от 25.12.2020

  • Исправлена ошибка чтения метаданных расширения в формате EDT, при отсутствии свойства defaultLanguage
  • Исправлена ошибка расчета метаданного для общий модулей в формате EDT

Релиз 1.33 от 18.12.2020

  • Пять новых правил проверки
  • Чтение метаданных с помощью MDClasses v0.7.0
  • Поддержка анализа кода 1С в двух средах разработки (Конфигуратор, VSCode) с помощью технологии SonarLint

Новые правила

  • В выражении Если... Тогда... ИначеЕсли отсутствует ветка Иначе (IfWithoutElse)
  • Использование функции КаталогВременныхФайлов() (TempFilesDir)
  • Роль ПолныеПрава не содержит необходимых прав доступа (FullRightsRoleWithoutNecessaryRights)
  • Отсутствует синоним объекта метаданных (MDOWithoutSynonym)
  • Отсутствует синоним конфигурации (ConfigurationWithoutSynonym)

Доработки

  • При расчете объектов на поддержке учитывается общий уровень "замка"

Запросы от клиентов

  • Правило DeletingTempFile: добавлен параметр Дополнительные имена методов для удаления файлов.
  • Правило DataExchangeLoad: Анализируются подписки на события
  • Правило Spelling: исправлена ошибка неверного привязывания замечания при массовых срабатываниях
  • Правило ExportMethodOutsideStandardRegion: корректировка расчета вложенных областей

Интеграция со средами разработки

Поддержка анализа модулей 1С (.bsl) с помощью SonarLint и сервера SonarQube в различных средах разработки.

Релиз 1.32 от 13.11.2020

  • 10 новых проверок качества кода
  • Новый тег onec-compatible для 1С: Совместимо
  • Новый профиль качества "1С:Совместимо". Профиль качества с учетом новых проверок содержит уже 23 правила
  • Минимальная версия SonarQube 7.9. Проверки в профиле "Аудит безопасности" разделены на "Уязвимости" и "Потенциальные уязвимости"

Новые правила

  • Некорректный режим управления блокировкой данных (DataLockControlMode)
  • Использование устаревшего параметра "АвтоТест" (AutoTestUsage)
  • Использование некорректного символа (BadSymbol)
  • Метод "НачатьТранзакцию" должен располагаться непосредственно перед оператором "Попытка" (BeginTransactionInTryBlock)
  • Использование строк подключения к БД (DatabaseConnect)
  • Экспортный метод в модуле команды (ExportMethodInCommandModule)
  • Экспортная процедура или функция в модуле формы (ExportMethodInFormModule)
  • Код с программным интерфейсом должен быть расположен внутри публичных областей (ExportMethodOutsideStandardRegion)
  • Имя переменной не должно состоять из одного символа (OneSymbolVariable)
  • Процедура не должна возвращать значения (ProcedureAsFunction)

Прочие изменения

  • Правила CommonModuleNamePrivileged, HardcodedPaths добавлены в профиль "Аудит безопасности", новый тип проверки "Потенциальная уязвимость"
  • Правила StandardRegion, DocumentationExcessParametersInParametersSection, DocumentationExcessParametersSection, DeprecatedMethodMessage, QueryKeyWordNotCanonical, DocumentationMissingParametersInParametersSection, SpaceAfterCommentSymbols, DocumentationReturnValue, DocumentationParameters, MetadataNameLongerThan, GoTo, InteractiveDelete, OneStatementPerLine, SameMetadataNames, VariableWithoutDescription, DocumentationReturnValueSectionPosition, ExportVariableWithoutDescription, UndocumentedPublicApi добавлены в профиль "1C: Совместимо"
  • Исправлена проблема для формата конфигуратора по исключению отчетов "на поддержке" с опцией skipVendorSupportedObjects

Релиз 1.31 от 08.10.2020

  • Оптимизация использования ОЗУ (при использовании Java 11)
  • Обновление зависимости JLanguageTool до 5.0 (используется для поиска опечаток)
  • Переход на библиотеку CommonMark от Atlassian для парсинга описаний проверок. Теперь описания хранятся в "ванильном" Markdown

Новые правила

  • Использование неиндексированной временной таблицы
  • Стандартные области не должны дублироваться
  • Получение контейнера ключей из файла
  • Обязательное использование непустого пароля в МенеджерКриптографии
  • Одинаковые имена у объекта и его табличной части

Прочие изменения

  • DocumentationReturnValue: исправлено ложное срабатывание проверки на описание возвращаемого результата
  • RepeatingStandardRegions: исправлено FP дублей стандартных областей
  • HardcodedURL: для исключения ссылок добавлена соответствующая настройка Ссылки исключения
  • HardcodeEmail: изменено регулярное выражение для поиска e-mail. Теперь проверка отлавливает адреса вида mail@localhost
  • Проверка SpellCheckName переименована в Spelling. Для отключения вывода в тексте замечания слов для замены добавлена настройка Показывать возможные замены слова
  • DeletingTempFile: исправлено FP при "сильной" вложенности

Изменения в документации

  • Изменение описания проверок UsingLogicalOrInWhere, ForbiddenMethodCurrentDate, QuantityArguments

Релиз 1.30 от 04.09.2020

  • 11 новых проверок кода
  • Новый профиль качества - "Аудит безопасности"
  • Документация по подсистеме открыта и находится по адресу https://docs.checkbsl.org/

Новые правила

  • Код не должен содержать указание паролей в явном виде
  • Конструкторы объектов не должны содержать указания паролей в явном виде
  • Вызовы методов не должны содержать указания паролей в явном виде
  • IP адреса не должны храниться в коде
  • В коде не должны содержаться e-mail
  • Небезопасное подключение внешней компоненты
  • Использование внешних объектов без безопасного режима
  • Ограничение права интерактивного удаления объектов
  • Событие "ПриОткрытии" не должно содержать код открытия других форм
  • Запись файлов в каталог "КаталогПрограммы()"
  • В коде не должны содержаться e-mail адреса неизвестных доменов

Прочие изменения

  • Проверка "Опасность использования операторов сбора системной информации и пользователей операционной системы" разделена на две:
    • Опасность использования информации о пользователях операционной системы
    • Опасность использования операторов сбора системной информации системы
  • Проверка "В коде не должно содержаться URL-ссылок" теперь имеет тип "Уязвимость"
  • Изменен механизм получения абсолютного пути к исходным файлам

Релиз 1.29 от 10.08.2020

Глобальные изменения

  • Поддержка формата EDT

  • Переход на систему сборки Gradle

Новые правила

  • Обращение к несуществующему элементу формы

  • Директива компиляции и определение метода на одной строке

  • Инициализированы не все параметры запроса

  • Циклические ссылки в коллекциях

  • Использование Новый Шрифт, Новый Цвет, Новый Рамка

  • Итератор или счетчик цикла используется вне тела цикла

Прочие изменения

  • Устранена проблема в правиле "Неиспользуемые переменные" с хаотичным падением анализа

  • Проверка описаний переменных работает с несколькими переменными в одной строке

  • Корректировка ссылки на ИТС в описании проверки "Использование метода РольДоступна"

Релиз 1.28 от 07.07.2020

Глобальные изменения

  • Добавлена поддержка сервера SonarQube версии 8.2 и 8.3.

Новые правила

  • Переменные должны содержать описание

  • Экспортные переменные должны содержать описание

  • Неверная проверка на пустой результат выполнения запроса

  • Новые правила языка запросов:

  • Правила образования псевдонимов полей запроса

  • Правила образования псевдонимов источников запроса

Прочие изменения

  • Улучшено отображение правила "Уменьшите количество серверных вызовов" при использовании сервера SonarQube 8.2+

Релиз 1.27 от 10.03.2020

Глобальные изменения

  • Добавлена поддержка JDK 9, 10, 11, 12, 13

  • Значительное ускорение анализа при использовании JDK 11 и выше

  • Добавлена поддержка сервера SonarQube версии 8.1.

  • Значительно уменьшено потребление памяти при работе плагина.

Новые правила

  • Потерянная/затираемая переменная

  • Неверное и бессмысленное арифметическое выражение

  • Новые правила языка запросов:

  • Излишнее разыменование в условии соединения

  • Излишнее разыменование в условии ГДЕ

  • Использование отрицания НЕ для условия И в секции ГДЕ запроса

  • Использование отрицания НЕ для условия И в секции ПО запроса

  • Важность правила "Запросы, выполняющие соединение с вложенными запросами или виртуальными таблицами" увеличена до "Критическая"

Запросы от клиентов

  • В правило «Строковые литералы не должны дублироваться» добавлен параметр для пропуска любых строк, удовлетворяющих регулярному выражению, и уточнено описание параметров

  • Улучшено поведение правила "Отсутствие проверки на NULL или приведения через ЕстьNULL при левых/правых соединениях"

  • Пропускаются выражения внутри оператора "ВЫБОР КОГДА ТОГДА ИНАЧЕ", если есть проверка "КОГДА ТаблицаИзСоединения.Поле ЕСТЬ NULL"

  • Исправлены ложные замечания для правила "Обработчик события формы указывает на несуществующий метод"

  • Удален показ замечаний на переменных у правила Экспортные процедуры/функции/переменные должны содержать описание, теперь правило называется "Экспортные процедуры/функции должны содержать описание"

  • Улучшены правила "Неиспользуемая процедура/функция" и "Неиспользуемый параметр процедуры/функции"

  • Методы-обработчики событий внутри кода расширений, для которых заданы директивы препроцессора &После, &Вместо, &До, исключены из замечаний этих правил

  • Исправлено падение анализа на правиле "Изменение свойств только для чтения на управляемой форме"

Прочие доработки

  • Доработано правило «Излишнее разыменовании полей в запросе», убраны некоторые ложные срабатывания

  • Добавлен показ дополнительных мест вхождения для правил работы с транзакцией

  • Ускорена производительность плагина

  • Дополнена поставляемая документация – добавлены описания правил + расширен раздел FAQ и описание примеров использования.

Релиз 1.26 от 29.11.2019

Новый вариант поставки

Подсистема «Управление качеством кода» начинает поставляться через «Личный кабинет клиента Серебряной Пули» – https://app.silverbulleters.org/

Новые правила

  • Нельзя создавать прикладные объекты с использованием конструктора

  • Неверная передача параметров в конструкторы объектов 1С

  • Проверка удаления временного файла после использования

  • Ожидание завершения фонового задания без указания таймаута

  • Нельзя возвращать изменяемые значения, например, коллекции, из методов модулей с повторным использованием возвращаемых значений

  • Нельзя возвращать МенеджерВременныхТаблиц, Запрос, объекты базы данных из методов модулей с повторным использованием возвращаемых значений с типом На время сеанса

  • Изменение свойств только для чтения на управляемой форме

  • Не следует применять неверные способы параметризации формы при открытии формы

  • Неверное использование метода БезопасныйРежим

  • Не задан префикс Подключаемый для методов модуля формы, подключаемых через УстановитьДействие

Поддержка новых особенностей языка 1С

  • Поддержка для расширений новой аннотации &ИзменениеИКонтроль и директив препроцессора #Вставка … #КонецВставки и #Удаление … #КонецУдаления

Запросы от клиентов

  • Доработан пропуск событий справочников/документов (модули, менеджеры объектов и их форм) для правил Неиспользуемый метод, Неиспользуемый параметр – в т.ч. и англоязычных имен событий

  • Исправлен баг – перестал работать экспорт правил внешнего анализатора

  • Исправлено эпизодическое падение анализа на правиле Обращение к стандартному реквизиту регистра составного типа без использования конструкции Выразить или с неверным использованием Выразить

  • Добавлен специальный параметр для пропуска слов-идентификаторов 1С для уменьшения количества замечаний от правила Строковые литералы не должны дублироваться

  • Изменено поведение правила Не рекомендуется смешивать символы разных языков в названиях переменных и именах процедур/функций для исключения множества одинаковых срабатываний:

  • если есть модуль с неверным наименованием, замечание от правила будет выдано всего один раз для 1й строки модуля – если есть метод с неверным наименованием, замечание от правила будет выдано всего один раз для строки определения метода

  • Доработано поведение правила Проверка существования метаданных в текстах запросов - правило не работает, если нет анализа метаданных, например, при анализе только внешних обработок

  • Для правила Имена процедур/функций должны быть написаны без опечаток добавлены дополнительные исключения

Документация

  • Описание всех новых правил добавлено в поставляемую документацию

Релиз 1.25 от 17.10.2019

Правила для языка запросов

  • "Проверка существования метаданных в запросах" – по запросу от клиентов

  • "Виртуальные таблицы в запросе без отборов"

Правила для кода 1С

  • "Совпадающие выражения в вычислениях"

  • "Таймауты при работе с внешними ресурсами"

  • "Вызов метода из БСП ОбщегоНазначения.WSПрокси без таймаута"

  • "Неверная конкатенация строк с ошибкой "Преобразование к типу число не может быть выполнено"

  • "Неверно использовать подряд знак сложения "Выражение ++ Выражение2"

  • "На управляемой форме нельзя присваивать значение переменной Параметры"

  • "На управляемой форме лучше не использовать отдельную переменную с именем "Параметры", т.к. она скрывает штатную коллекцию формы "Параметры"

Запросы от клиентов

  • Исправлены ложные срабатывания и уточнены правила:
  • "Магические числа"
  • "Излишнее разыменование полей" для поля "Родитель" для языка запросов
  • "Запуск внешнего приложения может быть небезопасен"

  • Доработки:

  • Уточнена работа правила "Запросы, выполняющие соединение с вложенными запросами или виртуальными таблицами" теперь ловятся соединения с вложенными запросами или виртуальными таблицами, описанными как первая таблица в запросе
  • Уточнена грамматика языка для правильного регистронезависимого поиска в некоторых случаях неканонического написания кода 1С

Документация

  • Доработано описание некоторых правил для языка запросов

Релиз 1.24 от 01.10.2019

Правила для языка запросов

  • Обращение к объектной модели при обходе выборки – возможные потери производительности.

Запросы от клиентов

  • Устранены ложные срабатывания правила

  • Магические даты

  • Добавлен параметр для игнорирования пустых дат (в разных вариантах написания)

  • Строковые литералы не должны дублироваться

  • Добавлен параметр исключения для параметров используемых функций

  • Добавлен параметр для управления списком пропускаемых функций.

  • Добавлен параметр "Минимальное количество найденных строк, при котором выдается замечание"

  • Не рекомендуется смешивать символы разных языков в одной строке

  • Подозрительный цикл

  • Функция всегда возвращает одно и то же константное значение

  • Исправлена привнесенная ошибка в правиле "Магические числа" – не работали исключения "Цел, Дата" и прочие.

Новые правила для кода 1С

  • "Подозрительное продолжение цикла"

  • "Подозрительное использование арифметических операций при конкатенации со строкой"

  • "Последней строкой в функции должен быть Возврат"

  • "Сложные условия"

  • Дополнено правило "Пустой блок кода" – теперь ловятся пустые блоки кода, даже если внутри есть комментарии

  • Добавлен параметр – Считать проблемным блок Исключение, в котором нет кода даже при наличии комментария. По умолчанию – Истина

  • Добавлен параметр – Считать проблемным блок, в котором нет кода, но есть комментарий. По умолчанию – Истина

  • В файлах OneScript процедура ПриСозданииОбъекта теперь не помечается как неиспользуемая процедура.

  • Доработки:

  • Ускорен анализ правил для языка запросов
  • "Обращение к стандартному реквизиту регистра составного типа без использования конструкции Выразить или с неверным использованием Выразить"
  • "Совместное использование "УПОРЯДОЧИТЬ ПО" с конструкцией "РАЗЛИЧНЫЕ" "
  • "Запросы, выполняющие соединение с вложенными запросами или виртуальными таблицами"
  • "Использование вложенных запросов в условии соединения"
  • "Отсутствие проверки на NULL или приведения через ЕстьNULL при левых/правых соединениях"
  • Ускорен анализ правил для кода 1С -Ограничения на использование "Выполнить" и "Вычислить" на сервере
  • "Слишком много возвратов внутри функции"
  • "Количество необязательных параметров процедуры/функции более 3"
  • "Неиспользуемый реквизит формы"
  • Исправлены ложные срабатывания правила "Метод вызывается с одинаковыми параметрами" на Дата(ХХХ, 1, 1).
  • Добавлены теги SonarQube к правилам, у которых теги не были указаны.

Документация

  • Добавлены описания новых правил в поставляемую документацию.

Релиз 1.23 от 12.09.2019

Новые правила для кода 1С

  • Перезапись параметров метода, переданных по значению

  • Строковые литералы не должны повторяться – Копипаст

  • Магические даты

  • Уязвимость. Запуск приложения

  • Уязвимость. Прекращение работы с параметром перезапуска

  • Смешивание русских и английских имен в именах переменных и названиях методов

Исправления

  • Исключены ложные срабатывания у правила "Неиспользуемая процедура/функция"

Документация

В поставляемой документации добавлены:

  • история релизов,

  • описания правил из релиза 1.23,

  • описания всех правил для языка запросов 1С;

Дополнительно документированы правила для языка запросов 1С:

  • Правило – Бесполезное приведение к NULL (UselessIsNull),

  • Правило – Сравнение с NULL в запросе должно быть только через ЕСТЬ NULL (ComparingWithNullCheck).

Релиз 1.22 от 09.09.2019

Новые правила для борьбы с дублированием кода/копипаст в коде 1С

  • Одинаковое содержимое методов - копипаст и дублирование кода.

  • Выражение с вызовом метода используется в нескольких ветках кода.

  • В вызове глобального метода 1С совпадают значения передаваемых аргументов.

Новые правила для кода 1С по клиентским запросам

  • Использование кириллицы и латиницы (русских и английских символов) в одной строке.

  • Использование маски . не рекомендуется.

Новые правила для кода 1С

  • Цикл не должен быть бесконечным.

  • Безусловное прерывание цикла.

  • Конкатенация строк может быть заменена на СтрСоединить или СтрШаблон.

  • Вызов вложенного конструктора Структуры при вызове функций.

  • Функция всегда возвращает одно и то же константное значение – булево, строка, дата.

  • Использование Если/ИначеЕсли с константным выражением.

  • Локальные переменные не должны инициализироваться и тут же возвращаться из функции.

  • Правило "Приведение выражения к строке при сравнении со строковой константой".

  • Неверные отступы в коде.

  • Тернарные операторы не рекомендуются к использованию.

  • Отрицание в имени функции/переменной.

  • Функция или булева переменная всегда используется с Не.

  • Проверка заполненности/пустоты коллекции.

Релиз 1.21 от 01.08.2019

Новые правила для языка запросов

  • ЕстьNull для полей, полученных из результатов левого соединения.

Новые правила для кода 1С

  • Несколько вызовов серверных методов внутри клиентского метода.

  • Одинаковые блоки, следующие друг за другом.

  • Значительно улучшено определение одинаковых выражений:

  • улучшено поведение правил + правила ускорены (фактически все правила переписаны):

  • «Сравнение выражения с самим собой»,

  • «Одинаковый код во взаимоисключаемых ветках ветвления кода»,

  • «Одинаковые условия в блоке "Если ИначеЕсли"»,

  • «Одинаковые части условий в разных условиях блока "Если ИначеЕсли"»,

  • добавлена поддержка новых операций для выявления схожества блоков кода,

  • проверке равенства выражений «сравнения, сложения, умножения, И, Или» не учитывается порядок выражений, например,
    А = Б теперь совпадает с Б = А,
    А + 10 + 20 совпадает с 20 + А + 10.

  • Большое количество возвратов в методе.

  • Вложенные вызовы функций.

  • Изменение итератора/счетчика цикла.

Клиентские обращения

  • Редкая ошибка разбора BSL – передача "Знач" перед параметром функции.

  • Проблема с правилом Магические числа для функции и конструктора Цвет – клиент Деснол.

  • Ложное определение строки как текста запроса.

  • Ошибка правила "Возможно выполнение внешнего кода".

  • Исправить двойной показ замечания для Выполнить/Вычислить.

  • Правило значительно ускорено и полностью переписано.

Исправления

  • Исправлен баг – при включенном флаге sonar.bsl.skipVendorSupportedObjects файлы не из конфигурации (внешние обработки) не анализировались, также добавлен показ предупреждения о том, что включен флаг исключения файлов на поддержке, в логе анализа.

  • Баг с падением анализа на 8.3.15 на ванесса-сервисах при расчете метрики "Когнитивная сложность".

Доработки

  • Улучшена обработка некоторых выражений для правила "Возможное использование неинициализированной переменной".

Увеличена до Critical важность правила:

  • "Одинаковые условия в последовательности вида
    Если (....) ИначеЕсли (....) ИначеЕсли (....)",

  • Значение итератора не используется в цикле,

  • Удаление из коллекции внутри цикла по коллекции.

  • Отметить тегами безопасности все правила, в которых есть ссылки на misra, cwe, cert

  • Уточнены описания многих правил, в т.ч. добавлены ссылки на мировые стандарты кода, в т.ч. и по безопасности.

Внутренние работы
  • Восстановлено автоподключение активных правил к Максимальному профилю.

  • Отделил тестовую функциональность из боевого класса BSLAstScanner.

  • Возможность для запросов указать несколько вхождений нод для одного замечания.

  • Решить проблему падения сборки на CI Gitlab – ошибкой сборки caused by: java.io.FileNotFoundException: /builds/products/sonarqube/sonarqube-bsl-plugin/bsl-core/target/classes (Is a directory).

Релиз 1.20 от 13.06.2019

Новые правила

  • Правило “Одинаковые части условий в разных условиях блока ‘Если ИначеЕсли’”.

  • Правило “Неиспользуемый итератор цикла”.

  • Правило “Удаление из коллекции внутри цикла по коллекции”.

Глобальные изменения

  • Упрощена работа с параметризуемыми правилами – запрос от клиента.

  • Настраиваемые правила можно быстро найти по тегу “parameters”.

  • В документацию добавлен раздел “Настраиваемые правила с возможность параметризации”.

  • Исправлено падение анализа на некоторых модулях 1С одного из клиентов – запрос от клиента.

  • Повышена серьезность правила “Разрываемые тексты запросов – Невозможно разобрать строку, которая выглядит как запрос” до уровня “MAJOR”.

Доработано

  • Исключен показ “шумящих” пометок об использовании переменной в правиле “Возможное использование неинициализированной переменной” – запрос от клиента.

Исправлено

  • Правило “Имена процедур/функций должны быть написаны без опечаток” ошибочно не активировалось ни в одном профиле.

Версия 1.3.0 расширения для интеграции с 1С:АПК:

Доработано
  • Особенности и исправленные ошибки теперь не выгружаются как замечания – запрос от клиента.
  • В описаниях правил доработаны ссылки на стандарты ИТС.
  • Дополнена документация – запрос от клиента.
Исправлено
  • Не загружались замечания, связанные с некоторых свойствами некоторых метаданных 1С.

Релиз 1.19 от 14.05.2019

  • Доработан лексический анализатор для корректного учета пробелов/символов табуляции при подсчете строки.

  • Соответственно улучшен алгоритм подсчета количества символов в правиле "Ограничение на длину строки".

  • Из встроенных профилей качества исключаются устаревшие правила.

Релиз 1.2.1 пакета sonar-edt-result

Исправлено
  • Пакет sonar-edt-result мог не устанавливаться при установке из ospx-файла поставки.

Релиз 1.2.0 расширения для интеграции с 1С:АПК.

  • Доработана документация по интеграции с 1С:АПК.
Исправлено
  • Не всегда загружаются замечания от 1С:АПК на сервере SonarQube.
Добавлено
  • При загрузке замечаний от 1С:АПК выдаются предупреждения, если не существует активного правила с указанным кодом правила в файле замечаний от 1С:АПК.

Релиз 1.18 от 30.04.2019

  • 3 поставляемых профиля качества – "Рекомендуемый", "Максимальный" и "Минимальный".

  • Замечания на сервере привязываются к строке и позиции в строке, а не только к строке.

Исправления

  • Для модулей команд не учитываются настройки поддержки и в итоге даже залоченный от изменений модуль команды попадает в анализ.

  • Ложное срабатывание правила bsl:LineLength на последней строке запроса.

  • Ложные срабатывание правила bsl:MetadataSynonym.

  • Созданы полезные скрипты для ускорения запуска коробочных и облачных клиентов SonarQube 1C (BSL) Plugin.

  • Дополнена документация плагина – добавлены более подробные рекомендации об исключениях файлов из анализа.

Инструмент vanessa-sonar версии 1.2.0

  • Уточнена генерация файла sonar-project.properties.

Релиз 1.17 от 29.03.2019

  • Добавлена поддержка версии 7.7 сервера SonarQube.

  • Исправлена ошибка аварийного завершения анализа на некоторых модулях bsl.

Релиз 1.16 от 22.03.2019

  • Значительно ускорена производительность анализа при разбиении исходников на модули SonarQube.

Реализовано значительное ускорение анализа конфигураций, находящихся на частичной поддержке поставщика:

  • реализовано исключение из анализа объектов метаданных, находящихся на полной поддержке поставщика в статусе "Не редактируется",

  • могут исключаться bsl-модули и xml-файлы метаданных.

Реализован импорт полностью управляемых внешних замечаний от сторонних статических анализаторов кода:

  • управляемость замечаниями – главное отличие от штатной загрузки неуправляемых внешних замечаний, предоставляемых сервером SonarQube,

  • документирован формат получения описаний правил сторонних статических анализаторов кода.

Реализован импорт управляемых внешних замечаний от 1С:EDT:

  • файл описания управляемых правил 1С:EDT добавлен в поставку.

Расширен импорт управляемых внешних замечаний от 1С:EDT, получаемых с помощью инструмента "sonar-edt-result":

  • добавлена возможность управления списком правил, выгружаемых из 1С:АПК 1.2,

  • файл описания управляемых правил 1С:АПК 1.2 добавлен в поставку.

vanessa-sonar

В поставку включен инструмент "vanessa-sonar" – инструмент управления настройкой анализа:

Инструмент умеет создавать готовый файл настроек sonar-project.properties, а также группировать исходники по подсистемам 1С для управления подсистема 1С как модулями на сервере SonarQube.

Доработаны правила "Неиспользуемый параметр процедуры/функции" и "Неиспользуемая процедура/функция":

  • Значительно уменьшено количество ложных срабатываний для модулей метаданных, ускорен анализ.

  • Улучшена производительность анализа.

  • Исправлены мелкие ошибки, иногда возникающие при импорте внешних замечаний от 1С:АПК.

Релиз 1.15 от 15.02.2019

  • Значительно доработана поставляемая документация плагина.

  • Новое правило “Использование инструкций препроцессора в клиент-серверных общих модулях”.

  • Улучшена производительность анализа.

  • В поставку включен инструмент “sonar-edt-result” – Конвертер результатов проверки 1C:Enterprise Development Tools (EDT) в json-формат для SonarQube.

Дополнения/исправления:

  • При расчете цикломатической сложности теперь учитывается тернарный оператор “?”.

  • Для исключения ложных срабатываний доработаны правила:

  • “Неиспользуемый параметр процедуры/функции”,

  • “Проверка, что функция является процедурой”,

  • “Ссылка на отсутствующую роль”,

  • “Синоним метаданного не соответствует имени метаданного”,

  • “Псевдонимы для полей таблиц”.

Релиз 1.14 от 26.12.2018

  • Добавлен анализатор описания метаданных для развитие анализа метаданных (требуется дополнительная настройка сканирования. См. ниже «Настройка сканирования для анализа метаданных»)

Новые правила анализа метаданных

  • Представление объекта не соответствует имени метаданного.

  • Длина наименования объекта метаданных больше N символов.

  • Длина наименования объекта процедуры/функции больше N символов.

  • Присутствие защищенных, запароленных модулей.

Новые правила

  • Несколько вложенных и последовательно идущих “Если”.

  • Использование запроса в цикле в рамках одного модуля.

  • Запись константы внутри транзакции проведения документа/из модуля документа.

  • Использование функции “ОткрытьМодально”.

  • Использование функции “НайтиПоРеквизиту”.

  • Проверка наличие метода, объявленного при создании оповещения.

Исправления/дополнения

  • Улучшена производительность анализа.
  • Восстановлена работоспособность XPATH-правил.
  • Доработан парсер языка для более точного учета инструкций препроцессора.

Улучшена работа с АПК – добавлено расширение для работы в АПК, позволяющее выполнять автозапуск АПК и подготовку файла результатов АПК:

  • в поставку включена документация на использование расширения и подключение файла результатов АПК к сканированию исходников с помощью нашего плагина.

Уточнен показ замечаний для правил

  • Одинаковый код во взаимоисключаемых ветках ветвления кода,

  • Одинаковые условия в последовательности вида "Если (....) ИначеЕсли (....) ИначеЕсли (....)".

  • Уточнен разбор запросов.

  • Правила на использование “НайтиПоКоду” и “НайтиПоНаименованию” стали отлавливать больше проблемных ситуаций.

Настройка сканирования для анализа метаданных

Для анализа метаданных требуется перенастроить анализ xml-файлов в файле “sonar-project.properties”. См. раздел «Настройка sonar-project.properties»

Релиз 1.13 от 16.11.2018

  • Плагин поддерживает работу на сервере SonarQube 7.4.

Борьба с дублирование кода и копипастом:

  • Правило “Блоки Тогда и Иначе оператора Если и других взаимоисключаемых операторов полностью совпадают, скорее всего, имеется логическая ошибка.”

  • Правило “Одинаковые условия в последовательности вида Если (....) ИначеЕсли (....) ИначеЕсли (....).”

Проверки использования попыток и исключений

  • Правило “Конструкция Попытка...Исключение...КонецПопытки не содержит кода в исключении”,

  • Правило “Использование конструкции Попытка/Исключение для приведения значения к типу”.

  • Проверки правильности использования директив компиляции:

  • Правило “Все методы на управляемой форме должны иметь директиву компиляции”,

  • Правило “Использована недопустимая директива компиляции.”.

  • Правило “Неразрешимые ссылки на объекты метаданных в элементах форм и в динамических списках”:

  • поиск на форме ошибок вида Справочник.ФизическиеЛица.Форма.ФормаЭлемента.Форма Неразрешимые ссылки на объекты метаданных (12),

Проверки использования процедур/функций

  • Правило “Запрет пропуска обязательных параметров вызываемых методов”,

  • Правило “Вероятно, функция является процедурой”.

  • Правило для поиска уязвимостей “Использование Вычислить”.

Прочие правила

  • Правило “Мусорные или пустые комментарии”,

  • Правило “Использование лишних пробелов”.

  • Уточнены правила, в т.ч. уменьшено количество ложных срабатываний для правил:

  • “Неиспользуемая процедура” при проверке расширения,
  • “Проверка используемости параметров обработчика событий” при проверке расширения.

  • Добавлен FAQ по плагину.

  • Небольшое ускорение работы, исправление разных мелких проблем, иногда возникающих при анализе.

Релиз 1.12 от 24.09.2018

(В том числе релиз 1.12.1 от 09.10.2018 и релиз 1.12.2 от 14.11.2018)

  • Правило “Обращение к стандартному реквизиту составного типа регистров” . Если регистратор регистра является составным типом, тогда использование реквизитов регистратора через точку в запросе без функции “Выразить” является неверным.
  • Правило “Выражение сравнивается с самим собой”

  • Правило “Недостижимый код”

  • Правило на проверку уязвимости “Использование операторов «СистемнаяИнформация» и «ПользователиОС»”

Доработки

  • Уточнено правило “Возможно использование неинициализированной переменной” - уменьшено количество ложных срабатываний

  • Устранены или уточнены ранее не очень понятные предупреждения о метаданных, в xml-описании которых выявлены проблемы

  • Некоторое ускорение анализа исходников с помощью дополнительного кеширования

Релиз 1.11 от 12.07.2018

  • Реализована поддержка сервера SonarQube версии 7.1 и 7.2

  • Исправлены выявленные ошибки в правилах анализа и справке

Релиз 1.10 от 21.06.2018

  • Правило “Возможно использование неинициализированной переменной”. Выявляет случаи, когда переменная создается в блоке условий или циклов, а затем используется вне этих блоков.
  • Добавлен анализ процедур, используемых в качестве обработчиков оповещений. Методы, являющиеся обработчиками оповещений, обрабатываются, как отдельная категория методов.
  • Правило “Экспортные процедуры/функции/переменные должны содержать описание” доработано с учетом использования метода в качестве обработчика оповещения.

Релиз 1.9 от 23.04.2018

Расширение поведения

  • оптимизирована работа с большими конфигурациями 1С за счет перехода на более новое api SonarQube,

  • изменена минимальная версия sonarQube для использования - 6.7, максимально стабильная – 7 0, условно стабильная 7.1,

  • добавлена реализации английских имен областей ОБРАБОТЧИКИСОБЫТИЙФОРМЫ (EVENTSHANDLERS), СЛУЖЕБНЫЕПРОЦЕДУРЫИФУНКЦИИ (SERVICEPROCEDURESANDFUNCTIONS) - пример проекта на английском https://github.com/FoxyLinkIO/FoxyLink/tree/develop/src,

  • реализована поддержка sonarlint в релизах старше 7.0 совместно с плагином sonarlint-vscode,

  • проверка правописания проверяется в многопоточном режиме и выполняется быстрей,

  • оптимизировано построение графа метаданных 1С за счет применение улучшенного парсера XSD схем.

Новые правила в релизе

  • проверка “В строке допускается не более одного оператора”

Изменение (улучшение) правил

  • В правило обработки закоментированого кода добавлена возможность пропускать строки начинающие с определенных символов указанных пользователем, например: “Разделитель - запятая. Пример заполнения: //, //”.

  • Определение клиентского модуля в правиле проверки именования теперь определяется на основе свойств метаданных находящихся в кеше ВызовСервера = Истина или Сервер = Истина (ранее использовалось только свойство ВызовСервера).

  • Оптимизирована работа правила определения правильности именования клиент-серверных модулей.

  • Оптимизирована работа правила определения правильности именования глобальных модулей.

  • Оптимизирована работа правила определения правильности именования модулей работающих в привилегированном режиме.

  • Проверка постфиксов общих модулей теперь поддерживает английские константы ServerCallCached, Cached, ClientCached и т.д.

  • В проверку на обязательность применения конструкции ОбменДанными.Загрузка добавлена оптимизация по работе с английскими наименованиями.

  • В проверку правописания добавлена поддержка типовых аббревиатур используемых в стандарте разработки на 1С.

  • в проверка на неиспользуемый параметр функции добавлена поддержка анализа конструкции внутри функции Выполнить().

  • В анализаторе запросов исправлено позиционирование точки срабатывания правил в случаях когда текст запроса содерджит комментарии.

  • В анализаторе запросов 1С добавлена полная поддержка псевдонимов полей в секциях ИНДЕКСИРОВАТЬ ПО, ГРУППИРОВаТЬ ПО и их английским аналогам.

  • Улучшено определение не документируемых экспортных процедур и функций в части английской документации.

Дополнительные новости
  • Начата локализация SonarQube 7.1 на русский - статус можно наблюдать в связанном репозитории https://github.com/silverbulleters/sonar-l10n-ru/tree/develop

  • На внутреннем контуре начата отладка релиза 1.9.2 c поддержкой версии sonarQube 7.1

Релиз 1.8.1 от 09.11.2017

Изменения грамматики языка запросов

  • Добавлена обработка конструкций вида ВЫРАЖЕНИЕ В (ВложеннаяОперация), например А <> Истина В (ИСТИНА)

  • Исправлена ошибка разбора запроса на операторе МЕЖДУ с отрицательными числами

Прочие изменения

  • Добавлена поддержка всех Unicode символов-букв при разборе текста модуля

  • Исправлены падения sonar-scanner на *nix-системах

Релиз 1.8 от 31.10.2017

Добавлены проверки

  • Последовательные пустые строки (bsl:ConsecutiveBlankLines)

  • Пропущено указание последнего параметра при вызове метода (bsl:MissingLastParameter)

  • Ключевые слова должны быть отделены пробелом (bsl:SpaceAroundKeyword)

Исправлены проверки

  • Убрано ложное срабатывание проверки “Разыменование полей в запросе” (bsl:ExcessiveDereferenceFields) на обращении к колонкам табличной части, выбираемым через Объект.ТабличнаяЧасть.(Поле1, Поле2)

  • Убрано ложное срабатывание проверки “Наличие всех параметров в комментарии экспортной процедуры (функции)” (bsl:DocumentationMissingParametersInParametersSection), если тип параметра содержит символ _

Изменены проверки

  • Проверка “Ограничение на выполнение «внешнего» кода на сервере” (bsl:ExecuteExport) переименована в “Ограничения на использование "Выполнить" и "Вычислить" на сервере”. Обновлено описание проверки.

Прочие изменения

  • Плагин переведен на работу с API версии 6.6. Для работы требуется версия SonarQube 6.6 и новее. Более старые версии не поддерживаются.

  • В логах sonar-scanner больше не показывается информация о расчете устаревшей метрики

  • Метрики Cognitive Complexity / Function и Cognitive Complexity / File переведы в домен Complexity

  • Для настройки анализируемых расширений файлов включена возможность указания расширений в виде списка

Релиз 1.7 от 19.10.2017

Изменены проверки

  • Проверка “Необязательные параметры процедуры/функции расположены перед обязательными” (bsl:SequenceArguments) переведена в разряд “Ошибок”, время на исправление увеличено до 5 минут

  • В проверку “Наличие пробела в начале комментария” (bsl:SpaceAfterCommentSymbols) добавлена настройка, позволяющая задать пропуск комментариев, начинающихся с определенных символов

  • Проверка “Имена процедур/функций должны быть написаны без опечаток” (bsl:SpellCheckMethodName) больше не срабатывает с требованием привести слово к верхнему регистру

  • Проверка “Назначение псевдонимов полям запроса” (bsl:AliasMustHaveAsKeyword) переименована в “Пропущено ключевое слово”КАК" перед псевдонимом поля", изменено сообщение, серьезность проверки повышена до MAJOR, время на исправление понижено до 1 минуты. Принцип срабатывания проверки не изменился.

Исправлены проверки

  • Исправлено позиционирование проверки “Не следует использовать логическое”ИЛИ" в секции “ГДЕ” запроса"

  • Исправлены ошибочные срабатывания проверок на устаревшие/запрещенные методы, когда имя функции использовалось как имя свойства или переменной

Добавлены проверки

  • Максимальное количество строк кода в процедуре/функции (bsl:MethodSizeLOC)

  • Использование несуществующих директив компиляции (bsl:UnknownCompilationDirective)

  • Назначение псевдонимов полям запроса (bsl:RequireAliasInTempTable)

  • Отсутствует обязательная конструкция Если ОбменДанными.Загрузка Тогда ... (bsl:DataExchangeLoad)

  • Запрет использования выражений и полей таблиц в операторе ПОДОБНО (bsl:ExpressionInLikeOperator)

  • Текст запроса не должен быть написан в одну строку (bsl:QueryOneLiner)

  • Сообщение содержит нерекомендуемое местоимение (“Вы”, “Вас” и пр.). (bsl:NonRecommendedPronoun)

  • В параметрах функций РольДоступна() и Пользователи.РолиДоступны() должны быть указаны существующие роли (bsl:UnknownRole)

  • Термин 1C:Предприятие ошибочно задан с латинской C (bsl:LatinC)

  • Рекомендуется избегать в названии общего модуля таких общих слов как “Процедуры”, “Функции”, “Обработчики”, “Модуль”, “Функциональность” и т.п. (bsl:CommonModuleInvalidName)

  • Клиентский общий модуль должен именоваться с постфиксом Клиент (bsl:CommonModuleNameClient)

  • Клиент-серверный общий модуль должен именоваться с постфиксом КлиентСервер (bsl:CommonModuleNameClientServer)

  • Глобальный общий модуль должен именоваться с постфиксом Глобальный (bsl:CommonModuleNameGlobal)

  • Для глобальных модулей постфикс Клиент добавлять не следует (bsl:CommonModuleNameGlobalClient)

  • Модули, выполняющиеся в привилегированном режиме, именуются с постфиксом ПолныеПрава (bsl:CommonModuleNamePrivileged)

  • Общий модуль с повторно используемыми значениями должен именоваться с постфиксом ПовтИсп (bsl:CommonModuleNameReuseValue)

  • Общий модуль с вызовом сервера должен именоваться с постфиксом ВызовСервера (bsl:CommonModuleNameServerCall)

  • Неиспользуемый реквизит формы (bsl:UnusedFormAttribute)

  • Неиспользуемая переменная (bsl:UnusedVariable) - добавлена в режиме BETA, в режиме анализа конфигурации срабатывает только для общих модулей и модулей менеджеров

Проверки отмечены как устаревшие

  • В качестве правого операнда операции сравнения “ПОДОБНО” указано поле таблицы. (bsl:ACC_FUNC_379)

  • Термин “1C:Предприятие” ошибочно задан с латинской “C” (bsl:ACC_FUNC_321)

  • Обращение к несуществующей роли (bsl:ACC_FUNC_283)

  • Сообщение содержит нерекомендуемое местоимение (“Вы”, “Вас” и пр.) (bsl:ACC_000000223)

  • Глобальный общий модуль должен именоваться с постфиксом “Глобальный” (bsl:ACC_FUNC_083)

  • Не следует добавлять постфикс “Клиент” в наименование глобального общего модуля с постфиксом “Глобальный” (bsl:ACC_FUNC_363)

  • Общий модуль с повторно используемыми значениями должен именоваться с постфиксом “ПовтИсп” (bsl:ACC_FUNC_085)

  • Общий модуль, для которого предусмотрен вызов сервера, должен именоваться с постфиксом “ВызовСервера” (bsl:ACC_FUNC_090)

  • Общий модуль, доступный на сервере и на клиенте, должен именоваться с постфиксом “КлиентСервер” (bsl:ACC_000000245)

  • Общий модуль, доступный только на клиенте, должен именоваться с постфиксом “Клиент” (bsl:ACC_FUNC_080)

  • Привилегированный общий модуль должен именоваться с постфиксом “ПолныеПрава” (bsl:ACC_FUNC_084)

  • Рекомендуется избегать в названии общего модуля таких общих слов как “Процедуры”, “Функции”, “Обработчики”, “Модуль”, “Функциональность” и т.п. (bsl:ACC_FUNC_073)

  • Отсутствует обязательная конструкция “Если ОбменДанными.Загрузка Тогда …” (bsl:ACC_FUNC_075)

  • Общий модуль недопустимого типа (bsl:ACC_FUNC_125)

  • Изменения грамматики встроенного языка:

  • Исправлена обработка процедур, у которых объявлена и аннотация и директива компиляции

  • Изменения грамматики языка запросов:

  • В грамматику внесены встроенные функции языка запросов

  • Значительно переработана структура выражения EXPRESSION

  • Исправлена ошибка разбора запросов с использованием конструкций ИТОГИ и АВТОУПОРЯДОЧИВАНИЕ в одном пакете запроса

  • Добавлена обработка символов * в значении “все поля таблицы”

  • В конструкции ПЕРИОДАМИ добавлена обработка параметров запроса и пустых ограничивающих значений дат

  • В конструкцию ИТОГИ ... ПО добавлена обработка выражений, не являющихся агрегатной функцией

Прочие изменения

  • Значительно уменьшено потребление оперативной памяти в момент выполнения клиентской части анализа

  • Лексер запросов теперь корректно обрабатывает завершение строки запроса без точки с запятой или скобки. Как следствие большее количество многострочных строк теперь анализируются как запросы.

  • Анализатор запроса теперь корректно обрабатывает запросы, начинающиеся со встроенных функций

  • Разбор результата работы инструмента покрытия кода больше не требует подключения к интернету

  • Сообщение о неуспешном разборе строки как текста запроса переведено на уровень логов TRACE

Релиз 1.6.1 от 11.09.2017

Изменены проверки

Изменены сообщения в проверках
  • Каноническое написание ключевых слов (bsl:KeyWordNotCanonical)

  • Блоки кода не должны быть “закомментированы” (bsl:CommentedOutCodeLine)

  • Чрезмерный уровень вложенности конструкций "Если", "Для", "Пока" и "Попытка" (bsl:NestedControlFlowDepth)

  • Использование вложенных запросов в условии соединения (bsl:SubqueryWhere)

  • Запросы, выполняющие соединение с вложенными запросами или виртуальными таблицами(bsl:SubqueryJoin)

  • Использование метода “Сообщить()” (bsl:DeprecatedMethodMessage)

Изменены наименования проверок
  • Использование строковых литералов в тексте запроса (bsl:StringLiteralInQuery)

  • Разыменование полей в запросе (bsl:ExcessiveDereferenceFields)

Изменены описания в проверках
  • В модуле должны быть определены стандартные области (bsl:StandardRegionCheck)
Исправлено позиционирование
  • Для вызова НачатьТранзакцию отсутствует парный вызов ОтменитьТранзакцию (bsl:PairBeginRollbackTransactionCall)

  • Для вызова НачатьТранзакцию отсутствует парный вызов ЗафиксироватьТранзакцию (bsl:PairBeginCommitTransactionCall)

  • Неиспользуемая процедура/функция (bsl:UnusedMethod)

Прочие изменения
  • В проверку Имена процедур/функций должны быть написаны без опечаток (bsl:SpellCheckMethodName) добавлена настройка:
  • Пропускать неизвестные слова
  • Проверка Каноническое написание ключевых слов (bsl:KeyWordNotCanonical) исправлена под изменение грамматики
  • Настройка “Разрешить написание логических операторов”ИЛИ" и “НЕ” как “Или” и “Не”" (AllowTitleCaseLogicalKeywords) по умолчанию включена
  • Настройка “Разрешить в написании оператора”Для каждого" заглавную букву “К”" (AllowTitleCaseForEachKeywords) по умолчанию включена

Проверки отмечены как устаревшие:

  • Строка текста модуля содержит букву “ё”. (bsl:ACC_FUNC_163)

  • В структуре модуля присутствуют пустые области. (bsl:ACC_FUNC_273)

Изменения правил грамматики встроенного языка

  • Конструкция Для каждого приведена к каноническому написанию

Исправлено

  • Падение анализатора при наличии комментариев, содержащих "$"

  • Ложное срабатывание проверок описания процедур и функций в случае отсутствия пробела после “//”

Релиз 1.6.0 от 28.08.2017

Изменены проверки

  • Оптимизированы (затраты оперативной памяти, производительность) проверки:
  • Имена процедур/функций должны быть написаны без опечаток (bsl:SpellCheckMethodName)
  • Комментарий с тегом “FIXME” FixmeTagPresence (bsl:FixmeTagPresence)
  • Использование тега “NOSONAR” (bsl:NoSonar)
  • Комментарий с тегом “TODO” (bsl:TodoTagPresence)
  • В коде не должно содержаться URL-ссылок (bsl:HardcodedURL)
  • Прямое указание пути в коде (bsl:HardcodedPaths)
  • Прямое указание GUID в коде (bsl:HardcodedGUID)

  • Изменены сообщения в проверках:

  • Соответствие имен процедур и функций соглашению о кодировании (bsl:MethodNaming)
  • Правила образования имен переменных (bsl:VariableNaming)

Добавлены проверки

  • Блоки кода не должны быть “закомментированы” (bsl:CommentedOutCodeLine)

  • В модуле должны быть определены стандартные области (bsl:StandardRegionCheck)

  • Избыточное наличие описания параметра в комментарии к процедуре (функции), отсутствущего в сигнатуре вызова (bsl:DocumentationExcessParametersInParametersSection)

  • Избыточное наличие секции “Параметры” в комментарии процедуры (функции) без параметров (bsl:DocumentationExcessParametersSection)

  • Использована конструкция “ДанныеФормыВЗначение()” (bsl:DeprecatedMethodFormDataToValue)

  • Использование буквы “ё” в комментариях (bsl:UsingUOInComment)

  • Каноническое написание ключевых слов запроса (bsl:QueryKeyWordNotCanonical)

  • Код должен быть расположен внутри области (bsl:CodeOutsideRegion)

  • Код не должен содержать пустых областей (bsl:EmptyRegion)

  • Наличие всех параметров в комментарии экспортной процедуры (функции) (bsl:DocumentationMissingParametersInParametersSection)

  • Наличие пробела в начале комментария (bsl:SpaceAfterCommentSymbols)

  • Наличие секции параметров в описании экспортной процедуры (функции) (bsl:DocumentationParameters)

  • Неэкспортная процедура (функция) в разделах “ПрограммныйИнтерфейс” или “СлужебныйПрограммныйИнтерфейс” (bsl:NonExportMethodInInterfaceRegion)

  • Секция “Возвращаемое значение” должна располагаться после секции “Параметры” в комментарии к функции (bsl:DocumentationReturnValueSectionPosition)

  • Соответствие имен областей соглашению о кодировании (bsl:RegionNaming)

  • Стандартные области не должны быть вложенными в другие области (bsl:NestedStandardRegion)

Проверки отмечены как устаревшие

  • Комментарий содержит букву “ё”. (bsl:ACC_FUNC_006)

  • Использована конструкция “ДанныеФормыВЗначение()”. (bsl:ACC_FUNC_068)

  • В модуле должны быть определены стандартные области. (bsl:ACC_FUNC_239)

  • В модуле есть код, который расположен вне области. (bsl:ACC_FUNC_240)

  • Нет пробела в начале комментария. (bsl:ACC_FUNC_246)

  • Ключевое слово запроса написано не канонически. (bsl:ACC_FUNC_254)

  • Закомментированный код расположен вне описания процедуры или функции. (bsl:ACC_FUNC_282)

  • Стандартная область является вложенной. (bsl:ACC_FUNC_286)

  • Неэкспортная процедура (функция) в разделе “ПрограммныйИнтерфейс”. (bsl:ACC_FUNC_388)

  • Неэкспортная процедура (функция) в разделе “СлужебныйПрограммныйИнтерфейс”. (bsl:ACC_FUNC_389)

  • Отсутствует или неверно описана секция “Параметры” в комментарии к экспортной процедуре (функции). (bsl:ACC_FUNC_399)

  • Отсутствует или неверно описана секция “Возвращаемое значение” в комментарии к экспортной функции. (bsl:ACC_FUNC_400)

  • Не описаны некоторые параметры в секции “Параметры” в комментарии к экспортной процедуре (функции). (bsl:ACC_FUNC_401)

  • Секция “Возвращаемое значение” находится перед секцией “Параметры” в комментарии к экспортной функции. (bsl:ACC_FUNC_402)

  • Описаны лишние параметры в секции “Параметры” в комментарии к экспортной процедуре (функции). (bsl:ACC_FUNC_405)

  • Описана секция “Параметры” в комментарии к экспортной процедуре (функции), не имеющей параметров. (bsl:ACC_FUNC_410)

Изменения правил грамматики встроенного языка

  • Добавлены аннотации расширений (Перед, Вместо, После)

  • Области вынесены в отдельные грамматические узлы

  • Добавлена обертка над стандартным типом узла IDENTIFIER, учитывающая особенности встроенного языка

  • Добавлена частичная поддержка разрыва выражений инструкциями Область

  • В узел директив компиляции добавлены отдельные под-узлы для каждого типа директивы

Изменения правил грамматики запросов

  • Добавлен высокоуровеный узел, означающий текст запроса целиком.

  • Добавлена обработка конструкции ВЫБОР в режиме “switch” (ВЫБОР Поле КОГДА 1 ТОГДА ... КОГДА 2 ТОГДА ... КОНЕЦ)

  • Добавлена обработка обращений через точку к результату оператора ВЫРАЗИТЬ

  • Исправлены ошибки разбора вложенных запросов внутри конструкции В

Прочие изменения

  • Убран спам “Context set to…” из лога sonar-scanner. Вместо него раз в пять секунд выводится информация о текущем анализируемом файле и об общем количестве файлов

  • В лог добавлен прогресс сохранения результатов анализа

  • Обновлена библиотека проверки орфографии

Релиз 1.5.0 от 27.07.2017

Изменены проверки

  • Исправлено позиционирование проверок запроса, когда текст модуля содержит комментарии

  • Исправлено определение переопределяемых общих модулей в проверке “Пустая процедура/функция”

  • Исправлено позиционирование проверки “Количество параметров процедуры/функции более 7”

  • Исправлено позиционирование проверки “Количество необязательных параметров процедуры/функции более 3”

  • Исправлено позиционирование проверки “Необязательные параметры процедуры/функции расположены перед обязательными”

  • Убрано ложное срабатывание проверки “Неиспользуемая процедура/функция”, когда вызываемый метод находится внутри сложного выражения

  • Убрано ложное срабатывание проверки “Сравнение с NULL в запросе должно быть только через ЕСТЬ NULL” на конструкции ДЛЯ ИЗМЕНЕНИЯ, блокирующей виртуальную таблицу

  • Проверка “В начале процедуры обработки регламентного задания отсутствует вызов метода”ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания();" (bsl:ACC_FUNC_302) объявлена устаревшей

  • Проверка “Ключевое слово написано не канонически.” (bsl:ACC_000000248) объявлена устаревшей

Добавлены проверки

  • Каноническое написание ключевых слов (bsl:KeyWordNotCanonical). Имеет настройки:
  • Разрешить в написании логического оператора “Для каждого” заглавную букву “К”
  • Разрешить написание логических операторов “ИЛИ” и “НЕ” как “Или” и “Не”

  • Магические числа не должны использоваться (bsl:MagicNumber). Имеет настройки:

  • Разделенный запятыми список разрешенных чисел
  • Разделенный запятыми список процедур и функций, в которых разрешено использование “магических” чисел

  • Неиспользуемый параметр процедуры/функции (bsl:UnusedParameter). Имеет настройки:

  • Анализировать обработчики подписок на события
  • Анализировать переопределяемые общие модули
  • В режиме анализа конфигурации срабатывает только на общих модулях

  • Использование вложенных запросов в условии соединения (bsl:SubqueryWhere)

  • XPath правило языка запросов (bsl:XPathQuery) – шаблон правила на базе XPath для языка запросов

Изменения правил грамматики

  • В грамматику запросов добавлена обработка упорядочивания и автоупорядичивания во вложенных запросах

  • В грамматику запросов добавлена обработка вложенной выборки из табличной части (ВЫБРАТЬ Документ.Реквизит, Таблица.ТЧ.(Поле1, Поле2))

  • В грамматику запросов добавлена обработка синонимов итоговых полей

  • Исправлена ошибка разбора запроса, содержащего конструкции ИНДЕКСИРОВАТЬ и ДЛЯ ИЗМЕНЕНИЯ в одном пакете

  • Исправлены ошибки разбора запроса, когда имя поля, получаемое через точку, совпадает с одним из ключевых слов языка запросов (например, Ссылка)

  • Исправлена ошибка конфликта конструкции ЕСТЬ NULL и последующего идентификатора

  • Анализатор запросов научился анализировать запросы, начинающиеся с литералов (ВЫБРАТЬ ИСТИНА КАК Поле1...)

  • В грамматику встроенного языка добавлено выделение используемых переменных в отдельный узел

Релиз 1.4.0 от 11.07.2017

Изменены проверки

  • Проверка “Имена процедур/функций должны быть написаны без опечаток”:
  • обновлен словарь
  • в пользовательский интерфейс добавлена настройка слов-исключений
  • проверка переведена в статус READY

  • Исправлено позиционирование проверки “Пустая процедура/функция”

  • Исправлено позиционирование первого срабатывания проверок “Когнитивная сложность методов не должна быть слишком высокой” и “Цикломатическая сложность методов не должна быть слишком высокой”

Добавлены проверки

  • Неиспользуемая процедура/функция

  • Запросы, выполняющие соединение с вложенными запросами или виртуальными таблицами

Изменения правил грамматики

В грамматику запросов добавлены
  • обработка ключевых слов периодов (ДЕНЬ, МЕСЯЦ и прочее)

  • обработка конструкций (Поле1, Поле2) В (ВЫБРАТЬ Поле1, Поле2 ИЗ ...)

  • расширены правила секции ИТОГИ, добавлена секция ПЕРИОДАМИ

В грамматику встроенного языка 1С добавлены конструкции
  • ДобавитьОбработчик

  • УдалитьОбработчик

Прочее

  • В интерфейс настроек вынесена настройка File suffixes для указания расширений файлов, анализируемых плагином

  • В ядре плагина и проверках исправлены места, которые могли привести к ошибкам NullPointerException и остановке процесса анализа

  • Выключенные проверки языка запросов больше не приводят к остановке процесса анализа

Релиз 1.3.0 от 02.04.2017

Исправлены проверки

  • В проверке “Экспортные процедуры/функции/переменные должны содержать описание” убрано ложное срабатывание, когда перед определением процедуры находилась инструкция препроцессору

  • В проверке “Прямое указание GUID в коде” убрано ложное срабатывание на пустом GUID

Добавлены проверки

  • В начале процедуры обработки регламентного задания отсутствует вызов метода “ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания();”.

  • Запрет на использования конструкции “ПЕРВЫЕ” совместно с конструкцией “АВТОУПОРЯДОЧИВАНИЕ”

  • Ограничение на выполнение «внешнего» кода на сервере

  • Ограничение на использование конструкции “АВТОУПОРЯДОЧИВАНИЕ”

  • Совместное использование “УПОРЯДОЧИТЬ ПО” с конструкцией “РАЗЛИЧНЫЕ”

  • Функция должна возвращать значение

Изменения правил грамматики

  • Язык запросов: * Добавлено правило грамматической конструкции “УНИЧТОЖИТЬ” * Добавлено правило грамматической конструкции “ИМЕЮЩИЕ” * Добавлена обработка пустого пакета

Прочее

  • Добавлена обработка метаданных конфигурации в формате XML

  • Обеспечена работа с SonarQube 6.3

Релиз 1.2.0 от 22.02.2017

  • Все проверки (за исключением проверки на дублирующиеся участки кода) переведены на русский язык

Исправлены проверки

  • В проверке “Прямое указание пути в коде” убраны ложные срабатывания c символом ~

  • В проверке “Использование строковых литералов в тексте запроса” убраны ложные срабатывания на пустые строки

  • Скорректировано положение замечания для проверки “Цикломатическая сложность методов не должна быть слишком высокой”

Добавлены проверки

  • В коде не должно содержаться URL-ссылок

  • Прямое указание GUID в коде

  • ЗафиксироватьТранзакцию находится вне конструкции ПопыткаИсключение

  • Для вызова НачатьТранзакцию отсутствует парный вызов ЗафиксироватьТранзакцию

  • Для вызова НачатьТранзакцию отсутствует парный вызов ОтменитьТранзакцию

Изменения правил грамматики

  • Добавлено правило грамматической конструкции “ПОДОБНО” в языке запросов

Релиз 1.1.0 от 01.02.2017

Добавлены новые метрики

  • Общая Когнитивная Сложность

  • Общая Когнитивная Сложность файла

  • Средняя Когнитивная Сложность метода

  • Метрики объединены в новый домен “Когнитивная сложность”

Изменены метрики

  • Расчет цикломатической сложности приведен к ее каноничному виду

Добавлены проверки

  • Когнитивная сложность метода не должна превышать установленного значения

  • Необязательные параметры расположены перед обязательными

  • Использование конструкции “ДЛЯ ИЗМЕНЕНИЯ”

  • Использование запрещенного метода ТекущаяДата()

  • Использование вложенного тернарного оператора

  • Количество необязательных параметров процедуры/функции более 3

  • Количество параметров процедуры/функции более 7

  • Необязательные параметры процедуры/функции расположены перед обязательными

Добавлена проверка в режиме BETA

  • Имя процедуры/функции должно быть написано без опечаток

Изменения правил грамматики

  • Исправлено правило грамматической конструкции “ДЛЯ ИЗМЕНЕНИЯ” в языке запросов

Релиз 1.0.0 от 11.01.2017

Первый релиз