diff --git a/clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.h b/clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.h --- a/clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.h +++ b/clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.h @@ -22,6 +22,8 @@ /// The check supports these options: /// - `UseHeaderFileExtension`: Whether to use file extension to distinguish /// header files. True by default. +/// - `CheckCCode`: Adds C99 to the minimum Language Requirements for this +/// Checker. Disabled by default because this Checker wasn't build for C. /// - `HeaderFileExtensions`: a semicolon-separated list of filename /// extensions of header files (The filename extension should not contain /// "." prefix). ";h;hh;hpp;hxx" by default. @@ -35,6 +37,9 @@ public: DefinitionsInHeadersCheck(StringRef Name, ClangTidyContext *Context); bool isLanguageVersionSupported(const LangOptions &LangOpts) const override { + if (CheckCCode) { + return LangOpts.CPlusPlus11 || LangOpts.C99; + } return LangOpts.CPlusPlus11; } void storeOptions(ClangTidyOptions::OptionMap &Opts) override; @@ -43,6 +48,7 @@ private: const bool UseHeaderFileExtension; + const bool CheckCCode; const std::string RawStringHeaderFileExtensions; utils::FileExtensionsSet HeaderFileExtensions; }; diff --git a/clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp b/clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp --- a/clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp +++ b/clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp @@ -31,6 +31,7 @@ ClangTidyContext *Context) : ClangTidyCheck(Name, Context), UseHeaderFileExtension(Options.get("UseHeaderFileExtension", true)), + CheckCCode(Options.get("CheckCCode", false)), RawStringHeaderFileExtensions(Options.getLocalOrGlobal( "HeaderFileExtensions", utils::defaultHeaderFileExtensions())) { if (!utils::parseFileExtensions(RawStringHeaderFileExtensions, @@ -44,6 +45,7 @@ void DefinitionsInHeadersCheck::storeOptions( ClangTidyOptions::OptionMap &Opts) { Options.store(Opts, "UseHeaderFileExtension", UseHeaderFileExtension); + Options.store(Opts, "CheckCCode", CheckCCode); Options.store(Opts, "HeaderFileExtensions", RawStringHeaderFileExtensions); } diff --git a/clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst b/clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst --- a/clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst @@ -102,3 +102,8 @@ When `true`, the check will use the file extension to distinguish header files. Default is `true`. + +.. option:: CheckCCode + + When `true` C99 is added to the minimum language requirements for this + Cecker. Default is `false` because this Checker was not build for C.