Анализ кода

Анализ кода на лету

CLion постоянно анализирует ваш код на предмет возможных ошибок. Подозрительные фрагменты кода подсвечиваются в редакторе. Кликайте на желтые и красные отметки в правом поле редактора, чтобы перейти к обнаруженным проблемам. Навигация от одной ошибки к другой также возможна по нажатию F2/Shift+F2. Индикатор состояния в верхней части поля указывает на общий статус файла.

CLion находит ошибки компиляции, выявляет неэффективный код и даже производит анализ потока данных в вашей программе для поиска недостижимого/неиспользуемого кода, а также проблем в структуре кода.

Быстрые исправления

CLion предоставляет более 40 инспекций для обнаружения проблем в коде на C и C++, а также немало проверок для других языков.

Чтобы исправить ошибку, поместите курсор на подсвеченную область, нажмите Alt+Enter и выберите один из предложенных вариантов быстрых исправлений. Также можно открыть контекстное меню, кликнув на значок лампочки рядом со строкой.

Вы можете попросить CLion исправить похожие проблемы по всему проекту. А если вы считаете, что какая-то проверка неактуальна, ее можно проигнорировать в конкретной области.

Инспекции кода

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

C помощью пункта меню Code | Inspect Code вы можете одновременно запустить несколько проверок (или даже все сразу).

Если вам нужно устранить конкретную проблему по всей кодовой базе, используйте опцию запуска инспекции по имени (Ctrl + Alt + Shift + I) и выберите необходимую область действия. Откроется отдельное окно с результатами проверки, в котором вы можете перегруппировать ошибки и применить быстрые исправления для всех проблем одновременно, если это возможно.

Улучшения в поддержке Clang-Tidy

Улучшения в поддержке Clang-Tidy

CLion предоставляет интеграцию с инструментом для анализа кода Clang-Tidy. Проверки из Clang-Tidy выглядят так же, как и проверки встроенного анализатора кода, и по нажатию Alt+Enter для них доступны автоматические исправления.

Перейдите в меню Settings/Preferences | Editor | Inspections | C/C++ | General | Clang-Tidy, чтобы настроить список включенных/выключенных проверок. В текстовом поле используется формат командной строки Clang-Tidy. Описание конфигурации по умолчанию находится здесь. Вместо настроек IDE можно использовать конфигурационные файлы .clang-tidy.

Вы можете включить проверки C++ Core Guidelines или Clang Static Analyzer, попробовать проверки Modernize или добавить свои собственные — они автоматически появятся в редакторе CLion (для добавления пользовательских проверок нужно заменить бинарник Clang-Tidy в меню Settings/Preferences | Languages & Frameworks | C/C++).

Инспекции на основе движка Clangd

Инспекции на основе движка Clangd

В CLion есть несколько инспекций, реализованных на основе движка Clangd:

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

Для проверки на наличие неиспользуемых заголовочных файлов предлагаются 3 стратегии обнаружения: консервативная, агрессивная и стратегия по умолчанию (Detect not directly used), наиболее близкая к принципу Include What You Use.

Подробнее

DFA

Анализ потоков данных

С помощью анализа потоков данных CLion отслеживает потоки данных в коде и выявляет потенциальные проблемы. Помимо локального анализа, производимого в рамках одной функции, CLion выполняет глобальный анализ, который принимает в качестве единицы анализа целую единицу трансляции программы. Глобальный анализ потоков данных не только расширяет существующие проверки, но и предоставляет несколько совершенно новых.

MISRA

MISRA

CLion проверяет ваш код на соответствие стандартам MISRA C 2012 и MISRA C++ 2008. Полный список поддерживаемых проверок есть на странице CLion в Confluence.