[llvm-branch-commits] [clang-tools-extra] [clang-doc] Add Mustache case to test for DR 131697 (PR #170197)
Erick Velez via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Dec 4 09:30:56 PST 2025
https://github.com/evelez7 updated https://github.com/llvm/llvm-project/pull/170197
>From 3589489cbbcfb68fc730e5fac65c91b9dbdee6f6 Mon Sep 17 00:00:00 2001
From: Erick Velez <erickvelez7 at gmail.com>
Date: Fri, 28 Nov 2025 14:04:56 -0800
Subject: [PATCH] [clang-doc] Add Mustache case to test for DR 131697
The test for DR 131697 only requires that clang-doc doesn't crash. There
is no documentation created. However, when using Mustache, clang-doc still expects certain
paths to exist, like the directory where assets are placed. In legacy
HTML, the `docs` directory is still created and assets are placed there
regardless of there being any Infos to document. Mustache didn't do
this, so now we create `docs/json` and `docs/html` even if there is
nothing to document.
---
clang-tools-extra/clang-doc/Generators.cpp | 21 +++++++++++--------
.../test/clang-doc/DR-131697.cpp | 1 +
2 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/clang-tools-extra/clang-doc/Generators.cpp b/clang-tools-extra/clang-doc/Generators.cpp
index 667e5d5a318f0..5d76901b95833 100644
--- a/clang-tools-extra/clang-doc/Generators.cpp
+++ b/clang-tools-extra/clang-doc/Generators.cpp
@@ -84,27 +84,30 @@ Error MustacheGenerator::generateDocumentation(
return JSONGenerator.takeError();
}
- SmallString<128> JSONPath;
- sys::path::native(RootDir.str() + "/json", JSONPath);
+ SmallString<128> JSONDirPath(RootDir);
+ sys::path::append(JSONDirPath, "json");
+ if (auto EC = sys::fs::create_directories(JSONDirPath))
+ return createFileError(JSONDirPath, EC);
+ SmallString<128> DocsDirPath(RootDir);
+ sys::path::append(DocsDirPath, DirName);
+ if (auto EC = sys::fs::create_directories(DocsDirPath))
+ return createFileError(DocsDirPath, EC);
{
llvm::TimeTraceScope TS("Iterate JSON files");
std::error_code EC;
- sys::fs::recursive_directory_iterator JSONIter(JSONPath, EC);
+ sys::fs::recursive_directory_iterator JSONIter(JSONDirPath, EC);
std::vector<json::Value> JSONFiles;
JSONFiles.reserve(Infos.size());
if (EC)
return createStringError("Failed to create directory iterator.");
- SmallString<128> DocsDirPath(RootDir.str() + '/' + DirName);
- sys::path::native(DocsDirPath);
- if (auto EC = sys::fs::create_directories(DocsDirPath))
- return createFileError(DocsDirPath, EC);
while (JSONIter != sys::fs::recursive_directory_iterator()) {
// create the same directory structure in the docs format dir
if (JSONIter->type() == sys::fs::file_type::directory_file) {
SmallString<128> DocsClonedPath(JSONIter->path());
- sys::path::replace_path_prefix(DocsClonedPath, JSONPath, DocsDirPath);
+ sys::path::replace_path_prefix(DocsClonedPath, JSONDirPath,
+ DocsDirPath);
if (auto EC = sys::fs::create_directories(DocsClonedPath)) {
return createFileError(DocsClonedPath, EC);
}
@@ -134,7 +137,7 @@ Error MustacheGenerator::generateDocumentation(
std::error_code FileErr;
SmallString<128> DocsFilePath(JSONIter->path());
- sys::path::replace_path_prefix(DocsFilePath, JSONPath, DocsDirPath);
+ sys::path::replace_path_prefix(DocsFilePath, JSONDirPath, DocsDirPath);
sys::path::replace_extension(DocsFilePath, DirName);
raw_fd_ostream InfoOS(DocsFilePath, FileErr, sys::fs::OF_None);
if (FileErr)
diff --git a/clang-tools-extra/test/clang-doc/DR-131697.cpp b/clang-tools-extra/test/clang-doc/DR-131697.cpp
index 9025bbf910813..06168e6642f62 100644
--- a/clang-tools-extra/test/clang-doc/DR-131697.cpp
+++ b/clang-tools-extra/test/clang-doc/DR-131697.cpp
@@ -1,6 +1,7 @@
// RUN: rm -rf %t && mkdir -p %t
// RUN: split-file %s %t
// RUN: clang-doc -format=html %t/compile_commands.json %t/main.cpp
+// RUN: clang-doc -format=mustache %t/compile_commands.json %t/main.cpp
//--- main.cpp
More information about the llvm-branch-commits
mailing list