[clang-tools-extra] Clang doc async (PR #93276)
via cfe-commits
cfe-commits at lists.llvm.org
Fri May 24 02:19:48 PDT 2024
https://github.com/PeterChou1 updated https://github.com/llvm/llvm-project/pull/93276
>From 0b6d536133f63e078fbde491a8c92c7ec916cb47 Mon Sep 17 00:00:00 2001
From: PeterChou1 <peter.chou at mail.utoronto.ca>
Date: Fri, 24 May 2024 05:18:05 -0400
Subject: [PATCH] [clang-doc] make loading of json side bar async
---
clang-tools-extra/clang-doc/HTMLGenerator.cpp | 28 +++++++++----------
clang-tools-extra/clang-doc/Representation.h | 1 +
clang-tools-extra/clang-doc/assets/index.js | 5 ++--
.../clang-doc/tool/ClangDocMain.cpp | 6 +++-
4 files changed, 23 insertions(+), 17 deletions(-)
diff --git a/clang-tools-extra/clang-doc/HTMLGenerator.cpp b/clang-tools-extra/clang-doc/HTMLGenerator.cpp
index c0faf5f7e8fd9..fb1a7f94c9094 100644
--- a/clang-tools-extra/clang-doc/HTMLGenerator.cpp
+++ b/clang-tools-extra/clang-doc/HTMLGenerator.cpp
@@ -964,7 +964,7 @@ static llvm::Error SerializeIndex(ClangDocContext &CDCtx) {
std::error_code FileErr;
llvm::SmallString<128> FilePath;
llvm::sys::path::native(CDCtx.OutDirectory, FilePath);
- llvm::sys::path::append(FilePath, "index_json.js");
+ llvm::sys::path::append(FilePath, "index.json");
llvm::raw_fd_ostream OS(FilePath, FileErr, llvm::sys::fs::OF_None);
if (FileErr != OK) {
return llvm::createStringError(llvm::inconvertibleErrorCode(),
@@ -985,9 +985,7 @@ static llvm::Error SerializeIndex(ClangDocContext &CDCtx) {
});
});
};
- OS << "var JsonIndex = `\n";
IndexToJSON(CDCtx.Idx);
- OS << "`;\n";
return llvm::Error::success();
}
@@ -1049,31 +1047,33 @@ static llvm::Error CopyFile(StringRef FilePath, StringRef OutDirectory) {
std::error_code FileErr = llvm::sys::fs::copy_file(PathRead, PathWrite);
if (FileErr != OK) {
return llvm::createStringError(llvm::inconvertibleErrorCode(),
- "error creating file " +
- llvm::sys::path::filename(FilePath) +
- ": " + FileErr.message() + "\n");
+ "error creating file " + FilePath + ": " +
+ FileErr.message() + "\n");
}
return llvm::Error::success();
}
llvm::Error HTMLGenerator::createResources(ClangDocContext &CDCtx) {
- auto Err = SerializeIndex(CDCtx);
- if (Err)
+ if (auto Err = SerializeIndex(CDCtx)) {
return Err;
- Err = GenIndex(CDCtx);
- if (Err)
+ }
+
+ if (auto Err = GenIndex(CDCtx)) {
return Err;
+ }
for (const auto &FilePath : CDCtx.UserStylesheets) {
- Err = CopyFile(FilePath, CDCtx.OutDirectory);
- if (Err)
+ if (auto Err = CopyFile(FilePath, CDCtx.OutDirectory)) {
return Err;
+ }
}
+
for (const auto &FilePath : CDCtx.FilesToCopy) {
- Err = CopyFile(FilePath, CDCtx.OutDirectory);
- if (Err)
+ if (auto Err = CopyFile(FilePath, CDCtx.OutDirectory)) {
return Err;
+ }
}
+
return llvm::Error::success();
}
diff --git a/clang-tools-extra/clang-doc/Representation.h b/clang-tools-extra/clang-doc/Representation.h
index a6b144eb7fa2a..23323f1cbdf46 100644
--- a/clang-tools-extra/clang-doc/Representation.h
+++ b/clang-tools-extra/clang-doc/Representation.h
@@ -491,6 +491,7 @@ struct ClangDocContext {
std::string SourceRoot; // Directory where processed files are stored. Links
// to definition locations will only be generated if
// the file is in this dir.
+
// URL of repository that hosts code used for links to definition locations.
std::optional<std::string> RepositoryUrl;
// Path of CSS stylesheets that will be copied to OutDirectory and used to
diff --git a/clang-tools-extra/clang-doc/assets/index.js b/clang-tools-extra/clang-doc/assets/index.js
index a5ac90f2e06e7..379867268527e 100644
--- a/clang-tools-extra/clang-doc/assets/index.js
+++ b/clang-tools-extra/clang-doc/assets/index.js
@@ -82,6 +82,7 @@ function createIndex(Index) {
document.addEventListener("DOMContentLoaded", function() {
// JsonIndex is a variable from another file that contains the index
// in JSON format
- var Index = JSON.parse(JsonIndex);
- createIndex(Index);
+ fetch("/index.json")
+ .then((response) => response.json())
+ .then((Index) => { createIndex(Index); });
});
diff --git a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
index 21b581fa6df2e..53108a77dab21 100644
--- a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
+++ b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp
@@ -155,6 +155,10 @@ Example usage for a project using a compile commands database:
return 1;
}
+ // add option to customize url fragment
+ // such as
+ // https://github.com/llvm/llvm-project/blob/main/clang-tools-extra/clang-doc/ClangDocMain.cpp#L1
+
// Fail early if an invalid format was provided.
std::string Format = getFormatString();
llvm::outs() << "Emiting docs in " << Format << " format.\n";
@@ -179,7 +183,7 @@ Example usage for a project using a compile commands database:
SourceRoot,
RepositoryUrl,
{UserStylesheets.begin(), UserStylesheets.end()},
- {"index.js", "index_json.js"}};
+ {"index.js"}};
if (Format == "html") {
void *MainAddr = (void *)(intptr_t)GetExecutablePath;
More information about the cfe-commits
mailing list