Commit ab991cab84

xackus <14938807+xackus@users.noreply.github.com>
2021-04-12 09:31:45
std docs: @This() in generic types
1 parent 7857ad7
Changed files (1)
lib
std
special
docs
lib/std/special/docs/main.js
@@ -269,7 +269,9 @@
                 domFnNoExamples.classList.remove("hidden");
             } else if (calls != null) {
                 if (fnObj.combined === undefined) fnObj.combined = allCompTimeFnCallsResult(calls);
-                if (fnObj.combined != null) renderContainer(fnObj.combined);
+                if (fnObj.combined != null) {
+                    renderContainer(fnObj.combined, calls.map(function (call) { return zigAnalysis.calls[call].result.value }));
+                }
 
                 var domListFnExamplesFragment = createDomListFragment(calls.length, '<li></li>');
 
@@ -484,25 +486,28 @@
         return domTemplate.content;
     }
 
-    function typeIndexName(typeIndex, wantHtml, wantLink, fnDecl, linkFnNameDecl) {
+    function typeIndexName(typeIndex, wantHtml, wantLink, fnDecl, linkFnNameDecl, thisTypes) {
+        if(thisTypes && thisTypes.includes(typeIndex)){
+            return token('@This', tokenKinds.Builtin, wantHtml) + '()';
+        }
         var typeObj = zigAnalysis.types[typeIndex];
         var declNameOk = declCanRepresentTypeKind(typeObj.kind);
         if (wantLink) {
             var declIndex = getCanonTypeDecl(typeIndex);
             var declPath = getCanonDeclPath(declIndex);
             if (declPath == null) {
-                return typeName(typeObj, wantHtml, wantLink, fnDecl, linkFnNameDecl);
+                return typeName(typeObj, wantHtml, wantLink, fnDecl, linkFnNameDecl, thisTypes);
             }
             var name = (wantLink && declCanRepresentTypeKind(typeObj.kind)) ?
                 declPath.declNames[declPath.declNames.length - 1] :
-                typeName(typeObj, wantHtml, false, fnDecl, linkFnNameDecl);
+                typeName(typeObj, wantHtml, false, fnDecl, linkFnNameDecl, thisTypes);
             if (wantLink && wantHtml) {
                 return '<a href="' + navLink(declPath.pkgNames, declPath.declNames) + '">' + name + '</a>';
             } else {
                 return name;
             }
         } else {
-            return typeName(typeObj, wantHtml, false, fnDecl, linkFnNameDecl);
+            return typeName(typeObj, wantHtml, false, fnDecl, linkFnNameDecl, thisTypes);
         }
     }
 
@@ -574,23 +579,23 @@
         }
     }
 
-    function typeName(typeObj, wantHtml, wantSubLink, fnDecl, linkFnNameDecl) {
+    function typeName(typeObj, wantHtml, wantSubLink, fnDecl, linkFnNameDecl, thisTypes) {
         switch (typeObj.kind) {
             case typeKinds.Array:
                 var name = "[";
                 name += token(typeObj.len, tokenKinds.Number, wantHtml);
                 name += "]";
-                name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null);
+                name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null, null, thisTypes);
                 return name;
             case typeKinds.Vector:
                 var name = "Vector(";
                 name += token(typeObj.len, tokenKinds.Number, wantHtml);
                 name += ", ";
-                name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null);
+                name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null, null, thisTypes);
                 name += ")";
                 return name;
             case typeKinds.Optional:
-                return "?" + typeIndexName(typeObj.child, wantHtml, wantSubLink, fnDecl, linkFnNameDecl);
+                return "?" + typeIndexName(typeObj.child, wantHtml, wantSubLink, fnDecl, linkFnNameDecl, thisTypes);
             case typeKinds.Pointer:
                 var name = "";
                 switch (typeObj.len) {
@@ -626,7 +631,7 @@
                     }
                     name += ") ";
                 }
-                name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null);
+                name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null, null, thisTypes);
                 return name;
             case typeKinds.Float:
                 return token('f' + typeObj.bits, tokenKinds.Type, wantHtml);
@@ -660,12 +665,12 @@
                 }
             case typeKinds.ErrorUnion:
                 var errSetTypeObj = zigAnalysis.types[typeObj.err];
-                var payloadHtml = typeIndexName(typeObj.payload, wantHtml, wantSubLink, null);
+                var payloadHtml = typeIndexName(typeObj.payload, wantHtml, wantSubLink, null, null, thisTypes);
                 if (fnDecl != null && errSetTypeObj.fn === fnDecl.value) {
                     // function index parameter supplied and this is the inferred error set of it
                     return "!" + payloadHtml;
                 } else {
-                    return typeIndexName(typeObj.err, wantHtml, wantSubLink, null) + "!" + payloadHtml;
+                    return typeIndexName(typeObj.err, wantHtml, wantSubLink, null, null, thisTypes) + "!" + payloadHtml;
                 }
             case typeKinds.Fn:
                 var payloadHtml = "";
@@ -730,7 +735,7 @@
                         if (isVarArgs && i === typeObj.args.length - 1) {
                             payloadHtml += '...';
                         } else if (argTypeIndex != null) {
-                            payloadHtml += typeIndexName(argTypeIndex, wantHtml, wantSubLink);
+                            payloadHtml += typeIndexName(argTypeIndex, wantHtml, wantSubLink, null, null, thisTypes);
                         } else {
                             payloadHtml += token('anytype', tokenKinds.Keyword, wantHtml);
                         }
@@ -739,7 +744,7 @@
 
                 payloadHtml += ') ';
                 if (typeObj.ret != null) {
-                    payloadHtml += typeIndexName(typeObj.ret, wantHtml, wantSubLink, fnDecl);
+                    payloadHtml += typeIndexName(typeObj.ret, wantHtml, wantSubLink, fnDecl, null, thisTypes);
                 } else {
                     payloadHtml += token('anytype', tokenKinds.Keyword, wantHtml);
                 }
@@ -751,7 +756,7 @@
                 var name = token('anyframe', tokenKinds.Keyword, wantHtml);
                 if (typeObj.result) {
                   name += "->";
-                  name += typeIndexName(typeObj.result, wantHtml, wantSubLink, null);
+                  name += typeIndexName(typeObj.result, wantHtml, wantSubLink, null, null, thisTypes);
                 }
                 return name;
             default:
@@ -936,7 +941,7 @@
         domFnProto.classList.remove("hidden");
     }
 
-    function renderContainer(container) {
+    function renderContainer(container, thisTypes) {
         var typesList = [];
         var namespacesList = [];
         var errSetsList = [];
@@ -1038,7 +1043,7 @@
                 var tdFnCode = trDom.children[0];
                 var tdDesc = trDom.children[1];
 
-                tdFnCode.innerHTML = typeIndexName(decl.type, true, true, decl, navLinkDecl(decl.name));
+                tdFnCode.innerHTML = typeIndexName(decl.type, true, true, decl, navLinkDecl(decl.name), thisTypes);
 
                 var docs = zigAnalysis.astNodes[decl.src].docs;
                 if (docs != null) {