clang-tidy

Is it possible to ignore a header with clang-tidy


I want to include a header from an external project, but clang-tidy is quite unhappy about it and produces a huge list of warnings. To workaround this, I am trying to disable all diagnostics coming from this header.

I tried:

// NOLINTBEGIN
// NOLINTNEXTLINE
#include <bad.hpp> // NOLINT
// NOLINTEND

But this does not work unfortunately.

This email thread suggests to use -header-filter (HeaderFilterRegex) option.

HeaderFilterRegex: '^((?!bad.hpp).)*$'

But this results into all headers being ignored, since clang tidy uses POSIX regex syntax. Which does not support negative look ahead.

I also considered using line-filter for this as this answer suggests, but there is no such option for the config file.

Is it possible at all?


Solution

  • May 2024

    Yet unreleased clang-tidy from llvm-19 supports headers filtering. According to the documentation, one can use --exclude-header-filter flag or ExcludeHeaderFilterRegex option to filter out unwanted headers:

      --exclude-header-filter=<string> - Regular expression matching the names of the
                                         headers to exclude diagnostics from. Diagnostics
                                         from the main file of each translation unit are
                                         always displayed.
                                         Must be used together with --header-filter.
                                         Can be used together with -line-filter.
                                         This option overrides the 'ExcludeHeaderFilterRegex'
                                         option in .clang-tidy file, if any.
    

    April 2022

    As of today (Apr 19 2022), this thread on disclosure llvm blog suggests that the feature is not supported.

    Relevant notes are:

    I can see only two possible workarounds for this now: