aboutsummaryrefslogtreecommitdiff
path: root/clang-tidy
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
parentd1fa446454ce6bb1119dac5caa181be977c24c61 (diff)
clang-tidy: work with angle brackets and external projects
Also fix the readme Change-Id: I422dff5536bf01d43983621aa01035bd77ac0252
Diffstat (limited to 'clang-tidy')
-rw-r--r--clang-tidy/FixIncludes.cc41
-rw-r--r--clang-tidy/README.md8
2 files changed, 29 insertions, 20 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));
+ }
}
}
diff --git a/clang-tidy/README.md b/clang-tidy/README.md
index cf46c71ec..c2d1cb258 100644
--- a/clang-tidy/README.md
+++ b/clang-tidy/README.md
@@ -1,6 +1,6 @@
-# Clang tidy lints for Nix
+# Clang tidy lints for Lix
-This is a skeleton of a clang-tidy lints library for Nix.
+This is a skeleton of a clang-tidy lints library for Lix.
Currently there is one check (which is already obsolete as it has served its
goal and is there as an example), `HasPrefixSuffixCheck`.
@@ -10,13 +10,13 @@ goal and is there as an example), `HasPrefixSuffixCheck`.
One file:
```
-ninja -C build && clang-tidy --checks='-*,nix-*' --load=build/libnix-clang-tidy.so -p ../compile_commands.json --fix ../src/libcmd/installables.cc
+ninja -C build && clang-tidy --checks='-*,lix-*' --load=build/liblix-clang-tidy.so -p ../compile_commands.json -header-filter '\.\./src/.*\.h' --fix ../src/libcmd/installables.cc
```
Several files, in parallel:
```
-ninja -C build && run-clang-tidy -checks='-*,nix-*' -load=build/libnix-clang-tidy.so -p .. -fix ../src | tee -a clang-tidy-result
+ninja -C build && run-clang-tidy -checks='-*,lix-*' -load=build/liblix-clang-tidy.so -p .. -header-filter '\.\./src/.*\.h' -fix ../src | tee -a clang-tidy-result
```
## Resources