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
