Commit 3ce83e879b

Andrew Kelley <andrew@ziglang.org>
2019-10-09 21:22:26
generated docs: show error sets pages
also favicon, improve error sets css, syntax awareness of noreturn
1 parent a5714dd
Changed files (2)
lib
std
special
lib/std/special/docs/index.html
@@ -3,7 +3,7 @@
   <head>
     <meta charset="utf-8">
     <title>Documentation - Zig</title>
-    <link rel="icon" href="favicon.png">
+    <link rel="icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAgklEQVR4AWMYWuD7EllJIM4G4g4g5oIJ/odhOJ8wToOxSTXgNxDHoeiBMfA4+wGShjyYOCkG/IGqWQziEzYAoUAeiF9D5U+DxEg14DRU7jWIT5IBIOdCxf+A+CQZAAoopEB7QJwBCBwHiip8UYmRdrAlDpIMgApwQZNnNii5Dq0MBgCxxycBnwEd+wAAAABJRU5ErkJggg==">
     <style type="text/css">
       body {
         font-family: system-ui, -apple-system, Roboto, "Segoe UI", sans-serif;
@@ -127,7 +127,7 @@
         text-align: center;
         font-size: 1.5em;
       }
-      dt, dd {
+      #helpDialog dt, #helpDialog dd {
         display: inline;
         margin: 0 0.2em;
       }
@@ -152,10 +152,8 @@
         background-color: #93e196;
       }
 
-      #tableFnErrors tr td:first-child{
-        text-align: right;
+      #tableFnErrors dt {
         font-weight: bold;
-        vertical-align: top;
       }
 
       #sectGlobalVars td, #sectFns td, #sectFields td {
@@ -297,7 +295,7 @@
       <div id="fnErrorsAnyError">
         <p><span class="tok-type">anyerror</span> means the error set is known only at runtime.</p>
       </div>
-      <table id="tableFnErrors"><tbody id="listFnErrors"></tbody></table>
+      <div id="tableFnErrors"><dl id="listFnErrors"></dl></div>
     </div>
     <div id="fnExamples" class="hidden"></div>
     <div id="fnNoExamples" class="hidden">
lib/std/special/docs/main.js
@@ -44,6 +44,7 @@
     var typeKindIntId;
     var typeKindBoolId;
     var typeKindVoidId;
+    var typeKindNoReturnId;
     var typeKindErrSetId;
     var typeKindErrUnionId;
     findTypeKinds();
@@ -171,7 +172,9 @@
             }
             throw new Error("docs for this decl which is not a container");
         }
-        renderType(lastDecl);
+        if (lastDecl.kind != null) {
+            renderType(lastDecl);
+        }
         if (lastDecl.pubDecls != null) {
             renderContainer(lastDecl);
         }
@@ -211,38 +214,7 @@
         }
         if (errSetTypeIndex != null) {
             var errSetType = zigAnalysis.types[errSetTypeIndex];
-            if (errSetType.errors == null) {
-                domFnErrorsAnyError.classList.remove("hidden");
-            } else {
-                var errorList = [];
-                for (var i = 0; i < errSetType.errors.length; i += 1) {
-                    var errObj = zigAnalysis.errors[errSetType.errors[i]];
-                    var srcObj = zigAnalysis.astNodes[errObj.src];
-                    errorList.push({
-                        err: errObj,
-                        docs: srcObj.docs,
-                    });
-                }
-                errorList.sort(function(a, b) {
-                    return operatorCompare(a.err.name.toLowerCase(), b.err.name.toLowerCase());
-                });
-
-                resizeDomList(domListFnErrors, errorList.length, '<tr><td></td><td></td></tr>');
-                for (var i = 0; i < errorList.length; i += 1) {
-                    var trDom = domListFnErrors.children[i];
-                    var nameTdDom = trDom.children[0];
-                    var descTdDom = trDom.children[1];
-                    nameTdDom.textContent = errorList[i].err.name;
-                    var docs = errorList[i].docs;
-                    if (docs != null) {
-                        descTdDom.innerHTML = markdown(docs);
-                    } else {
-                        descTdDom.textContent = "";
-                    }
-                }
-                domTableFnErrors.classList.remove("hidden");
-            }
-            domSectFnErrors.classList.remove("hidden");
+            renderErrorSet(errSetType);
         }
 
         var protoSrcIndex;
@@ -375,6 +347,19 @@
         return navLink(curNav.pkgNames, curNav.declNames.concat([childName]));
     }
 
+    function resizeDomListDl(dlDom, desiredLen) {
+        // add the missing dom entries
+        var i, ev;
+        for (i = dlDom.childElementCount / 2; i < desiredLen; i += 1) {
+            dlDom.insertAdjacentHTML('beforeend', '<dt></dt><dd></dd>');
+        }
+        // remove extra dom entries
+        while (desiredLen < dlDom.childElementCount / 2) {
+            dlDom.removeChild(dlDom.lastChild);
+            dlDom.removeChild(dlDom.lastChild);
+        }
+    }
+
     function resizeDomList(listDom, desiredLen, templateHtml) {
         // add the missing dom entries
         var i, ev;
@@ -498,6 +483,12 @@
                 } else {
                     return "void";
                 }
+            case typeKindNoReturnId:
+                if (wantHtml) {
+                    return '<span class="tok-type">noreturn</span>';
+                } else {
+                    return "noreturn";
+                }
             case typeKindErrSetId:
                 if (typeObj.errors == null) {
                     if (wantHtml) {
@@ -569,9 +560,46 @@
     function renderType(typeObj) {
         var name = typeName(typeObj, false, false);
         if (name != null && name != "") {
-            domHdrName.innerText = zigAnalysis.typeKinds[typeObj.kind] + " " + name;
+            domHdrName.innerText = name + " (" + zigAnalysis.typeKinds[typeObj.kind] + ")";
             domHdrName.classList.remove("hidden");
         }
+        if (typeObj.kind == typeKindErrSetId) {
+            renderErrorSet(typeObj);
+        }
+    }
+
+    function renderErrorSet(errSetType) {
+        if (errSetType.errors == null) {
+            domFnErrorsAnyError.classList.remove("hidden");
+        } else {
+            var errorList = [];
+            for (var i = 0; i < errSetType.errors.length; i += 1) {
+                var errObj = zigAnalysis.errors[errSetType.errors[i]];
+                var srcObj = zigAnalysis.astNodes[errObj.src];
+                errorList.push({
+                    err: errObj,
+                    docs: srcObj.docs,
+                });
+            }
+            errorList.sort(function(a, b) {
+                return operatorCompare(a.err.name.toLowerCase(), b.err.name.toLowerCase());
+            });
+
+            resizeDomListDl(domListFnErrors, errorList.length);
+            for (var i = 0; i < errorList.length; i += 1) {
+                var nameTdDom = domListFnErrors.children[i * 2 + 0];
+                var descTdDom = domListFnErrors.children[i * 2 + 1];
+                nameTdDom.textContent = errorList[i].err.name;
+                var docs = errorList[i].docs;
+                if (docs != null) {
+                    descTdDom.innerHTML = markdown(docs);
+                } else {
+                    descTdDom.textContent = "";
+                }
+            }
+            domTableFnErrors.classList.remove("hidden");
+        }
+        domSectFnErrors.classList.remove("hidden");
     }
 
     function allCompTimeFnCallsHaveTypeResult(typeIndex, value) {
@@ -782,6 +810,8 @@
                 typeKindBoolId = i;
             } else if (zigAnalysis.typeKinds[i] === "Void") {
                 typeKindVoidId = i;
+            } else if (zigAnalysis.typeKinds[i] === "NoReturn") {
+                typeKindNoReturnId = i;
             } else if (zigAnalysis.typeKinds[i] === "ErrorSet") {
                 typeKindErrSetId = i;
             } else if (zigAnalysis.typeKinds[i] === "ErrorUnion") {
@@ -809,6 +839,9 @@
         if (typeKindVoidId == null) {
             throw new Error("No type kind 'Void' found");
         }
+        if (typeKindNoReturnId == null) {
+            throw new Error("No type kind 'Void' found");
+        }
         if (typeKindErrSetId == null) {
             throw new Error("No type kind 'ErrorSet' found");
         }