[clang-tools-extra] [clang-doc] Add a breadcrumb navigation bar (PR #173297)

Paul Kirth via cfe-commits cfe-commits at lists.llvm.org
Mon Jan 5 13:05:03 PST 2026


================
@@ -321,6 +321,67 @@ serializeCommonAttributes(const Info &I, json::Object &Obj,
       Obj["Location"] =
           serializeLocation(Symbol->DefLoc.value(), RepositoryUrl);
   }
+
+  if (!I.Contexts.empty()) {
+    json::Value ContextArray = json::Array();
+    auto &ContextArrayRef = *ContextArray.getAsArray();
+    ContextArrayRef.reserve(I.Contexts.size());
+
+    std::string CurrentRelativePath;
+    bool PreviousRecord = false;
+    for (const auto &Current : I.Contexts) {
+      json::Value ContextVal = Object();
+      Object &Context = *ContextVal.getAsObject();
+      serializeReference(Current, Context);
+
+      if (ContextArrayRef.empty() && I.IT == InfoType::IT_record) {
+        // If the record's immediate context is a namespace, then the
+        // "index.html" is in the same directory.
+        if (Current.DocumentationFileName == "index") {
+          PreviousRecord = false;
+          Context["RelativePath"] = "./";
+        }
+        // If the immediate context is a record, then the file is one level
+        // above
+        else {
----------------
ilovepi wrote:

Can we keep the `} else {` bit on the same line? It took me a second to realize this wasn't a second condition.  The comment can go inside the block, or could be folded into the comment above:

 ```
... directory. Otherwise, the immediate context is a record, and the file is one level above.
```

https://github.com/llvm/llvm-project/pull/173297


More information about the cfe-commits mailing list