SonarQube 1C (BSL) - Выпуск релиза 1.7

1.7

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

  • Проверка “Необязательные параметры процедуры/функции расположены перед обязательными” (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
2 Симпатий

релизу быть!

Это где выполняется scanner?

А зачем так, разве это хорошо?

Да, оно самое.

Естественно это срабатывает там, где строки похожи на запросы :slight_smile: там многоступенчатая проверка, и в лексере был баг, который мешал построить AST по запросу. Как следствие и проверки запросные не выполнялись.