[PATCH] D53170: [clang-doc] Switch to default to all-TUs executor

Julie Hockett via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Oct 11 14:12:13 PDT 2018


juliehockett created this revision.
juliehockett added reviewers: ioeric, leonardchan, jakehehrlich, lebedev.ri, phosek.
juliehockett added a project: clang-tools-extra.
Herald added subscribers: kadircet, arphaman.

Since we generally want to document a whole project, not just one file.

@ioeric, is this an acceptable way to do this? I want to be able to use any executor, but I'd like the default to be all-TUs instead of standalone.


https://reviews.llvm.org/D53170

Files:
  clang-tools-extra/clang-doc/tool/ClangDocMain.cpp


Index: clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
===================================================================
--- clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
+++ clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
@@ -30,8 +30,7 @@
 #include "clang/Driver/Options.h"
 #include "clang/Frontend/FrontendActions.h"
 #include "clang/Tooling/CommonOptionsParser.h"
-#include "clang/Tooling/Execution.h"
-#include "clang/Tooling/StandaloneExecution.h"
+#include "clang/Tooling/ToolExecutorPluginRegistry.h"
 #include "clang/Tooling/Tooling.h"
 #include "llvm/ADT/APFloat.h"
 #include "llvm/Support/CommandLine.h"
@@ -88,6 +87,10 @@
     llvm::cl::desc("Use only doxygen-style comments to generate docs."),
     llvm::cl::init(false), llvm::cl::cat(ClangDocCategory));
 
+static llvm::cl::opt<std::string>
+    ClangDocExecutorName("doc-executor", llvm::cl::desc("The name of the executor to use in clang-doc."),
+                 llvm::cl::init("all-TUs"));
+
 bool CreateDirectory(const Twine &DirName, bool ClearDirectory = false) {
   std::error_code OK;
   llvm::SmallString<128> DocsRootPath;
@@ -195,12 +198,40 @@
   return Err;
 }
 
+llvm::Expected<std::unique_ptr<ToolExecutor>>
+createClangDocExecutor(int &argc, const char **argv,
+                                      llvm::cl::OptionCategory &Category) {
+  auto OptionsParser =
+      CommonOptionsParser::create(argc, argv, Category, llvm::cl::ZeroOrMore);
+  if (!OptionsParser)
+    return OptionsParser.takeError();
+  for (auto I = ToolExecutorPluginRegistry::begin(),
+            E = ToolExecutorPluginRegistry::end();
+       I != E; ++I) {
+    if (I->getName() != ClangDocExecutorName) {
+      continue;
+    }
+    std::unique_ptr<ToolExecutorPlugin> Plugin(I->instantiate());
+    llvm::Expected<std::unique_ptr<ToolExecutor>> Executor =
+        Plugin->create(*OptionsParser);
+    if (!Executor) {
+      return llvm::make_error<llvm::StringError>(
+          llvm::Twine("Failed to create '") + I->getName() +
+              "': " + llvm::toString(Executor.takeError()) + "\n",
+          llvm::inconvertibleErrorCode());
+    }
+    return std::move(*Executor);
+  }
+  return llvm::make_error<llvm::StringError>(
+      llvm::Twine("Executor \"") + ClangDocExecutorName + "\" is not registered.",
+      llvm::inconvertibleErrorCode());
+}
+
 int main(int argc, const char **argv) {
   llvm::sys::PrintStackTraceOnErrorSignal(argv[0]);
   std::error_code OK;
 
-  auto Exec = clang::tooling::createExecutorFromCommandLineArgs(
-      argc, argv, ClangDocCategory);
+  auto Exec = createClangDocExecutor(argc, argv, ClangDocCategory);
 
   if (!Exec) {
     llvm::errs() << toString(Exec.takeError()) << "\n";


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D53170.169302.patch
Type: text/x-patch
Size: 2705 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20181011/8c677083/attachment-0001.bin>


More information about the cfe-commits mailing list