llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang-tools-extra

Author: Erick Velez (evelez7)

<details>
<summary>Changes</summary>

Emit namespaces in HTML for namespaces pages.

---
Full diff: https://github.com/llvm/llvm-project/pull/172076.diff


9 Files Affected:

- (modified) clang-tools-extra/clang-doc/JSONGenerator.cpp (+5-2) 
- (modified) clang-tools-extra/clang-doc/assets/namespace-template.mustache 
(+28) 
- (modified) clang-tools-extra/test/clang-doc/json/class-requires.cpp (-1) 
- (modified) clang-tools-extra/test/clang-doc/json/class.cpp (-1) 
- (modified) clang-tools-extra/test/clang-doc/json/compound-constraints.cpp 
(-11) 
- (modified) clang-tools-extra/test/clang-doc/json/function-requires.cpp (-2) 
- (modified) clang-tools-extra/test/clang-doc/json/namespace.cpp (+1-1) 
- (modified) clang-tools-extra/test/clang-doc/mustache-separate-namespace.cpp 
(+20) 
- (modified) clang-tools-extra/unittests/clang-doc/JSONGeneratorTest.cpp (+1-1) 


``````````diff
diff --git a/clang-tools-extra/clang-doc/JSONGenerator.cpp 
b/clang-tools-extra/clang-doc/JSONGenerator.cpp
index 8828414cb3925..f57ca4b32e7a5 100644
--- a/clang-tools-extra/clang-doc/JSONGenerator.cpp
+++ b/clang-tools-extra/clang-doc/JSONGenerator.cpp
@@ -318,7 +318,8 @@ serializeCommonAttributes(const Info &I, json::Object &Obj,
 }
 
 static void serializeReference(const Reference &Ref, Object &ReferenceObj) {
-  ReferenceObj["Path"] = Ref.Path;
+  if (!Ref.Path.empty())
+    ReferenceObj["Path"] = Ref.Path;
   ReferenceObj["Name"] = Ref.Name;
   ReferenceObj["QualName"] = Ref.QualName;
   ReferenceObj["USR"] = toHex(toStringRef(Ref.USR));
@@ -620,9 +621,11 @@ static void serializeInfo(const NamespaceInfo &I, 
json::Object &Obj,
   if (I.USR == GlobalNamespaceID)
     Obj["Name"] = "Global Namespace";
 
-  if (!I.Children.Namespaces.empty())
+  if (!I.Children.Namespaces.empty()) {
     serializeArray(I.Children.Namespaces, Obj, "Namespaces",
                    SerializeReferenceLambda);
+    Obj["HasNamespaces"] = true;
+  }
 
   static auto SerializeInfo = [RepositoryUrl](const auto &Info,
                                               Object &Object) {
diff --git a/clang-tools-extra/clang-doc/assets/namespace-template.mustache 
b/clang-tools-extra/clang-doc/assets/namespace-template.mustache
index 5edce48cee6d8..6a43def0386d5 100644
--- a/clang-tools-extra/clang-doc/assets/namespace-template.mustache
+++ b/clang-tools-extra/clang-doc/assets/namespace-template.mustache
@@ -57,10 +57,38 @@
                         </ul>
                     </li>
                     {{/HasFunctions}}
+                    {{#HasNamespaces}}
+                    <li class="sidebar-section">
+                        <a class="sidebar-item" 
href="#Namespaces">Namespaces</a>
+                    </li>
+                    <li>
+                        <ul>
+                            {{#Namespaces}}
+                            <li class="sidebar-item-container">
+                                <a class="sidebar-item" 
href="#{{USR}}">{{Name}}</a>
+                            </li>
+                            {{/Namespaces}}
+                        </ul>
+                    </li>
+                    {{/HasNamespaces}}
                 </ul>
             </div>
             <div class="resizer" id="resizer"></div>
             <div class="content">
+                {{#HasNamespaces}}
+                <section id="Namespaces" class="section-container">
+                    <h2>Namespaces</h2>
+                    <ul class="class-container">
+                        {{#Namespaces}}
+                        <li id="{{USR}}">
+                            <a 
href="{{^Path}}../{{Name}}/{{/Path}}{{#Path}}./{{Name}}/{{/Path}}index.html">
+                                <pre><code class="language-cpp 
code-clang-doc">namespace {{Name}}</code></pre>
+                            </a>
+                        </li>
+                        {{/Namespaces}}
+                    </ul>
+                </section>
+                {{/HasNamespaces}}
                 {{#HasEnums}}
                 <section id="Enums" class="section-container">
                     <h2>Enumerations</h2>
diff --git a/clang-tools-extra/test/clang-doc/json/class-requires.cpp 
b/clang-tools-extra/test/clang-doc/json/class-requires.cpp
index e10c5e89f6e17..6c35f2303b6dd 100644
--- a/clang-tools-extra/test/clang-doc/json/class-requires.cpp
+++ b/clang-tools-extra/test/clang-doc/json/class-requires.cpp
@@ -23,7 +23,6 @@ struct MyClass;
 // CHECK-NEXT:        "End": true,
 // CHECK-NEXT:        "Expression": "Addable<T>",
 // CHECK-NEXT:        "Name": "Addable",
-// CHECK-NEXT:        "Path": "",
 // CHECK-NEXT:        "QualName": "Addable",
 // CHECK-NEXT:        "USR": "{{[0-9A-F]*}}"
 // CHECK-NEXT:      }
diff --git a/clang-tools-extra/test/clang-doc/json/class.cpp 
b/clang-tools-extra/test/clang-doc/json/class.cpp
index 1c0d5d5ab567a..79ac20f954f7a 100644
--- a/clang-tools-extra/test/clang-doc/json/class.cpp
+++ b/clang-tools-extra/test/clang-doc/json/class.cpp
@@ -95,7 +95,6 @@ struct MyClass {
 // CHECK-NEXT:        ],
 // CHECK-NEXT:        "Reference": {
 // CHECK-NEXT:          "Name": "friendFunction",
-// CHECK-NEXT:          "Path": "",
 // CHECK-NEXT:          "QualName": "friendFunction",
 // CHECK-NEXT:          "USR": "{{[0-9A-F]*}}"
 // CHECK-NEXT:        },
diff --git a/clang-tools-extra/test/clang-doc/json/compound-constraints.cpp 
b/clang-tools-extra/test/clang-doc/json/compound-constraints.cpp
index 5b15a88d562de..afaad8f5d6775 100644
--- a/clang-tools-extra/test/clang-doc/json/compound-constraints.cpp
+++ b/clang-tools-extra/test/clang-doc/json/compound-constraints.cpp
@@ -32,7 +32,6 @@ template<typename T> requires (Incrementable<T> && 
Decrementable<T>) || PreIncre
 // CHECK-NEXT:        {
 // CHECK-NEXT:          "Expression": "Incrementable<T>",
 // CHECK-NEXT:          "Name": "Incrementable",
-// CHECK-NEXT:          "Path": "",
 // CHECK-NEXT:          "QualName": "Incrementable",
 // CHECK-NEXT:          "USR": "{{[0-9A-F]*}}"
 // CHECK-NEXT:        },
@@ -40,7 +39,6 @@ template<typename T> requires (Incrementable<T> && 
Decrementable<T>) || PreIncre
 // CHECK-NEXT:          "End": true,
 // CHECK-NEXT:          "Expression": "Decrementable<T>",
 // CHECK-NEXT:          "Name": "Decrementable",
-// CHECK-NEXT:          "Path": "",
 // CHECK-NEXT:          "QualName": "Decrementable",
 // CHECK-NEXT:          "USR": "{{[0-9A-F]*}}"
 // CHECK-NEXT:        }
@@ -51,7 +49,6 @@ template<typename T> requires (Incrementable<T> && 
Decrementable<T>) || PreIncre
 // CHECK-NEXT:        {
 // CHECK-NEXT:          "Expression": "Incrementable<T>",
 // CHECK-NEXT:          "Name": "Incrementable",
-// CHECK-NEXT:          "Path": "",
 // CHECK-NEXT:          "QualName": "Incrementable",
 // CHECK-NEXT:          "USR": "{{[0-9A-F]*}}"
 // CHECK-NEXT:        },
@@ -59,7 +56,6 @@ template<typename T> requires (Incrementable<T> && 
Decrementable<T>) || PreIncre
 // CHECK-NEXT:          "End": true,
 // CHECK-NEXT:          "Expression": "Decrementable<T>",
 // CHECK-NEXT:          "Name": "Decrementable",
-// CHECK-NEXT:          "Path": "",
 // CHECK-NEXT:          "QualName": "Decrementable",
 // CHECK-NEXT:          "USR": "{{[0-9A-F]*}}"
 // CHECK-NEXT:        }
@@ -70,21 +66,18 @@ template<typename T> requires (Incrementable<T> && 
Decrementable<T>) || PreIncre
 // CHECK-NEXT:        {
 // CHECK-NEXT:          "Expression": "Incrementable<T>",
 // CHECK-NEXT:          "Name": "Incrementable",
-// CHECK-NEXT:          "Path": "",
 // CHECK-NEXT:          "QualName": "Incrementable",
 // CHECK-NEXT:          "USR": "{{[0-9A-F]*}}"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        {
 // CHECK-NEXT:          "Expression": "Decrementable<T>",
 // CHECK-NEXT:          "Name": "Decrementable",
-// CHECK-NEXT:          "Path": "",
 // CHECK-NEXT:          "QualName": "Decrementable",
 // CHECK-NEXT:          "USR": "{{[0-9A-F]*}}"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        {
 // CHECK-NEXT:          "Expression": "PreIncrementable<T>",
 // CHECK-NEXT:          "Name": "PreIncrementable",
-// CHECK-NEXT:          "Path": "",
 // CHECK-NEXT:          "QualName": "PreIncrementable",
 // CHECK-NEXT:          "USR": "{{[0-9A-F]*}}"
 // CHECK-NEXT:        },
@@ -92,7 +85,6 @@ template<typename T> requires (Incrementable<T> && 
Decrementable<T>) || PreIncre
 // CHECK-NEXT:          "End": true,
 // CHECK-NEXT:          "Expression": "PreDecrementable<T>",
 // CHECK-NEXT:          "Name": "PreDecrementable",
-// CHECK-NEXT:          "Path": "",
 // CHECK-NEXT:          "QualName": "PreDecrementable",
 // CHECK-NEXT:          "USR": "{{[0-9A-F]*}}"
 // CHECK-NEXT:        }
@@ -103,14 +95,12 @@ template<typename T> requires (Incrementable<T> && 
Decrementable<T>) || PreIncre
 // CHECK-NEXT:        {
 // CHECK-NEXT:          "Expression": "Incrementable<T>",
 // CHECK-NEXT:          "Name": "Incrementable",
-// CHECK-NEXT:          "Path": "",
 // CHECK-NEXT:          "QualName": "Incrementable",
 // CHECK-NEXT:          "USR": "{{[0-9A-F]*}}"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        {
 // CHECK-NEXT:          "Expression": "Decrementable<T>",
 // CHECK-NEXT:          "Name": "Decrementable",
-// CHECK-NEXT:          "Path": "",
 // CHECK-NEXT:          "QualName": "Decrementable",
 // CHECK-NEXT:          "USR": "{{[0-9A-F]*}}"
 // CHECK-NEXT:        },
@@ -118,7 +108,6 @@ template<typename T> requires (Incrementable<T> && 
Decrementable<T>) || PreIncre
 // CHECK-NEXT:          "End": true,
 // CHECK-NEXT:          "Expression": "PreIncrementable<T>",
 // CHECK-NEXT:          "Name": "PreIncrementable",
-// CHECK-NEXT:          "Path": "",
 // CHECK-NEXT:          "QualName": "PreIncrementable",
 // CHECK-NEXT:          "USR": "{{[0-9A-F]*}}"
 // CHECK-NEXT:        }
diff --git a/clang-tools-extra/test/clang-doc/json/function-requires.cpp 
b/clang-tools-extra/test/clang-doc/json/function-requires.cpp
index 931bb07edb836..8c86b1f93cc5e 100644
--- a/clang-tools-extra/test/clang-doc/json/function-requires.cpp
+++ b/clang-tools-extra/test/clang-doc/json/function-requires.cpp
@@ -37,7 +37,6 @@ template<Incrementable T> Incrementable auto incrementTwo(T 
t);
 // CHECK-NEXT:            "End": true,
 // CHECK-NEXT:            "Expression": "Incrementable<T>",
 // CHECK-NEXT:            "Name": "Incrementable",
-// CHECK-NEXT:            "Path": "",
 // CHECK-NEXT:            "QualName": "Incrementable",
 // CHECK-NEXT:            "USR": "{{[0-9A-F]*}}"
 // CHECK-NEXT:          }
@@ -76,7 +75,6 @@ template<Incrementable T> Incrementable auto incrementTwo(T 
t);
 // CHECK-NEXT:            "End": true,
 // CHECK-NEXT:            "Expression": "Incrementable<T>",
 // CHECK-NEXT:            "Name": "Incrementable",
-// CHECK-NEXT:            "Path": "",
 // CHECK-NEXT:            "QualName": "Incrementable",
 // CHECK-NEXT:            "USR": "{{[0-9A-F]*}}"
 // CHECK-NEXT:          }
diff --git a/clang-tools-extra/test/clang-doc/json/namespace.cpp 
b/clang-tools-extra/test/clang-doc/json/namespace.cpp
index 3beb6b91010d6..2f79cfa404f07 100644
--- a/clang-tools-extra/test/clang-doc/json/namespace.cpp
+++ b/clang-tools-extra/test/clang-doc/json/namespace.cpp
@@ -74,6 +74,7 @@ typedef int MyTypedef;
 // CHECK-NEXT:   ],
 // CHECK-NEXT:   "HasEnums": true,
 // CHECK-NEXT:   "HasFunctions": true,
+// CHECK-NEXT:   "HasNamespaces": true,
 // CHECK-NEXT:   "HasRecords": true,
 // CHECK-NEXT:   "InfoType": "namespace",
 // CHECK-NEXT:   "Name": "Global Namespace",
@@ -81,7 +82,6 @@ typedef int MyTypedef;
 // CHECK-NEXT:     {
 // CHECK-NEXT:       "End": true,
 // CHECK-NEXT:       "Name": "NestedNamespace",
-// CHECK-NEXT:       "Path": "",
 // CHECK-NEXT:       "QualName": "NestedNamespace",
 // CHECK-NEXT:       "USR": "{{[0-9A-F]*}}"
 // 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
index 7fbf51c4efd30..00aa6e9e8d12d 100644
--- a/clang-tools-extra/test/clang-doc/mustache-separate-namespace.cpp
+++ b/clang-tools-extra/test/clang-doc/mustache-separate-namespace.cpp
@@ -21,10 +21,30 @@ namespace MyNamespace {
 // CHECK-GLOBAL-NEXT:                <div class="sidebar">
 // CHECK-GLOBAL-NEXT:                    <h2>Global Namespace</h2>
 // CHECK-GLOBAL-NEXT:                    <ul>
+// CHECK-GLOBAL-NEXT:                        <li class="sidebar-section">
+// CHECK-GLOBAL-NEXT:                            <a class="sidebar-item" 
href="#Namespaces">Namespaces</a>
+// CHECK-GLOBAL-NEXT:                        </li>
+// CHECK-GLOBAL-NEXT:                        <li>
+// CHECK-GLOBAL-NEXT:                            <ul>
+// CHECK-GLOBAL-NEXT:                                <li 
class="sidebar-item-container">
+// CHECK-GLOBAL-NEXT:                                    <a 
class="sidebar-item" href="#{{[0-9A-F]*}}">MyNamespace</a>
+// CHECK-GLOBAL-NEXT:                                </li>
+// CHECK-GLOBAL-NEXT:                            </ul>
+// CHECK-GLOBAL-NEXT:                        </li>
 // CHECK-GLOBAL-NEXT:                    </ul>
 // CHECK-GLOBAL-NEXT:                </div>
 // CHECK-GLOBAL-NEXT:                <div class="resizer" id="resizer"></div>
 // CHECK-GLOBAL-NEXT:                <div class="content">
+// CHECK-GLOBAL-NEXT:                    <section id="Namespaces" 
class="section-container">
+// CHECK-GLOBAL-NEXT:                        <h2>Namespaces</h2>
+// CHECK-GLOBAL-NEXT:                        <ul class="class-container">
+// CHECK-GLOBAL-NEXT:                            <li id="{{[0-9A-F]*}}">
+// CHECK-GLOBAL-NEXT:                                <a 
href="../MyNamespace/index.html">
+// CHECK-GLOBAL-NEXT:                                    <pre><code 
class="language-cpp code-clang-doc">namespace MyNamespace</code></pre>
+// CHECK-GLOBAL-NEXT:                                </a>
+// CHECK-GLOBAL-NEXT:                            </li>
+// CHECK-GLOBAL-NEXT:                        </ul>
+// CHECK-GLOBAL-NEXT:                    </section>
 // CHECK-GLOBAL-NEXT:                </div>
 // CHECK-GLOBAL-NEXT:            </div>
 // CHECK-GLOBAL-NEXT:        </main>
diff --git a/clang-tools-extra/unittests/clang-doc/JSONGeneratorTest.cpp 
b/clang-tools-extra/unittests/clang-doc/JSONGeneratorTest.cpp
index e6eaabcb8127c..ee2c11061d706 100644
--- a/clang-tools-extra/unittests/clang-doc/JSONGeneratorTest.cpp
+++ b/clang-tools-extra/unittests/clang-doc/JSONGeneratorTest.cpp
@@ -135,7 +135,6 @@ TEST_F(JSONGeneratorTest, emitRecordJSON) {
     {
       "End": true,
       "Name": "F",
-      "Path": "",
       "QualName": "",
       "USR": "0000000000000000000000000000000000000000"
     }
@@ -247,6 +246,7 @@ TEST_F(JSONGeneratorTest, emitNamespaceJSON) {
   ],
   "HasEnums": true,
   "HasFunctions": true,
+  "HasNamespaces": true,
   "HasRecords": true,
   "InfoType": "namespace",
   "Name": "Global Namespace",

``````````

</details>


https://github.com/llvm/llvm-project/pull/172076
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to