Исключение кода из анализа Sonar: способы и примеры
Быстрый ответ
Чтобы исключить определённый код из анализа SonarLint/SonarQube, используйте аннотацию @SuppressWarnings("squid:RuleID")
для классов или методов, либо комментарий //NOSONAR
для игнорирования конкретной строки.
// Исключение проверки правила для метода или класса
@SuppressWarnings("squid:1234") // Правило №1234: Не допускаем написание некачественного кода!
public void method() {
//... ваш код здесь
}
// Исключение анализа определённой строки
int var = 0; //NOSONAR Не беспокойтесь, здесь всё в порядке.
Где найти и как подавить правило
Для подавления предупреждений SonarQube необходимо узнать ID правила. Откройте SonarQube, пройдите в раздел проблем и кликните на ссылающемся правиле. ID будет вверху, например, squid:S00112
. Вписывайте его в аннотацию супрессора!
Использование комментария //NOSONAR
В некоторых случаях использование @SuppressWarnings
может быть избыточным. Если вы хотите исключить отдельную строку, вполне достаточно //NOSONAR
. Однако, будьте осмотрительны: необдуманное применение этого комментария может привести к проблемам.
Аннотации на страже качества кода
Аннотация @SuppressFBWarnings
позволяет не только исключить код из анализа Sonar, но и аргументировать причину исключения. Она была создана для FindBugs, но прекрасно справляется и с Sonar.
@SuppressFBWarnings(value = "ID", justification = "Обоснование исключения этой части кода")
Исключение целых директорий из анализа
Если ваш проект состоит из множества модулей и аннотирование каждого класса или метода не является возможным, вы можете настроить Sonar так, чтобы он исключал из анализа определённые файлы или директории. Это помогает поддерживать порядок в коде и позволяет Sonar сосредоточиться на реальных проблемах.
# В файле sonar-project.properties
sonar.exclusions=**/gen/**/*,**/*Mock*.java
Визуализация
Можно сравнить отключение Sonar для определённого кода с выключением сигнализации в определённом зале музея:
Система охраны музея 🚨: [Зал скульптур, Галерея картин, Зал древних реликвий, Зал современного искусства 👩🎤]
Игнорирование Sonar 🤫: [Галерея картин]
До: 🚨🖼️🚨⚱️🚨💡
После: 🖼️🚨⚱️🚨💡
# Теперь Sonar 'не видит' Галерею картин. Но что, если случится кража?
Важно осторожно использовать //NOSONAR
. Непродуманное применение этого метода может стать причиной серьёзных проблем.
Мастерство корректных исключений
Правильное определение области исключения
Выбирайте область исключения обдуманно: обширные фильтры могут упустить проблемы, в то время как точечное исключение поможет сохранить качество кода.
Постоянный контроль исключений
Постоянно пересматривайте актуальность подавляемых предупреждений — с течением времени они могут утратить свою необходимость.
CI/CD — помощник в определении исключений
В рамках автоматизированных процессов (CI/CD) исключайте автогенерированный код и сторонние библиотеки, чтобы упор делался на анализ оригинального кода.
Внимание, опасности!
Не следует злоупотреблять комментарием //NOSONAR
Бездумное применение к чересчур большому числу строк //NOSONAR
может создать иллюзию безошибочного кода, скрывая реальные проблемы.
Аргументированные исключения
Имểйте аргументацию для каждого исключения. В противном случае, в будущем это может затруднить поддержку и рефакторинг кода.
Качество проекта
Подавленные правила не отменяют критерии качества проекта. Проблемы, которые вы "заглушили", всё равно могут влиять на оценку проекта в рамках критериев качества SonarQube, если они присутствуют в настройках качественного профиля.
Полезные материалы
- Настройка области анализа — рекомендации по определению области анализа SonarQube.
- Параметры анализа — руководство по параметрам анализа, включая исключения.
- Критерии качества — информация о влиянии критериев качества на оценку кода.
- Настройки для многомодульных проектов — детальная информация по определению области анализа.
- Профили качества — обзор настройки правил и профилей для наиболее эффективного анализа.