diff options
5 files changed, 34 insertions, 26 deletions
diff --git a/clang-tools-extra/clang-tidy/llvm/HeaderGuardCheck.cpp b/clang-tools-extra/clang-tidy/llvm/HeaderGuardCheck.cpp index f0984b0e8c6..2ff9fd8ccb3 100644 --- a/clang-tools-extra/clang-tidy/llvm/HeaderGuardCheck.cpp +++ b/clang-tools-extra/clang-tidy/llvm/HeaderGuardCheck.cpp @@ -13,6 +13,19 @@ namespace clang { namespace tidy { namespace llvm { +LLVMHeaderGuardCheck::LLVMHeaderGuardCheck(StringRef Name, + ClangTidyContext* Context) + : HeaderGuardCheck(Name, Context), + RawStringHeaderFileExtensions( + Options.getLocalOrGlobal("HeaderFileExtensions", ",h,hh,hpp,hxx")) { + utils::parseHeaderFileExtensions(RawStringHeaderFileExtensions, + HeaderFileExtensions, ','); +} + +void LLVMHeaderGuardCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) { + Options.store(Opts, "HeaderFileExtensions", RawStringHeaderFileExtensions); +} + bool LLVMHeaderGuardCheck::shouldFixHeaderGuard(StringRef FileName) { return utils::isHeaderFileExtension(FileName, HeaderFileExtensions); } diff --git a/clang-tools-extra/clang-tidy/llvm/HeaderGuardCheck.h b/clang-tools-extra/clang-tidy/llvm/HeaderGuardCheck.h index 76aaf5f56c7..3b8ad2b2f2b 100644 --- a/clang-tools-extra/clang-tidy/llvm/HeaderGuardCheck.h +++ b/clang-tools-extra/clang-tidy/llvm/HeaderGuardCheck.h @@ -27,13 +27,9 @@ namespace llvm { /// empty string between "," if there are other filename extensions. class LLVMHeaderGuardCheck : public utils::HeaderGuardCheck { public: - LLVMHeaderGuardCheck(StringRef Name, ClangTidyContext *Context) - : HeaderGuardCheck(Name, Context), - RawStringHeaderFileExtensions( - Options.getLocalOrGlobal("HeaderFileExtensions", ",h,hh,hpp,hxx")) { - utils::parseHeaderFileExtensions(RawStringHeaderFileExtensions, - HeaderFileExtensions, ','); - } + LLVMHeaderGuardCheck(StringRef Name, ClangTidyContext *Context); + + void storeOptions(ClangTidyOptions::OptionMap &Opts) override; bool shouldSuggestEndifComment(StringRef Filename) override { return false; } bool shouldFixHeaderGuard(StringRef Filename) override; std::string getHeaderGuard(StringRef Filename, StringRef OldGuard) override; diff --git a/clang-tools-extra/clang-tidy/utils/HeaderFileExtensionsUtils.cpp b/clang-tools-extra/clang-tidy/utils/HeaderFileExtensionsUtils.cpp index 7c1fef9696a..b734b89779d 100644 --- a/clang-tools-extra/clang-tidy/utils/HeaderFileExtensionsUtils.cpp +++ b/clang-tools-extra/clang-tidy/utils/HeaderFileExtensionsUtils.cpp @@ -19,28 +19,24 @@ bool isExpansionLocInHeaderFile( SourceLocation Loc, const SourceManager &SM, const HeaderFileExtensionsSet &HeaderFileExtensions) { SourceLocation ExpansionLoc = SM.getExpansionLoc(Loc); - StringRef FileExtension = - llvm::sys::path::extension(SM.getFilename(ExpansionLoc)); - return HeaderFileExtensions.count(FileExtension.substr(1)) > 0; + return isHeaderFileExtension(SM.getFilename(ExpansionLoc), + HeaderFileExtensions); } bool isPresumedLocInHeaderFile( SourceLocation Loc, SourceManager &SM, const HeaderFileExtensionsSet &HeaderFileExtensions) { PresumedLoc PresumedLocation = SM.getPresumedLoc(Loc); - StringRef FileExtension = - llvm::sys::path::extension(PresumedLocation.getFilename()); - return HeaderFileExtensions.count(FileExtension.substr(1)) > 0; + return isHeaderFileExtension(PresumedLocation.getFilename(), + HeaderFileExtensions); } bool isSpellingLocInHeaderFile( SourceLocation Loc, SourceManager &SM, const HeaderFileExtensionsSet &HeaderFileExtensions) { SourceLocation SpellingLoc = SM.getSpellingLoc(Loc); - StringRef FileExtension = - llvm::sys::path::extension(SM.getFilename(SpellingLoc)); - - return HeaderFileExtensions.count(FileExtension.substr(1)) > 0; + return isHeaderFileExtension(SM.getFilename(SpellingLoc), + HeaderFileExtensions); } bool parseHeaderFileExtensions(StringRef AllHeaderFileExtensions, @@ -61,13 +57,13 @@ bool parseHeaderFileExtensions(StringRef AllHeaderFileExtensions, return true; } -bool isHeaderFileExtension(StringRef FileName, - HeaderFileExtensionsSet HeaderFileExtensions) { - StringRef extension = ::llvm::sys::path::extension(FileName); - if (extension.startswith(".")) - extension = extension.substr(1); - - return HeaderFileExtensions.count(extension) > 0; +bool isHeaderFileExtension( + StringRef FileName, const HeaderFileExtensionsSet &HeaderFileExtensions) { + StringRef extension = llvm::sys::path::extension(FileName); + if (extension.empty()) + return false; + // Skip "." prefix. + return HeaderFileExtensions.count(extension.substr(1)) > 0; } } // namespace utils diff --git a/clang-tools-extra/clang-tidy/utils/HeaderFileExtensionsUtils.h b/clang-tools-extra/clang-tidy/utils/HeaderFileExtensionsUtils.h index e0457a8b068..c9fedf08749 100644 --- a/clang-tools-extra/clang-tidy/utils/HeaderFileExtensionsUtils.h +++ b/clang-tools-extra/clang-tidy/utils/HeaderFileExtensionsUtils.h @@ -43,7 +43,7 @@ bool parseHeaderFileExtensions(StringRef AllHeaderFileExtensions, /// \brief Decides whether a file has a header file extension. bool isHeaderFileExtension(StringRef FileName, - HeaderFileExtensionsSet HeaderFileExtensions); + const HeaderFileExtensionsSet &HeaderFileExtensions); } // namespace utils } // namespace tidy diff --git a/clang-tools-extra/docs/clang-tidy/checks/llvm-header-guard.rst b/clang-tools-extra/docs/clang-tidy/checks/llvm-header-guard.rst index dacaeefdf2c..ec0bcd9191f 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/llvm-header-guard.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/llvm-header-guard.rst @@ -10,4 +10,7 @@ Options .. option:: HeaderFileExtensions - A comma-separated list of filename extensions of header files (The filename extension should not contain "." prefix). Default value is ",h,hh,hpp,hxx". For extension-less header files, using an empty string or leaving an empty string between "," if there are other filename extensions. + A comma-separated list of filename extensions of header files (The filename + extension should not contain "." prefix). Default value is ",h,hh,hpp,hxx". + For extension-less header files, using an empty string or leaving an empty + string between "," if there are other filename extensions. |