From 8a905baeb43f9561c742a610990a13f36ef4b233 Mon Sep 17 00:00:00 2001 From: Erick Velez Date: Wed, 4 Jun 2025 10:09:36 -0700 Subject: [PATCH] [clang-doc] add tags to Mustache namespace template (#142045) namespace-template.mustache only rendered placeholder text. Enum and record tags were added to the template. Now, we can render an index.html for the global namespace and other namespaces. Added tests and deleted some of the disabled unit tests. --- .../assets/namespace-template.mustache | 76 ++++++++++++++++--- .../test/clang-doc/mustache-index.cpp | 75 ++++++++++++++++++ .../clang-doc/mustache-separate-namespace.cpp | 13 ++++ .../clang-doc/HTMLMustacheGeneratorTest.cpp | 67 ---------------- 4 files changed, 154 insertions(+), 77 deletions(-) create mode 100644 clang-tools-extra/test/clang-doc/mustache-index.cpp create mode 100644 clang-tools-extra/test/clang-doc/mustache-separate-namespace.cpp diff --git a/clang-tools-extra/clang-doc/assets/namespace-template.mustache b/clang-tools-extra/clang-doc/assets/namespace-template.mustache index 12dc93069d1c..1a44ed3c3ccc 100644 --- a/clang-tools-extra/clang-doc/assets/namespace-template.mustache +++ b/clang-tools-extra/clang-doc/assets/namespace-template.mustache @@ -23,23 +23,79 @@
- Content + {{#Enums}} +
+

Enumerations

+
+ {{#Obj}} + {{>EnumPartial}} + {{/Obj}} +
+
+ {{/Enums}} + {{#Record}} +
+

Inner Classes

+ +
+ {{/Record}}
diff --git a/clang-tools-extra/test/clang-doc/mustache-index.cpp b/clang-tools-extra/test/clang-doc/mustache-index.cpp new file mode 100644 index 000000000000..cad4cc8b6931 --- /dev/null +++ b/clang-tools-extra/test/clang-doc/mustache-index.cpp @@ -0,0 +1,75 @@ +// RUN: rm -rf %t && mkdir -p %t +// RUN: clang-doc --format=mustache --output=%t --executor=standalone %s +// RUN: FileCheck %s < %t/GlobalNamespace/index.html + +enum Color { + RED, + BLUE, + GREEN +}; + +class Foo; + +// CHECK: +// CHECK-NEXT: +// CHECK: +// CHECK-NEXT: + +// CHECK:
+// CHECK-NEXT:

Enumerations

+// CHECK-NEXT:
+// CHECK-NEXT:
+// CHECK-NEXT:
+// CHECK-NEXT:
+// CHECK-NEXT:                      
+// CHECK-NEXT:                          enum Color
+// CHECK-NEXT:                      
+// CHECK-NEXT:                  
+// CHECK-NEXT:
+// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK: +// CHECK-NEXT: +// CHECK-NEXT:
NameValue
RED0
BLUE1
GREEN2
+// CHECK-NEXT:
+// CHECK-NEXT: Defined at line 5 of file {{.*}}mustache-index.cpp +// CHECK-NEXT:
+// CHECK-NEXT:
+// CHECK-NEXT:
+// CHECK-NEXT:
+ +// CHECK:
+// CHECK-NEXT:

Inner Classes

+// CHECK-NEXT: +// CHECK-NEXT:
diff --git a/clang-tools-extra/test/clang-doc/mustache-separate-namespace.cpp b/clang-tools-extra/test/clang-doc/mustache-separate-namespace.cpp new file mode 100644 index 000000000000..ec29b2449169 --- /dev/null +++ b/clang-tools-extra/test/clang-doc/mustache-separate-namespace.cpp @@ -0,0 +1,13 @@ +// RUN: rm -rf %t && mkdir -p %t +// RUN: clang-doc --format=mustache --output=%t --executor=standalone %s +// RUN: FileCheck %s < %t/MyNamespace/index.html + +namespace MyNamespace { + class Foo; +} + +// CHECK: diff --git a/clang-tools-extra/unittests/clang-doc/HTMLMustacheGeneratorTest.cpp b/clang-tools-extra/unittests/clang-doc/HTMLMustacheGeneratorTest.cpp index 95acd363a958..32b0846a02db 100644 --- a/clang-tools-extra/unittests/clang-doc/HTMLMustacheGeneratorTest.cpp +++ b/clang-tools-extra/unittests/clang-doc/HTMLMustacheGeneratorTest.cpp @@ -87,29 +87,6 @@ TEST(HTMLMustacheGeneratorTest, createResources) { } } -TEST(HTMLMustacheGeneratorTest, generateDocs) { - auto G = getHTMLMustacheGenerator(); - assert(G && "Could not find HTMLMustacheGenerator"); - ClangDocContext CDCtx = getClangDocContext(); - - unittest::TempDir RootTestDirectory("generateDocsTest", /*Unique=*/true); - CDCtx.OutDirectory = RootTestDirectory.path(); - -#if ENABLE_LOCAL_TEST - // FIXME: We can't read files during unit tests. Migrate to lit once - // tool support lands. - getMustacheHtmlFiles(CLANG_DOC_TEST_ASSET_DIR, CDCtx); - - EXPECT_THAT_ERROR(G->generateDocs(RootTestDirectory.path(), {}, CDCtx), - Succeeded()) - << "Failed to generate docs."; -#else - EXPECT_THAT_ERROR(G->generateDocs(RootTestDirectory.path(), {}, CDCtx), - Failed()) - << "Failed to generate docs."; -#endif -} - TEST(HTMLGeneratorTest, emitFunctionHTML) { #if ENABLE_LOCAL_TEST auto G = getHTMLMustacheGenerator(); @@ -160,50 +137,6 @@ TEST(HTMLGeneratorTest, emitFunctionHTML) { #endif } -TEST(HTMLMustacheGeneratorTest, emitEnumHTML) { -#if ENABLE_LOCAL_TEST - auto G = getHTMLMustacheGenerator(); - assert(G && "Could not find HTMLMustacheGenerator"); - ClangDocContext CDCtx = getClangDocContext(); - std::string Buffer; - llvm::raw_string_ostream Actual(Buffer); - - unittest::TempDir RootTestDirectory("emitEnumHTML", - /*Unique=*/true); - CDCtx.OutDirectory = RootTestDirectory.path(); - - getMustacheHtmlFiles(CLANG_DOC_TEST_ASSET_DIR, CDCtx); - - // FIXME: This is a terrible hack, since we can't initialize the templates - // directly. We'll need to update the interfaces so that we can call - // SetupTemplateFiles() from outsize of HTMLMustacheGenerator.cpp - EXPECT_THAT_ERROR(G->generateDocs(RootTestDirectory.path(), {}, CDCtx), - Succeeded()) - << "Failed to generate docs."; - - CDCtx.RepositoryUrl = "http://www.repository.com"; - - EnumInfo I; - I.Name = "e"; - I.Namespace.emplace_back(EmptySID, "A", InfoType::IT_namespace); - - I.DefLoc = Location(10, 10, "test.cpp", true); - I.Loc.emplace_back(12, 12, "test.cpp"); - - I.Members.emplace_back("X"); - I.Scoped = true; - - auto Err = G->generateDocForInfo(&I, Actual, CDCtx); - assert(!Err); - - std::string Expected = R"raw(IT_enum -)raw"; - - // FIXME: Enums are not handled yet. - EXPECT_EQ(Expected, Actual.str()); -#endif -} - TEST(HTMLMustacheGeneratorTest, emitCommentHTML) { #if ENABLE_LOCAL_TEST auto G = getHTMLMustacheGenerator();