diff --git a/clang-tools-extra/clang-doc/JSONGenerator.cpp b/clang-tools-extra/clang-doc/JSONGenerator.cpp
index ec234db19ed1a..1757293cbeebd 100644
--- a/clang-tools-extra/clang-doc/JSONGenerator.cpp
+++ b/clang-tools-extra/clang-doc/JSONGenerator.cpp
@@ -755,8 +755,10 @@ static void serializeInfo(const NamespaceInfo &I, json::Object &Obj,
Obj["HasConcepts"] = true;
}
- if (!I.Children.Variables.empty())
+ if (!I.Children.Variables.empty()) {
serializeArray(I.Children.Variables, Obj, "Variables", SerializeInfo);
+ Obj["HasVariables"] = true;
+ }
serializeCommonChildren(I.Children, Obj, RepositoryUrl, RepositoryLinePrefix);
}
diff --git a/clang-tools-extra/clang-doc/assets/namespace-template.mustache b/clang-tools-extra/clang-doc/assets/namespace-template.mustache
index 04c31fb140962..7fbbfa69f7f89 100644
--- a/clang-tools-extra/clang-doc/assets/namespace-template.mustache
+++ b/clang-tools-extra/clang-doc/assets/namespace-template.mustache
@@ -113,6 +113,22 @@
{{/HasTypedefs}}
+ {{#HasVariables}}
+
+
+
+
+ {{#Variables}}
+
+ {{/Variables}}
+
+
+
+ {{/HasVariables}}
@@ -193,6 +209,21 @@
{{/Typedefs}}
{{/HasTypedefs}}
+ {{#HasVariables}}
+
+ Variables
+
+ {{#Variables}}
+
+
{{#IsStatic}}static {{/IsStatic}}{{Type.QualName}} {{Name}}
+ {{#Location}}
+
Defined at line {{LineNumber}} of file {{^FileURL}}{{Filename}}{{/FileURL}}{{#FileURL}}{{Filename}}{{/FileURL}}
+ {{/Location}}
+
+ {{/Variables}}
+
+
+ {{/HasVariables}}
diff --git a/clang-tools-extra/test/clang-doc/json/namespace.cpp b/clang-tools-extra/test/clang-doc/json/namespace.cpp
index 34f4eb3cb8f81..8681c15bf1048 100644
--- a/clang-tools-extra/test/clang-doc/json/namespace.cpp
+++ b/clang-tools-extra/test/clang-doc/json/namespace.cpp
@@ -1,6 +1,7 @@
// RUN: rm -rf %t && mkdir -p %t
-// RUN: clang-doc --output=%t --format=json --executor=standalone %s
+// RUN: clang-doc --output=%t --format=html --executor=standalone %s
// RUN: FileCheck %s < %t/json/GlobalNamespace/index.json
+// RUN: FileCheck %s < %t/html/GlobalNamespace/index.html -check-prefix=HTML-CHECK
class MyClass {};
@@ -27,7 +28,7 @@ typedef int MyTypedef;
// CHECK-NEXT: "InfoType": "enum",
// CHECK-NEXT: "Location": {
// CHECK-NEXT: "Filename": "{{.*}}namespace.cpp",
-// CHECK-NEXT: "LineNumber": 14
+// CHECK-NEXT: "LineNumber": 15
// CHECK-NEXT: },
// CHECK-NEXT: "Members": [
// CHECK-NEXT: {
@@ -81,6 +82,7 @@ typedef int MyTypedef;
// CHECK-NEXT: "HasNamespaces": true,
// CHECK-NEXT: "HasRecords": true,
// CHECK-NEXT: "HasTypedefs": true,
+// CHECK-NEXT: "HasVariables": true,
// CHECK-NEXT: "InfoType": "namespace",
// CHECK-NEXT: "Name": "Global Namespace",
// CHECK-NEXT: "Namespaces": [
@@ -108,7 +110,7 @@ typedef int MyTypedef;
// CHECK-NEXT: "IsUsing": false,
// CHECK-NEXT: "Location": {
// CHECK-NEXT: "Filename": "{{.*}}namespace.cpp",
-// CHECK-NEXT: "LineNumber": 20
+// CHECK-NEXT: "LineNumber": 21
// CHECK-NEXT: },
// CHECK-NEXT: "Name": "MyTypedef",
// CHECK-NEXT: "TypeDeclaration": "",
@@ -130,7 +132,7 @@ typedef int MyTypedef;
// CHECK-NEXT: "IsStatic": true,
// CHECK-NEXT: "Location": {
// CHECK-NEXT: "Filename": "{{.*}}namespace.cpp",
-// CHECK-NEXT: "LineNumber": 12
+// CHECK-NEXT: "LineNumber": 13
// CHECK-NEXT: },
// CHECK-NEXT: "Name": "Global",
// CHECK-NEXT: "Type": {
@@ -144,3 +146,13 @@ typedef int MyTypedef;
// CHECK-NEXT: }
// CHECK-NEXT: ]
// CHECK-NEXT: }
+
+// HTML-CHECK:
+// HTML-CHECK-NEXT: Variables
+// HTML-CHECK-NEXT:
+// HTML-CHECK-NEXT:
+// HTML-CHECK-NEXT:
static int Global
+// HTML-CHECK-NEXT:
Defined at line 13 of file {{.*}}namespace.cpp
+// HTML-CHECK-NEXT:
+// HTML-CHECK-NEXT:
+// HTML-CHECK-NEXT: