Author: Erick Velez Date: 2025-12-04T10:08:00-08:00 New Revision: 1d84c891e10aecd83e66f18fc4f23ef8c1430ad0
URL: https://github.com/llvm/llvm-project/commit/1d84c891e10aecd83e66f18fc4f23ef8c1430ad0 DIFF: https://github.com/llvm/llvm-project/commit/1d84c891e10aecd83e66f18fc4f23ef8c1430ad0.diff LOG: [clang-doc] Add Mustache case to test for DR 131697 (#170197) 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. Added: Modified: clang-tools-extra/clang-doc/Generators.cpp clang-tools-extra/test/clang-doc/DR-131697.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clang-doc/Generators.cpp b/clang-tools-extra/clang-doc/Generators.cpp index 667e5d5a318f0..9ae2677dcc8f4 100644 --- a/clang-tools-extra/clang-doc/Generators.cpp +++ b/clang-tools-extra/clang-doc/Generators.cpp @@ -84,27 +84,33 @@ Error MustacheGenerator::generateDocumentation( return JSONGenerator.takeError(); } - SmallString<128> JSONPath; - sys::path::native(RootDir.str() + "/json", JSONPath); + SmallString<128> JSONDirPath(RootDir); + SmallString<128> DocsDirPath(RootDir); + { + TimeTraceScope TS("Create Output Directories"); + sys::path::append(JSONDirPath, "json"); + if (auto EC = sys::fs::create_directories(JSONDirPath)) + return createFileError(JSONDirPath, EC); + 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 +140,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 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
