Как правильно предоставить фильтр заголовка для clang-tidy в Cmake? - PullRequest
1 голос
/ 03 апреля 2020

У меня есть проекты, в которых конфигурация Clang-tidy выглядит следующим образом

set(CMAKE_CXX_CLANG_TIDY "clang-tidy;-checks=google-*,cppcoreguidelines-*;")

Однако я заметил, что он проверяет все файлы, которые отсутствуют даже в текущем репо, например

/opt/ros/melodic/include/ros/console.h

и все .h / .hpp файлы подмодулей ...

Я пытался добавить регулярное выражение для фильтрации целевых файлов .h, но не смог заставить его работать ... Я дал абсолютный путь для одного файла .hpp, но он все еще оценивает /opt/ros/melodic/include файлов ...

Могу ли я иметь пример для фильтра заголовка ??

Я предполагаю, что clang-tidy проверит соответствующий файл cpp, если hpp находится в фильтре. я прав?

1 Ответ

1 голос
/ 03 апреля 2020

Вы можете посмотреть на этот пример. Это мой коммит. https://github.com/cocos2d/cocos2d-x/pull/19928

Вот так я отключил проверки clang-tidy для двух каталогов с регулярными выражениями.

'^((?!/cocos2d-x/external/|/cocos/scripting/).)*$'

Отключает проверки clang-tidy для external каталог и каталог cocos/scripting.

Я создаю сценарий python для проверки правильности работы регулярного выражения.

#!/usr/bin/env python
import re

files = [ 
"/home/john/cocos2d-x/external/openssl/include/linux/openssl/bio.h",
"/home/john/cocos2d-x/external/tiff/include/linux/tiff.h",
"/home/john/git/cocos/cocos2d-x/cocos/scripting/lua-bindings/auto/lua_cocos2dx_3d_auto.cpp"
"/home/john/cocos2d-x/external/json/stringbuffer.h",
"/home/john/cocos2d-x/cocos/base/ccUtils.h",
"/home/john/git/cocos/cocos2d-x/cocos/scripting/js-bindings/precheader.cpp",
"/home/john/cocos2d-x/cocos/physics/CCPhysicsBody.cpp",
"/home/john/cocos2d-x/tests/cpp-tests/Classes/ActionsEaseTest/ActionsEaseTest.cpp",
"/home/john/cocos2d-x/templates/cpp-template-default/Classes/AppDelegate.cpp",
"/home/john/git/cocos/cocos2d-x/cocos/scripting/js-bindings/proj.android/CMakeLists.txt",
]

pattern = '^((?!/cocos2d-x/external/|/cocos/scripting/).)*$'

for file in files:
    m = re.search(pattern, file)
    if m:
        print m.group(0)

Запуск этого файла python и вывод

/home/john/cocos2d-x/cocos/base/ccUtils.h
/home/john/cocos2d-x/cocos/physics/CCPhysicsBody.cpp
/home/john/cocos2d-x/tests/cpp-tests/Classes/ActionsEaseTest/ActionsEaseTest.cpp
/home/john/cocos2d-x/templates/cpp-template-default/Classes/AppDelegate.cpp

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

...