Bash script. Clang-tidy для усього проекту

2 хв. читання

Clang-tidy

Цей інструмент знаходиться в пакеті clang-tools-extra, який можна отримати через пакетний менеджер. Для прикладу на Arch:

work@machine:~$ sudo pacman -S clang-tools-extra

Або на Ubuntu:

work@machine:~$ sudo apt-get install clang-tidy

clang-tidy - це інструмент аналізу базований на C++ Clang. Він забезпечує широкий статичний аналіз виявлення та виправлення можливих помилок, продуктивності, переносимості та підтримки коду.

Аналіз

Візьмемо для прикладу ось цю невеличку програмку з виводом тексту-привітання та ініціалізацією вказівника: Bash script. Clang-tidy для усього проекту

При запуску аналізатора він видасть попередження, що не потрібно використовувати 0 (тобто int), а краще використати типобезпечніший nullptr:

/home/olexandr/main.cpp:4:18: warning: use nullptr [modernize-use-nullptr]
        void* pointer = 0;
                        ^
                        nullptr

Команда для аналізу файлу main.cpp:

work@machine:~$ clang-tidy -checks=* -header-filter=* -p ./ main.cpp

#Проблема

  • ###Що ж робити, якщо проект великий?

Я вирішив, що варто рекурсивно обійти весь проект запускаючи аналізатор для усіх файлів.

  1. Для початку можна просто вивести рекурсивно усі файли, тому пишемо ось так:
#!/bin/bash
echo 'Clang-tidy analizator started.'

shopt -s globstar #Включення рекурсії для **
for file in ./**; do #./ - краще замінити на іншу папку
    echo $file
done
  1. Впровадити команду для аналізу одного файлу у цикл:
#!/bin/bash
echo 'Clang-tidy analizator started.'

shopt -s globstar
for file in ./**; do
    clang-tidy -checks=* -header-filter=* -p ./ $file
done
  1. Додати вкінці команди аргумент -fix для автоматичного виправлення коду:
clang-tidy -checks=* -header-filter=* -p ./ $file -f
  • ###Покращення скрипту

Залишилось зробити виконуваним та винести папку як зовнішній параметр:

#Тепер файлик виконуваний
chmod +x yourScript.sh

і зовнішній параметр:

#!/bin/bash

if [ -z "$1" ]
  then
    echo 'Вкажіть папку проекту!'
  else
    echo 'Clang-tidy аналізатор стартував.'
    shopt -s globstar
    for file in $1**; do
        clang-tidy -checks=* -header-filter=* -p ./ $file
    done
fi
Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Codeguida 5.8K
Приєднався: 8 місяців тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація