Commit 83d1f6b15a

Loris Cro <kappaloris@gmail.com>
2023-04-13 17:38:52
autodoc: index in search usingnamespace decls
1 parent 5c9906c
Changed files (1)
lib
docs
lib/docs/main.js
@@ -3242,42 +3242,33 @@ const NAV_MODES = {
 
           let len = t.pubDecls ? t.pubDecls.length : 0;
           for (let declI = 0; declI < len; declI += 1) {
-            let mainDeclIndex = t.pubDecls[declI];
-            if (list[mainDeclIndex] != null) continue;
-
-            let decl = getDecl(mainDeclIndex);
-            let declVal = resolveValue(decl.value);
-            let declNames = item.declNames.concat([decl.name]);
-            list[mainDeclIndex] = {
-              pkgNames: pkgNames,
-              declNames: declNames,
-            };
-            if ("type" in declVal.expr) {
-              let value = getType(declVal.expr.type);
-              if (declCanRepresentTypeKind(value.kind)) {
-                canonTypeDecls[declVal.type] = mainDeclIndex;
-              }
-
-              if (isContainerType(value)) {
-                stack.push({
-                  declNames: declNames,
-                  type: value,
-                });
-              }
-
-              // Generic function
-              if (value.kind == typeKinds.Fn && value.generic_ret != null) {
-                let resolvedVal = resolveValue({ expr: value.generic_ret });
-                if ("type" in resolvedVal.expr) {
-                  let generic_type = getType(resolvedVal.expr.type);
-                  if (isContainerType(generic_type)) {
-                    stack.push({
-                      declNames: declNames,
-                      type: generic_type,
-                    });
+            let declIndex = t.pubDecls[declI];
+            if (list[declIndex] != null) continue;
+
+            let decl = getDecl(declIndex);
+              
+            if (decl.is_uns) {
+              let unsDeclList = [decl];
+              while(unsDeclList.length != 0) {
+                let unsDecl = unsDeclList.pop();
+                let unsDeclVal = resolveValue(unsDecl.value);
+                if (!("type" in unsDeclVal.expr)) continue;
+                let unsType = getType(unsDeclVal.expr.type);
+                if (!isContainerType(unsType)) continue;
+                let unsPubDeclLen = unsType.pubDecls ? unsType.pubDecls.length : 0;
+                for (let unsDeclI = 0; unsDeclI < unsPubDeclLen; unsDeclI += 1) {
+                  let childDeclIndex = unsType.pubDecls[unsDeclI];
+                  let childDecl = getDecl(childDeclIndex);
+                  
+                  if (childDecl.is_uns) {
+                    unsDeclList.push(childDecl);
+                  } else {
+                    addDeclToSearchResults(childDecl, childDeclIndex, pkgNames, item, list, stack);
                   }
                 }
               }
+            } else {
+              addDeclToSearchResults(decl, declIndex, pkgNames, item, list, stack);
             }
           }
         }
@@ -3286,6 +3277,45 @@ const NAV_MODES = {
     return list;
   }
 
+function addDeclToSearchResults(decl, declIndex, pkgNames, item, list, stack) {
+  let declVal = resolveValue(decl.value);
+  let declNames = item.declNames.concat([decl.name]);
+
+  if (list[declIndex] != null) return;
+  list[declIndex] = {
+    pkgNames: pkgNames,
+    declNames: declNames,
+  };
+  
+  if ("type" in declVal.expr) {
+    let value = getType(declVal.expr.type);
+    if (declCanRepresentTypeKind(value.kind)) {
+      canonTypeDecls[declVal.type] = declIndex;
+    }
+
+    if (isContainerType(value)) {
+      stack.push({
+        declNames: declNames,
+        type: value,
+      });
+    }
+
+    // Generic function
+    if (value.kind == typeKinds.Fn && value.generic_ret != null) {
+      let resolvedVal = resolveValue({ expr: value.generic_ret });
+      if ("type" in resolvedVal.expr) {
+        let generic_type = getType(resolvedVal.expr.type);
+        if (isContainerType(generic_type)) {
+          stack.push({
+            declNames: declNames,
+            type: generic_type,
+          });
+        }
+      }
+    }
+  }
+}
+
   function getCanonDeclPath(index) {
     if (canonDeclPaths == null) {
       canonDeclPaths = computeCanonDeclPaths();