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 <[email protected]>
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
 

_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to