Index: clang-tidy/llvm/HeaderGuardCheck.h =================================================================== --- clang-tidy/llvm/HeaderGuardCheck.h +++ clang-tidy/llvm/HeaderGuardCheck.h @@ -24,6 +24,8 @@ bool shouldSuggestEndifComment(StringRef Filename) override { return false; } bool shouldFixHeaderGuard(StringRef Filename) override; std::string getHeaderGuard(StringRef Filename, StringRef OldGuard) override; +private: + utils::HeaderFileExtensionsSet HeaderFileExtensions; }; } // namespace llvm Index: clang-tidy/llvm/HeaderGuardCheck.cpp =================================================================== --- clang-tidy/llvm/HeaderGuardCheck.cpp +++ clang-tidy/llvm/HeaderGuardCheck.cpp @@ -14,7 +14,20 @@ namespace llvm { bool LLVMHeaderGuardCheck::shouldFixHeaderGuard(StringRef Filename) { - return Filename.endswith(".h"); + const std::string RawStringHeaderFileExtensions( + Options.getLocalOrGlobal("HeaderFileExtensions", ",h,hh,hpp,hxx")); + utils::parseHeaderFileExtensions(RawStringHeaderFileExtensions, + HeaderFileExtensions, + ','); + StringRef extension = ::llvm::sys::path::extension(Filename); + if (extension.size() > 0 && extension.front() == '.') { + extension = extension.substr(1); + } + + if (HeaderFileExtensions.count(extension)) + return true; + + return false; } std::string LLVMHeaderGuardCheck::getHeaderGuard(StringRef Filename, Index: clang-tidy/utils/HeaderGuard.h =================================================================== --- clang-tidy/utils/HeaderGuard.h +++ clang-tidy/utils/HeaderGuard.h @@ -11,6 +11,8 @@ #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_UTILS_HEADERGUARD_H #include "../ClangTidy.h" +#include "../utils/HeaderFileExtensionsUtils.h" +#include "llvm/Support/Path.h" namespace clang { namespace tidy { @@ -39,6 +41,8 @@ /// \brief Get the canonical header guard for a file. virtual std::string getHeaderGuard(StringRef Filename, StringRef OldGuard = StringRef()) = 0; +private: + utils::HeaderFileExtensionsSet HeaderFileExtensions; }; } // namespace utils Index: clang-tidy/utils/HeaderGuard.cpp =================================================================== --- clang-tidy/utils/HeaderGuard.cpp +++ clang-tidy/utils/HeaderGuard.cpp @@ -274,13 +274,37 @@ } bool HeaderGuardCheck::shouldSuggestEndifComment(StringRef FileName) { - return FileName.endswith(".h"); + const std::string RawStringHeaderFileExtensions( + Options.getLocalOrGlobal("HeaderFileExtensions", ",h,hh,hpp,hxx")); + utils::parseHeaderFileExtensions(RawStringHeaderFileExtensions, + HeaderFileExtensions, + ','); + StringRef extension = ::llvm::sys::path::extension(FileName); + if (extension.size() > 0 && extension.front() == '.') { + extension = extension.substr(1); + } + if (HeaderFileExtensions.count(extension)) + return true; + + return false; } bool HeaderGuardCheck::shouldFixHeaderGuard(StringRef FileName) { return true; } bool HeaderGuardCheck::shouldSuggestToAddHeaderGuard(StringRef FileName) { - return FileName.endswith(".h"); + const std::string RawStringHeaderFileExtensions( + Options.getLocalOrGlobal("HeaderFileExtensions", ",h,hh,hpp,hxx")); + utils::parseHeaderFileExtensions(RawStringHeaderFileExtensions, + HeaderFileExtensions, + ','); + StringRef extension = ::llvm::sys::path::extension(FileName); + if (extension.size() > 0 && extension.front() == '.') { + extension = extension.substr(1); + } + if (HeaderFileExtensions.count(extension)) + return true; + + return false; } std::string HeaderGuardCheck::formatEndIf(StringRef HeaderGuard) {