10 #include "clang/Tooling/Tooling.h"
11 #include "llvm/Support/Path.h"
15 namespace llvm_check {
19 : HeaderGuardCheck(
Name, Context) {}
23 std::string Guard = tooling::getAbsolutePath(
Filename);
27 Guard = llvm::sys::path::convert_to_slash(Guard);
33 size_t PosInclude = Guard.rfind(
"include/");
34 if (PosInclude != StringRef::npos)
35 Guard = Guard.substr(PosInclude + std::strlen(
"include/"));
38 size_t PosToolsClang = Guard.rfind(
"tools/clang/");
39 if (PosToolsClang != StringRef::npos)
40 Guard = Guard.substr(PosToolsClang + std::strlen(
"tools/"));
44 const static StringRef LLVMProject =
"/llvm-project/";
45 size_t PosLLVMProject = Guard.rfind(std::string(LLVMProject));
46 if (PosLLVMProject != StringRef::npos)
47 Guard = Guard.replace(PosLLVMProject, LLVMProject.size(),
"/llvm/");
50 size_t PosLLVM = Guard.rfind(
"llvm/");
51 if (PosLLVM != StringRef::npos)
52 Guard = Guard.substr(PosLLVM);
59 if (StringRef(Guard).startswith(
"clang"))
60 Guard =
"LLVM_" + Guard;
63 if (StringRef(Guard).startswith(
"flang"))
64 Guard =
"FORTRAN" + Guard.substr(
sizeof(
"flang") - 1);
66 return StringRef(Guard).upper();