diff options
author | jade <lix@jade.fyi> | 2024-05-24 19:11:26 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@lix-systems> | 2024-05-24 19:11:26 +0000 |
commit | 19ea351642d48a49a2b41248cbbc4569aa16c0a9 (patch) | |
tree | a3ee7b0849db7d5a83fca2d05ccdc360da18ec42 | |
parent | adfc22c3e300b8e0dd7ddfe9543125ca7efc3f98 (diff) | |
parent | 745b5d3d4fd1d5cc97c84d559aa3dc25cc253b7f (diff) |
Merge "clang-tidy: work with angle brackets and external projects" into main
-rw-r--r-- | clang-tidy/FixIncludes.cc | 41 | ||||
-rw-r--r-- | clang-tidy/README.md | 8 | ||||
-rw-r--r-- | doc/manual/rl-next/rename-lixexpr.md | 4 |
3 files changed, 31 insertions, 22 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 diff --git a/doc/manual/rl-next/rename-lixexpr.md b/doc/manual/rl-next/rename-lixexpr.md index 698553c7f..32e3cfd09 100644 --- a/doc/manual/rl-next/rename-lixexpr.md +++ b/doc/manual/rl-next/rename-lixexpr.md @@ -22,10 +22,10 @@ Migration path: To apply this migration automatically, remove all `<nix/>` from includes, so `#include <nix/expr.hh>` -> `#include <expr.hh>`. Then, the correct paths will be resolved from the tangled mess, and the clang-tidy automated fix will work. -Then run the following for out of tree projects: +Then run the following for out of tree projects (header filter is set to only fix instances in headers in `../src` relative to the compiler's working directory, as would be the case in nix-eval-jobs or other things built with meson, e.g.): ```console lix_root=$HOME/lix (cd $lix_root/clang-tidy && nix develop -c 'meson setup build && ninja -C build') -run-clang-tidy -checks='-*,lix-fixincludes' -load=$lix_root/clang-tidy/build/liblix-clang-tidy.so -p build/ -fix src +run-clang-tidy -checks='-*,lix-fixincludes' -load=$lix_root/clang-tidy/build/liblix-clang-tidy.so -p build/ -header-filter '\.\./src/.*\.h' -fix src ``` |