aboutsummaryrefslogtreecommitdiff
path: root/clang-tidy/FixIncludes.cc
diff options
context:
space:
mode:
authorJade Lovelace <lix@jade.fyi>2024-05-23 15:16:10 -0700
committerjade <lix@jade.fyi>2024-05-24 02:22:58 +0000
commit745b5d3d4fd1d5cc97c84d559aa3dc25cc253b7f (patch)
tree6b783c17872d8a781ab10e8841675116fa52f334 /clang-tidy/FixIncludes.cc
parentd1fa446454ce6bb1119dac5caa181be977c24c61 (diff)
clang-tidy: work with angle brackets and external projects
Also fix the readme Change-Id: I422dff5536bf01d43983621aa01035bd77ac0252
Diffstat (limited to 'clang-tidy/FixIncludes.cc')
-rw-r--r--clang-tidy/FixIncludes.cc41
1 files changed, 25 insertions, 16 deletions
diff --git a/clang-tidy/FixIncludes.cc b/clang-tidy/FixIncludes.cc
index 8ba350243..602d3d355 100644
--- a/clang-tidy/FixIncludes.cc
+++ b/clang-tidy/FixIncludes.cc
@@ -44,32 +44,41 @@ void FixIncludesCallbacks::LexedFileChanged(FileID, LexedFileChangeReason,
}
void FixIncludesCallbacks::InclusionDirective(
- SourceLocation, const Token &, StringRef, bool,
+ SourceLocation, const Token &, StringRef FileName, bool IsAngled,
CharSourceRange FilenameRange, OptionalFileEntryRef File, StringRef,
StringRef, const Module *, SrcMgr::CharacteristicKind) {
if (Ignore)
return;
// FIXME: this is kinda evil, but this is a one-time fixup
- const std::string SourceDir = "src/";
+ const std::vector<std::string> SourceDirs = {"src/", "include/lix/"};
- if (File && File->getNameAsRequested().contains(SourceDir)) {
- StringRef Name = File->getNameAsRequested();
- auto Idx = Name.find(SourceDir);
- assert(Idx != std::string::npos);
- StringRef Suffix = Name.drop_front(Idx + SourceDir.length());
+ const auto Bracketize = [IsAngled](StringRef s) {
+ return IsAngled ? ("<" + s + ">").str() : ("\"" + s + "\"").str();
+ };
- if (!Suffix.starts_with("lib")) {
- llvm::dbgs() << "ignored: " << Suffix << "\n";
- return;
- }
+ for (const auto &SourceDir : SourceDirs) {
+ const bool IsAlreadyFixed = FileName.starts_with("lix/lib");
+ if (File && File->getNameAsRequested().contains(SourceDir) &&
+ !IsAlreadyFixed) {
+ StringRef Name = File->getNameAsRequested();
+ auto Idx = Name.find(SourceDir);
+ assert(Idx != std::string::npos);
+ std::string Suffix = Name.drop_front(Idx + SourceDir.length()).str();
+
+ if (!Suffix.starts_with("lib")) {
+ llvm::dbgs() << "ignored: " << Suffix << "\n";
+ return;
+ }
- auto Diag = Check.diag(FilenameRange.getBegin(),
- "include needs to specify the source subdir");
+ Suffix = "lix/" + Suffix;
- Diag << FilenameRange
- << FixItHint::CreateReplacement(FilenameRange,
- ("\"" + Suffix + "\"").str());
+ auto Diag = Check.diag(FilenameRange.getBegin(),
+ "include needs to specify the source subdir");
+
+ Diag << FilenameRange
+ << FixItHint::CreateReplacement(FilenameRange, Bracketize(Suffix));
+ }
}
}