diff options
author | Jade Lovelace <lix@jade.fyi> | 2024-05-23 15:16:10 -0700 |
---|---|---|
committer | jade <lix@jade.fyi> | 2024-05-24 02:22:58 +0000 |
commit | 745b5d3d4fd1d5cc97c84d559aa3dc25cc253b7f (patch) | |
tree | 6b783c17872d8a781ab10e8841675116fa52f334 /clang-tidy | |
parent | d1fa446454ce6bb1119dac5caa181be977c24c61 (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.cc | 41 | ||||
-rw-r--r-- | clang-tidy/README.md | 8 |
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 |