8

I have large project using CMake. I want to add clang_tidy-8 support with following code:

set(BORG_CLANG_TIDY OFF CACHE STRING "If enabled, clang-tidy will be used. If set to 'fix', fixes will be done on source")
set_property(CACHE BORG_CLANG_TIDY PROPERTY STRINGS ON OFF fix)
if(BORG_CLANG_TIDY)
    if (BORG_CLANG_TIDY STREQUAL "fix")
        set(maybe_fix -fix)
    endif()

    set(CMAKE_CXX_CLANG_TIDY clang-tidy-8 -extra-arg=-Wno-unknown-warning-option -format-style=file ${maybe_fix} )
endif()

I put proper .clang-tidy in root directory of project (proper = with desired checks). However, there are directories that I don't want clang tidy to check/fix (3rdparty and legacy code that can't be modified because it is brittle). So I tried putting empty .clang-tidy file in those directories (empty = with -checks=-*). This doesn't work because Error: no checks enabled.

I hoped to find some some fake -checks=-*,hello-world-do-nothing-check but nothing presented itself.

Is there other way to disable checks in selected subdirectories (/subtrees)? Those directories are static and may be hardcoded in CMake if needed.

MateuszL
  • 2,751
  • 25
  • 38

3 Answers3

4

If you want a dummy check that would do nothing there's at least one that's pretty easy to disable by its options: misc-definitions-in-headers

The HeaderFileExtensions option can be used to make the check work with only certain header file suffixes. If you set it to something non-existent line "x" then you have a hello-world-do-nothing-check alternative. Your clang-tidy file would then look something like this:

Checks: '-*,misc-definitions-in-headers'
CheckOptions:
  - { key: HeaderFileExtensions,          value: "x" }

You can also check https://stackoverflow.com/a/56319752/9874699 and try to adapt the line-filter to filter out files from certain directories.

pablo285
  • 2,460
  • 4
  • 14
  • 38
2

Is there other way to disable checks in selected subdirectories (/subtrees)?

In CMakeList.txt files contained in those subdirectories, add the following line:

set(CMAKE_CXX_CLANG_TIDY "")

But this is not a good solution: it creates a binding between the build system and a toolchain-specific tool. CMAKE_CXX_CLANG_TIDY should only ever be set via the configuration command (or possibly via a tool-chain file).

John McFarlane
  • 5,528
  • 4
  • 34
  • 38
0

Here's what I used in this scenario:

# Disable most checks as this is third-party code
# Have to enable at least one check, so pick a benign one!
#InheritParentConfig: false
Checks:              cppcoreguidelines-avoid-goto

I think we can all agree "Go To Statement Considered Harmful".

Greg
  • 11
  • 1
    Please explain your codeblock (what it does, how it solves the problem), and source claims such as `Go To Statement Considered Harmful`. – 0liveradam8 Feb 09 '21 at 02:14
  • 1
    As the comment says, clang-tidy needs at least one check enabled, so I chose the goto check as one very unlikely to trigger false positive. Modern code should almost never use goto. As to the "Go To Statement Considered Harmful" - that is one of the most famous statements in computer science. You can google it. – Greg Mar 11 '21 at 23:40