madsravn created this revision.
madsravn added reviewers: alexfh, flx.
madsravn added a subscriber: cfe-commits.

Patch for bug 27475: https://llvm.org/bugs/show_bug.cgi?id=27475

I used the suggestion of alexfh to check the header extension.

http://reviews.llvm.org/D20512

Files:
  clang-tidy/llvm/HeaderGuardCheck.cpp
  clang-tidy/llvm/HeaderGuardCheck.h
  clang-tidy/utils/HeaderGuard.cpp
  clang-tidy/utils/HeaderGuard.h

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) {
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,
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to