Clang Tidy — статический анализатор кода. Его использование поможет избежать
ряда ошибок в коде и иногда компенсирует незнание некоторых особенностей языка.
На данный момент реализовано 300+ различных проверок. Диагностики объединены в
группы: специфичные для конкретных проектов (abseil-*, llvm-* и др.),
кодстайлов (google-*, hicpp-*) и прочие (readability-*,
bugprone-*).
По-хорошему нужно сгенерировать когфиг (clang-tidy--dump-config), затем
вручную вписать все нужные для вашего проекта опции. Тогда вы получите конфиг,
устойчивый к обновлению clang-tidy (при переходе на новую версию не появится
новых предупреждений, пока вы не добавите соответствующие диагностики в конфиг).
Однако такой процесс слишком трудоемок, поэтому в рамках курса предлагаем другой
подход.
Сгенерируйте конфиг со всеми включенными проверками:
clang-tidy--checks='*'--dump-config>.clang-tidy
По мере разработки проекта отключайте ненужные проверки, если они
срабатывают.
Понятно, что каждое диагностическое сообщение нужно вдумчиво анализировать, и
в случае наличия реальной проблемы в коде исправлять ее, а не глушить
предупреждение.
Примеры некоторых диагностик, которые в рамках курса можно отключить сразу:
В рамках курса мы будем использовать один из двух способов подключения сторонних
библиотек. С точки зрения структуры проекта они выглядят почти одинаково.
Сторонние библиотеки располагаются в каталоге <project>/external:
Есть известная проблема с конфликтом зависимостей LLVM и Steam:
https://steamcommunity.com/app/221410/discussions/0/2288338908683011755/,
на других версиях не проверялось. Может приводить к сносу половины
системы вместе с графическим интерфейсом. Читайте внимательно,
на установку/удаление каких пакетов соглашаетесь.
В самом крайнем случае можно использовать версию не ниже 10, если она доступна в
родных репозиториях вашего дистрибутива.
В репозитории создайте ветку lab-1. Как обычно, все работы выполняются
в отдельных ветках.
Создайте структуру каталогов в соответствии со своим вариантом.
Создайте конфиги .clang-format и .clang-tidy.
Создайте библиотеку fts, содержащую функцию сложения двух чисел с плавающей
точкой.
Для настройки общих параметров библиотеки и всех прочих таргетов можете
воспользоваться функцией (сохраните ее в cmake/CompileOptions.cmake):
Разработайте приложение, использующее библиотеку. Пусть приложение принимает
два числа через аргументы командной строки:
$ ./sum --first 40 --second 2
42
Для обработки аргументов командной строки используйте стороннюю библиотеку в
соответствии со своим вариантом.
Напишите один юнит-тест на функцию библиотеки. Для написания тестов
используйте библиотеку GoogleTest
В CMake настройте запуск clang-tidy при компиляции. Убедитесь, что проверки
срабатывают. Для определения переменной CXX_CLANG_TIDY воспользуйтесь
функцией find_program
Напишите CMakePresets.json.
Предусмотрите конфигурации debug и release.
По готовности передайте выполненное задание на ревью преподавателю практики.
Для этого:
Если история вашей ветки читаемая и поэтапная, можете вмержить ее в
main с опцией --no-ff. Если в ветке треш и угар, и пользы от
разделения на коммиты нет, то находясь на ветке main выполните
merge--squash, а после создайте коммит с коротким заголовком,
хранить все заголовки в этом случае не нужно.
Откройте в браузере страницу репозитория.
На вкладке Pull requests перейдите в Feedback. Этот Pull request создан
автоматически. Не закрывайте и не вливайте его. В лабораторных и
курсовых он должен оставаться открытым.
В поле Reviewers выберите своего преподавателя.
Если ревью было пройдено со статусом Changes requested, исправьте
замечения в отдельной ветке и после мержа запросите повторное ревью.