[clang-tools-extra] [clang-doc] Refactor error handling to use ExitOnError (PR #141699)
via cfe-commits
cfe-commits at lists.llvm.org
Tue May 27 18:45:53 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-tools-extra
Author: Samarth Narang (snarang181)
<details>
<summary>Changes</summary>
This patch refactors the clang-doc tool to replace manual error handling (e.g., checking error codes and calling exit()) with llvm::ExitOnError.
Addresses:
- https://github.com/llvm/llvm-project/issues/140085
Benefits:
- Improves maintainability by reducing boilerplate error checks
- Provides consistent error handling behavior across the tool
- Aligns clang-doc error handling with modern LLVM patterns
No functional or user-facing behavior changes are expected.
- Ran `ninja check-clang-tools` to ensure no regressions
Please let me know if additional reviewers or tests are needed!
---
Full diff: https://github.com/llvm/llvm-project/pull/141699.diff
1 Files Affected:
- (modified) clang-tools-extra/clang-doc/tool/ClangDocMain.cpp (+10-22)
``````````diff
diff --git a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
index 8e8f7053a8f87..e7efa4b15d80f 100644
--- a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
+++ b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
@@ -49,6 +49,7 @@
using namespace clang::ast_matchers;
using namespace clang::tooling;
using namespace clang;
+static llvm::ExitOnError ExitOnErr;
static llvm::cl::extrahelp CommonHelp(CommonOptionsParser::HelpMessage);
static llvm::cl::OptionCategory ClangDocCategory("clang-doc options");
@@ -236,6 +237,8 @@ int main(int argc, const char **argv) {
llvm::sys::PrintStackTraceOnErrorSignal(argv[0]);
std::error_code OK;
+ ExitOnErr.setBanner("clang-doc error: ");
+
const char *Overview =
R"(Generates documentation from source code and comments.
@@ -259,11 +262,7 @@ Example usage for a project using a compile commands database:
// Fail early if an invalid format was provided.
std::string Format = getFormatString();
llvm::outs() << "Emiting docs in " << Format << " format.\n";
- auto G = doc::findGeneratorByName(Format);
- if (!G) {
- llvm::errs() << toString(G.takeError()) << "\n";
- return 1;
- }
+ auto G = ExitOnErr(doc::findGeneratorByName(Format));
ArgumentsAdjuster ArgAdjuster;
if (!DoxygenOnly)
@@ -284,10 +283,7 @@ Example usage for a project using a compile commands database:
{UserStylesheets.begin(), UserStylesheets.end()}};
if (Format == "html") {
- if (auto Err = getHtmlAssetFiles(argv[0], CDCtx)) {
- llvm::errs() << toString(std::move(Err)) << "\n";
- return 1;
- }
+ ExitOnErr(getHtmlAssetFiles(argv[0], CDCtx));
}
// Mapping phase
@@ -300,7 +296,7 @@ Example usage for a project using a compile commands database:
"these files and continue:\n"
<< toString(std::move(Err)) << "\n";
else {
- llvm::errs() << toString(std::move(Err)) << "\n";
+ ExitOnErr(std::move(Err));
return 1;
}
}
@@ -371,22 +367,14 @@ Example usage for a project using a compile commands database:
sortUsrToInfo(USRToInfo);
// Ensure the root output directory exists.
- if (std::error_code Err = llvm::sys::fs::create_directories(OutDirectory);
- Err != std::error_code()) {
- llvm::errs() << "Failed to create directory '" << OutDirectory << "'\n";
- return 1;
- }
+ ExitOnErr(
+ llvm::errorCodeToError(llvm::sys::fs::create_directories(OutDirectory)));
// Run the generator.
llvm::outs() << "Generating docs...\n";
- if (auto Err =
- G->get()->generateDocs(OutDirectory, std::move(USRToInfo), CDCtx)) {
- llvm::errs() << toString(std::move(Err)) << "\n";
- return 1;
- }
-
+ ExitOnErr(G->generateDocs(OutDirectory, std::move(USRToInfo), CDCtx));
llvm::outs() << "Generating assets for docs...\n";
- Err = G->get()->createResources(CDCtx);
+ Err = G->createResources(CDCtx);
if (Err) {
llvm::outs() << "warning: " << toString(std::move(Err)) << "\n";
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/141699
More information about the cfe-commits
mailing list