10 #include "clang/Tooling/Tooling.h"
14 namespace llvm_check {
18 : HeaderGuardCheck(
Name, Context) {}
22 std::string Guard = tooling::getAbsolutePath(
Filename);
28 size_t PosInclude = Guard.rfind(
"include/");
29 if (PosInclude != StringRef::npos)
30 Guard = Guard.substr(PosInclude + std::strlen(
"include/"));
33 size_t PosToolsClang = Guard.rfind(
"tools/clang/");
34 if (PosToolsClang != StringRef::npos)
35 Guard = Guard.substr(PosToolsClang + std::strlen(
"tools/"));
39 const static StringRef LLVMProject =
"/llvm-project/";
40 size_t PosLLVMProject = Guard.rfind(std::string(LLVMProject));
41 if (PosLLVMProject != StringRef::npos)
42 Guard = Guard.replace(PosLLVMProject, LLVMProject.size(),
"/llvm/");
45 size_t PosLLVM = Guard.rfind(
"llvm/");
46 if (PosLLVM != StringRef::npos)
47 Guard = Guard.substr(PosLLVM);
54 if (StringRef(Guard).startswith(
"clang"))
55 Guard =
"LLVM_" + Guard;
58 if (StringRef(Guard).startswith(
"flang"))
59 Guard =
"FORTRAN" + Guard.substr(
sizeof(
"flang") - 1);
61 return StringRef(Guard).upper();