Подтвердить что ты не робот

Как вызвать clang-format над папкой проекта cpp?

Есть ли способ вызвать что-то вроде clang-format --style=Webkit для всей папки проекта cpp, вместо того, чтобы запускать его отдельно для каждого файла?

Я использую clang-format.py и vim для этого, но я предполагаю, что есть способ применить это один раз.

4b9b3361

Ответ 1

Как насчет:

clang-format -i -style=WebKit *.cpp *.h

в папке проекта. Опция -i делает его на месте (по умолчанию форматированный вывод записывается в стандартный вывод).

Ответ 2

К сожалению, не существует способа рекурсивно применять clang-format. *.cpp будет соответствовать файлам только в текущем каталоге, а не в подкаталогах. Даже **/* не работает.

К счастью, есть решение: возьмите все имена файлов с помощью команды find и подключите их. Например, если вы хотите отформатировать все файлы .h и .cpp в каталоге foo/bar/ рекурсивно, вы можете сделать

find foo/bar/ -iname *.h -o -iname *.cpp | xargs clang-format -i

Подробнее см. здесь.

Ответ 3

Сначала создайте файл .clang-format, если он не существует:

clang-format -style=WebKit -dump-config > .clang-format

Выберите любой предопределенный стиль или отредактируйте полученный файл .clang-format.

Затем запустите:

find . -regex '.*\.\(cpp\|hpp\|cc\|cxx\)' -exec clang-format -style=file -i {} \;

В регулярном выражении можно использовать другие расширения файлов, кроме cpp, hpp, cc и cxx, просто разделите их с помощью \|.

Ответ 4

Недавно я нашел bash-скрипт, который делает именно то, что вам нужно:

https://github.com/eklitzke/clang-format-all

Это bash-скрипт, который будет запускать clang-format -i для вашего кода.

Особенности:

  • Находит правильный путь к clang-format в Ubuntu/Debian, который кодирует версию LLVM в имени файла clang-format
  • Исправляет файлы рекурсивно
  • Определяет наиболее распространенные расширения файлов, используемые проектами C/C++

На Windows я успешно использовал его в Git Bash и WSL.

Ответ 5

Для пользователей Windows: если у вас есть поддержка Powershell 3.0, вы можете сделать:

Get-ChildItem -Path . -Directory -Recurse |
    foreach {
        cd $_.FullName
        &clang-format -i -style=WebKit *.cpp
    }

Примечание 1: Используйте pushd. и popd если вы хотите иметь один и тот же текущий каталог до и после скрипта

Примечание 2: скрипт работает в текущем рабочем каталоге

Примечание 3: это может быть написано в одну строку, если это действительно важно для вас

Ответ 6

Я использую следующую команду для рекурсивного форматирования всех файлов target-C в текущей папке:

$ find . -name "*.m" -o -name "*.h" | sed 's| |\\ |g' | xargs clang-format -i

Я определил следующий псевдоним в своем .bash_profile чтобы упростить процесс:

# Format objC files (*.h and *.m) under the current folder, recursively
alias clang-format-all="find . -name \"*.m\" -o -name \"*.h\" | sed 's| |\\ |g' | xargs clang-format -i"