From 680d3fdbb594296269a0bb8ae63d5ac27bdaac8a Mon Sep 17 00:00:00 2001 From: dominc8 Date: Thu, 25 Nov 2021 16:47:44 +0100 Subject: [PATCH] Add clang-tidy check (#1290) * Add clang-tidy.yml and .clang-tidy * Add mention to authors/contributors * Temp fix 2 clang-tidy issues * Enable clang-tidy on pull requests * Exclude gtest source files from clang-tidy --- .clang-tidy | 7 ++++++ .github/workflows/clang-tidy.yml | 38 ++++++++++++++++++++++++++++++++ AUTHORS | 1 + CONTRIBUTORS | 1 + cmake/GoogleTest.cmake | 12 ++++++---- src/string_util.cc | 2 +- test/skip_with_error_test.cc | 2 +- 7 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 .clang-tidy create mode 100644 .github/workflows/clang-tidy.yml diff --git a/.clang-tidy b/.clang-tidy new file mode 100644 index 00000000..c5185993 --- /dev/null +++ b/.clang-tidy @@ -0,0 +1,7 @@ +--- +Checks: 'clang-analyzer-*' +WarningsAsErrors: 'clang-analyzer-*' +HeaderFilterRegex: '.*' +AnalyzeTemporaryDtors: false +FormatStyle: none +User: user diff --git a/.github/workflows/clang-tidy.yml b/.github/workflows/clang-tidy.yml new file mode 100644 index 00000000..978171df --- /dev/null +++ b/.github/workflows/clang-tidy.yml @@ -0,0 +1,38 @@ +name: clang-tidy + +on: + push: {} + pull_request: {} + +jobs: + job: + name: run-clang-tidy + runs-on: ubuntu-latest + strategy: + fail-fast: false + steps: + - uses: actions/checkout@v2 + + - name: install clang-tidy + run: sudo apt update && sudo apt -y install clang-tidy + + - name: create build environment + run: cmake -E make_directory ${{ runner.workspace }}/_build + + - name: configure cmake + shell: bash + working-directory: ${{ runner.workspace }}/_build + run: > + cmake $GITHUB_WORKSPACE + -DBENCHMARK_ENABLE_ASSEMBLY_TESTS=OFF + -DBENCHMARK_ENABLE_LIBPFM=OFF + -DBENCHMARK_DOWNLOAD_DEPENDENCIES=ON + -DCMAKE_C_COMPILER=clang + -DCMAKE_CXX_COMPILER=clang++ + -DCMAKE_EXPORT_COMPILE_COMMANDS=ON + -DGTEST_COMPILE_COMMANDS=OFF + + - name: run + shell: bash + working-directory: ${{ runner.workspace }}/_build + run: run-clang-tidy diff --git a/AUTHORS b/AUTHORS index 9128642c..54770f35 100644 --- a/AUTHORS +++ b/AUTHORS @@ -21,6 +21,7 @@ David Coeurjolly Deniz Evrenci Dirac Research Dominik Czarnota +Dominik Korman Donald Aingworth Eric Backus Eric Fiselier diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 0f8ff7d7..651fbeaf 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -38,6 +38,7 @@ David Coeurjolly Deniz Evrenci Dominic Hamon Dominik Czarnota +Dominik Korman Donald Aingworth Eric Backus Eric Fiselier diff --git a/cmake/GoogleTest.cmake b/cmake/GoogleTest.cmake index 305eb8df..66cb9100 100644 --- a/cmake/GoogleTest.cmake +++ b/cmake/GoogleTest.cmake @@ -38,7 +38,11 @@ add_subdirectory(${GOOGLETEST_SOURCE_DIR} ${GOOGLETEST_BINARY_DIR} EXCLUDE_FROM_ALL) -set_target_properties(gtest PROPERTIES INTERFACE_SYSTEM_INCLUDE_DIRECTORIES $) -set_target_properties(gtest_main PROPERTIES INTERFACE_SYSTEM_INCLUDE_DIRECTORIES $) -set_target_properties(gmock PROPERTIES INTERFACE_SYSTEM_INCLUDE_DIRECTORIES $) -set_target_properties(gmock_main PROPERTIES INTERFACE_SYSTEM_INCLUDE_DIRECTORIES $) +if(NOT DEFINED GTEST_COMPILE_COMMANDS) + set(GTEST_COMPILE_COMMANDS ON) +endif() + +set_target_properties(gtest PROPERTIES INTERFACE_SYSTEM_INCLUDE_DIRECTORIES $ EXPORT_COMPILE_COMMANDS ${GTEST_COMPILE_COMMANDS}) +set_target_properties(gtest_main PROPERTIES INTERFACE_SYSTEM_INCLUDE_DIRECTORIES $ EXPORT_COMPILE_COMMANDS ${GTEST_COMPILE_COMMANDS}) +set_target_properties(gmock PROPERTIES INTERFACE_SYSTEM_INCLUDE_DIRECTORIES $ EXPORT_COMPILE_COMMANDS ${GTEST_COMPILE_COMMANDS}) +set_target_properties(gmock_main PROPERTIES INTERFACE_SYSTEM_INCLUDE_DIRECTORIES $ EXPORT_COMPILE_COMMANDS ${GTEST_COMPILE_COMMANDS}) diff --git a/src/string_util.cc b/src/string_util.cc index 0f8b1fa3..401fa13d 100644 --- a/src/string_util.cc +++ b/src/string_util.cc @@ -151,7 +151,7 @@ std::string StrFormatImp(const char* msg, va_list args) { auto buff_ptr = std::unique_ptr(new char[size]); // 2015-10-08: vsnprintf is used instead of snd::vsnprintf due to a limitation // in the android-ndk - ret = vsnprintf(buff_ptr.get(), size, msg, args); + vsnprintf(buff_ptr.get(), size, msg, args); return std::string(buff_ptr.get()); } diff --git a/test/skip_with_error_test.cc b/test/skip_with_error_test.cc index 4d89671e..5e9700d7 100644 --- a/test/skip_with_error_test.cc +++ b/test/skip_with_error_test.cc @@ -119,7 +119,7 @@ ADD_CASES("BM_error_during_running", {{"/1/threads:1", true, "error message"}, void BM_error_during_running_ranged_for(benchmark::State& state) { assert(state.max_iterations > 3 && "test requires at least a few iterations"); - int first_iter = true; + [[maybe_unused]] bool first_iter = true; // NOTE: Users should not write the for loop explicitly. for (auto It = state.begin(), End = state.end(); It != End; ++It) { if (state.range(0) == 1) {