Вебинар: C# разработка и статический анализ: в чем практическая польза? - 18.11
Вышел новый релиз PVS-Studio — 7.25. В нём мы поддержали Qt Creator 10 и Rider 2022.2.3 (и выше), обновили используемые анализатором библиотеки, улучшили документацию — и это далеко не всё! Подробности в заметке.
Поддержка Qt Creator 10 и Rider 2022.2.3+
Практически одновременно с прошлым релизом PVS-Studio вышла новая версия Qt Creator — Qt Creator 10. Сразу после этого мы получили ряд вопросов о том, сделаем ли мы плагин для новой версии этой IDE. Рад сообщить, что плагин PVS-Studio для Qt Creator 10 теперь официально доступен :). Подробнее о нём можно прочитать здесь.
Также обновление получил и плагин PVS-Studio для Rider: теперь анализатором можно пользоваться и в Rider версий 2022.2.3 и выше.
Бета-тест плагинов для Qt Creator и Visual Studio Code с возможностью запуска анализа
В середине июня мы также планируем провести бета-тестирование новых плагинов для Qt Creator и Visual Studio Code. В них улучшен UI/UX и самое главное — реализована возможность проверки проектов. Кроме того, в будущем мы планируем добавить в них функцию подавления предупреждений с помощью suppress файлов.
Подать заявку на участие в бета-тестировании можно здесь. Когда оно начнётся, мы вышлем вам ссылки на плагины, инструкции по установке и, конечно же, временную лицензию.
Обновление зависимостей: MSBuild и Roslyn
Традиционно мы обновляем зависимости анализатора с выходом новой версии .NET. В первую очередь это позволяет анализировать C# проекты, ориентированные на новый SDK и использующие новый синтаксис языка. Другим положительным аспектом является общее улучшение работы библиотек Roslyn и MSBuild, используемых анализатором.
В этот раз мы решили изменить данной традиции и обновили зависимости заранее. Это позволило избавиться от ошибки, возникавшей на проектах с генерацией кода посредством специальных атрибутов. При её возникновении анализатор выдавал сообщение следующего вида:
Can't get compilation for project: NameOfProject. You may have experienced an error due to the use of attributes for automatic code generation. Please contact our support team (https://pvs-studio.com/en/about-feedback).
Если вы встречали такую ошибку, то настоятельно рекомендую скачать новую версию анализатора.
Ускорение анализа на современных процессорах 12 поколения от Intel
При проверке C++ проектов, использующих MSBuild, PVS-Studio не использовал всю мощь процессоров 12 поколения от компании Intel (например, i7-12700, i9-12900). Судя по всему, процессы анализа запускались только на энергосберегающих ядрах, в то время как остальные простаивали.
В новой версии PVS-Studio причины такого поведения были устранены. Теперь анализатор полноценно нагружает указанные процессоры и работает значительно быстрее.
Переработка документации
В этом релизе мы полностью переписали документацию по анализу в режиме коммитов и слияния веток (pull/merge request). Также мы добавили отдельные страницы документации, посвящённые интеграции анализатора в CI системы AppVeyor (здесь) и Buddy (здесь).
Мы также улучшили документацию по интеграции результатов анализа в SonarQube. Теперь там есть информация о том, как "подружить" C# анализатор PVS-Studio и SonarQube под Linux и macOS. Страница доступна здесь.
Включение отдельных диагностик через pvsconfig
Бывает, что из какой-то группы диагностик нужно включить только одно или несколько правил. Теперь такое можно делать через файлы pvsconfig. Достаточно выключить группу, а ниже добавить включение конкретной диагностики:
//-V::MISRA
//+V::2511,2578
Сейчас этот функционал работает только для C++ анализатора, но в следующем релизе мы планируем поддержать то же самое и для C#.
Явное задание приоритетов файлов pvsconfig
Другим нововведением является возможность явного задания приоритетов файлов pvsconfig. Это актуально, когда настройки разных файлов конфигурации конфликтуют друг с другом. Например, один из файлов может выключать какую-то диагностику, а другой — включать.
Если pvsconfig-файлы находятся на разных уровнях, то при обнаружении конфликта предпочтение отдаётся настройкам из файла, который находится на более низком уровне. Так, настройки из pvsconfig уровня решения (solution) могут перезаписывать настройки из глобального pvsconfig, а настройки уровня проекта перезаписывают настройки уровня решения.
Всё не так очевидно, если конфликт обнаруживается между pvsconfig-файлами одного уровня (например, конфликтуют настройки из двух pvsconfig уровня проекта). В новом релизе появилась возможность указания в pvsconfig приоритетов — как раз для таких случаев. Для этого в файл конфигурации надо добавить строку следующего вида:
//CONFIG_PRIORITY::1
Чем меньше число, тем выше приоритет файла. Так, в случае конфликта настройки из файла с приоритетом 1 будут перезаписывать настройки из файла с приоритетом 2.
Если директива отсутствует, то приоритеты расставляются в зависимости от имён файлов в лексикографическом порядке.
Игнорирование глобальных настроек анализа и отображения результатов (Settings.xml)
Порой наши клиенты сталкиваются с конфликтами между настройками из файлов конфигурации двух типов — Settings.xml и *.pvsconfig.
Settings.xml хранит разные глобальные настройки, параметры отображения в плагинах, позволяет отключать группы диагностик и т. п. Настройки, которые пользователь видит и меняет в плагине для Visual Studio, хранятся именно там. Подробнее о Settings.xml написано здесь.
pvsconfig больше ориентирован на настройку анализа и диагностических правил, позволяя менять уровни предупреждений, сообщения, включать и выключать как группы, так и конкретные диагностики, и т. д. pvsconfig может быть уникальным для каждого проекта или решения, что позволяет настроить анализ разных компонентов по-разному. Документация по файлам pvsconfig доступна тут.
Проблема возникает в следующем случае. Если в pvsconfig какая-то диагностика включена, а в настройках плагина (Settings.xml) её сообщения скрыты, то пользователь не увидит предупреждения (независимо от того, выдаст ли их анализатор). Из-за этого программист может не заметить каких-то актуальных для проекта предупреждений.
В PVS-Studio 7.25 появилась возможность указывать в pvsconfig уровня решения (solution) специальную директиву:
//V_IGNORE_GLOBAL_SETTINGS ON
С ней плагин для Visual Studio и PVS-Studio_Cmd.exe будут полностью игнорировать настройки из Settings.xml, связанные с анализом и выбором отображаемых предупреждений. Таким образом, анализ и отображение предупреждений будет настраиваться исключительно с помощью файлов pvsconfig.
Замечание. На данный момент директива 'V_IGNORE_GLOBAL_SETTINGS' поддерживается только плагином для Visual Studio. Плагины PVS-Studio для других IDE (к примеру, Rider или CLion) пока не реализуют описанное поведение. Напишите нам, если хотите иметь подобный функционал в плагине для используемой вами IDE.
Группа оптимизаций в C# анализаторе
В этом релизе мы добавили новую группу диагностик для C# и первое правило для неё — V4001. Группа в целом посвящена оптимизации исходного кода, а V4001 ориентирована на проекты, использующие игровой движок Unity. Данная диагностика ищет часто выполняемый код, в котором производится упаковка. Подробнее о правиле V4001 можно прочесть в документации.
В будущем мы планируем добавить ещё больше диагностик, посвящённых оптимизации и ориентированных на Unity. Если у вас есть мысли по поводу того, какие правила были бы полезны при разработке под этот игровой движок, пишите нам.
Новые диагностики
C, C++
C#
Найди ошибку в коде на Java
В этом релизе команда PVS-Studio подготовила для вас новый квиз по поиску ошибок в коде. В этот раз он посвящён Java. Квиз доступен по ссылке. Верю, что у вас получится пройти его на 10 из 10 :).
Кстати, здесь доступен подобный квиз по C++, а здесь — по C#. Налетайте!
DotNet&More
Недавно наш DevRel, Сергей Васильев, поучаствовал в подкасте DotNet&More, обсудив с другими участниками темы статического анализа, безопасности и качества кода. Отдельное внимание уделено вопросу встраивания статического анализа в процесс разработки.
В общем, советую глянуть:
Статьи
Для тех, кто пишет на C++:
Для тех, кто пишет на C#:
Разное:
**
Загрузить актуальную версию PVS‑Studio можно здесь.
Если хотите получать пресс‑релизы по почте, подписывайтесь на рассылку.
0