summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang-tools-extra/clang-tidy/llvm/HeaderGuardCheck.cpp13
-rw-r--r--clang-tools-extra/clang-tidy/llvm/HeaderGuardCheck.h10
-rw-r--r--clang-tools-extra/clang-tidy/utils/HeaderFileExtensionsUtils.cpp30
-rw-r--r--clang-tools-extra/clang-tidy/utils/HeaderFileExtensionsUtils.h2
-rw-r--r--clang-tools-extra/docs/clang-tidy/checks/llvm-header-guard.rst5
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.
OpenPOWER on IntegriCloud