Commit 137cb32f5e

Vexu <git@vexu.eu>
2019-12-04 19:03:44
add docs for function parameters
1 parent 38791ac
Changed files (2)
lib
std
special
lib/std/special/docs/index.html
@@ -485,6 +485,10 @@
               </p>
             </div>
             <div id="tldDocs" class="hidden"></div>
+            <div id="sectParams" class="hidden">
+              <h2>Parameters</h2>
+              <div id="listParams"></div>
+            </div>
             <div id="sectFnErrors" class="hidden">
               <h2>Errors</h2>
               <div id="fnErrorsAnyError">
lib/std/special/docs/main.js
@@ -20,6 +20,8 @@
     var domListValues = document.getElementById("listValues");
     var domFnProto = document.getElementById("fnProto");
     var domFnProtoCode = document.getElementById("fnProtoCode");
+    var domSectParams = document.getElementById("sectParams");
+    var domListParams = document.getElementById("listParams");
     var domTldDocs = document.getElementById("tldDocs");
     var domSectFnErrors = document.getElementById("sectFnErrors");
     var domListFnErrors = document.getElementById("listFnErrors");
@@ -101,6 +103,7 @@
     function render() {
         domStatus.classList.add("hidden");
         domFnProto.classList.add("hidden");
+        domSectParams.classList.add("hidden");
         domTldDocs.classList.add("hidden");
         domSectPkgs.classList.add("hidden");
         domSectTypes.classList.add("hidden");
@@ -226,6 +229,8 @@
         }
 
         var typeObj = zigAnalysis.types[fnDecl.type];
+        renderFnParamDocs(fnDecl, typeObj);
+
         var errSetTypeIndex = null;
         if (typeObj.ret != null) {
             var retType = zigAnalysis.types[typeObj.ret];
@@ -279,6 +284,58 @@
         domFnProto.classList.remove("hidden");
     }
 
+    function renderFnParamDocs(fnDecl, typeObj) {
+        var docCount = 0;
+
+        var fnObj = zigAnalysis.fns[fnDecl.value];
+        var fnNode = zigAnalysis.astNodes[fnObj.src];
+        var fields = fnNode.fields;
+        var isVarArgs = fnNode.varArgs;
+
+        for (var i = 0; i < fields.length; i += 1) {
+            var field = fields[i];
+            var fieldNode = zigAnalysis.astNodes[field];
+            if (fieldNode.docs != null) {
+                docCount += 1;
+            }
+        }
+        if (docCount == 0) {
+            return;
+        }
+
+        resizeDomList(domListParams, docCount, '<div></div>');
+        var domIndex = 0;
+
+        for (var i = 0; i < fields.length; i += 1) {
+            var field = fields[i];
+            var fieldNode = zigAnalysis.astNodes[field];
+            if (fieldNode.docs == null) {
+                continue;
+            }
+            var divDom = domListParams.children[domIndex];
+            domIndex += 1;
+            var argTypeIndex = typeObj.args[i];
+
+            var html = '<pre>' + escapeHtml(fieldNode.name) + ": ";
+            if (isVarArgs && i === typeObj.args.length - 1) {
+                html += '...';
+            } else if (argTypeIndex != null) {
+                html += typeIndexName(argTypeIndex, true, true);
+            } else {
+                html += '<span class="tok-kw">var</span>';
+            }
+
+            html += ',</pre>';
+
+            var docs = fieldNode.docs;
+            if (docs != null) {
+                html += markdown(docs);
+            }
+            divDom.innerHTML = html;
+        }
+        domSectParams.classList.remove("hidden");
+    }
+
     function renderNav() {
         var len = curNav.pkgNames.length + curNav.declNames.length;
         resizeDomList(domListNav, len, '<li><a href="#"></a></li>');