[clang-tools-extra] [clang-tidy] Fix handling --driver-mode= (PR #66553)

via cfe-commits cfe-commits at lists.llvm.org
Fri Sep 15 20:22:26 PDT 2023


================
@@ -525,8 +527,95 @@ static bool verifyFileExtensions(
   return AnyInvalid;
 }
 
+static SmallString<256> makeAbsolute(llvm::StringRef Input) {
+  if (Input.empty())
+    return {};
+  SmallString<256> AbsolutePath(Input);
+  if (std::error_code EC = llvm::sys::fs::make_absolute(AbsolutePath)) {
+    llvm::errs() << "Can't make absolute path from " << Input << ": "
+                 << EC.message() << "\n";
+  }
+  return AbsolutePath;
+}
+
+static llvm::IntrusiveRefCntPtr<vfs::OverlayFileSystem> createBaseFS() {
+  llvm::IntrusiveRefCntPtr<vfs::OverlayFileSystem> BaseFS(
+      new vfs::OverlayFileSystem(vfs::getRealFileSystem()));
+
+  if (!VfsOverlay.empty()) {
+    IntrusiveRefCntPtr<vfs::FileSystem> VfsFromFile =
+        getVfsFromFile(VfsOverlay, BaseFS);
+    if (!VfsFromFile)
+      return nullptr;
+    BaseFS->pushOverlay(std::move(VfsFromFile));
+  }
+  return BaseFS;
+}
+
+static llvm::Expected<CommonOptionsParser>
+recreateOptionsParserIfNeeded(llvm::ArrayRef<const char *> Args,
+                              llvm::Expected<CommonOptionsParser> OptionsParser,
+                              const ClangTidyOptions &EffectiveOptions) {
+
+  auto DoubleDashIt = std::find(Args.begin(), Args.end(), StringRef("--"));
+  if (DoubleDashIt == Args.end() || Args.empty() ||
+      Args.back() == StringRef("--"))
+    return OptionsParser;
+
+  auto IsDriverMode = [](StringRef Argument) {
+    return Argument.startswith("--driver-mode=");
+  };
+
+  if (Args.end() !=
+      std::find_if(std::next(DoubleDashIt), Args.end(), IsDriverMode))
+    return OptionsParser;
+
+  std::vector<std::string> CommandArguments(std::next(DoubleDashIt),
----------------
EugeneZelenko wrote:

Please include `iterator`, `string` and `vector`.

https://github.com/llvm/llvm-project/pull/66553


More information about the cfe-commits mailing list