autodoc: improved frontend rendering

This commit is contained in:
Loris Cro
2022-03-28 18:50:52 +02:00
committed by Andrew Kelley
parent 36c4b1aac9
commit 53fa75c852
3 changed files with 93 additions and 18 deletions
+9 -1
View File
@@ -634,7 +634,15 @@
<h2>Examples</h2>
<ul id="listFnExamples" class="examples"></ul>
</div>
</section>
<div id="sectTests" class="hidden">
<h2>Tests</h2>
<div class="table-container">
<table>
<tbody id="listTests"></tbody>
</table>
</div>
</div>
</section>
</div>
<div class="flex-filler"></div>
</div>
+69 -11
View File
@@ -176,6 +176,8 @@ var zigAnalysis;
var domListPkgs = document.getElementById("listPkgs");
var domSectTypes = document.getElementById("sectTypes");
var domListTypes = document.getElementById("listTypes");
var domSectTests = document.getElementById("sectTests");
var domListTests = document.getElementById("listTests");
var domSectNamespaces = document.getElementById("sectNamespaces");
var domListNamespaces = document.getElementById("listNamespaces");
var domSectErrSets = document.getElementById("sectErrSets");
@@ -349,6 +351,7 @@ var zigAnalysis;
if ("declRef" in value) {
value = zigAnalysis.decls[value.declRef].value;
continue;
}
return value;
@@ -439,6 +442,7 @@ var zigAnalysis;
domSectMainPkg.classList.add("hidden");
domSectPkgs.classList.add("hidden");
domSectTypes.classList.add("hidden");
domSectTests.classList.add("hidden");
domSectNamespaces.classList.add("hidden");
domSectErrSets.classList.add("hidden");
domSectFns.classList.add("hidden");
@@ -845,10 +849,10 @@ var zigAnalysis;
if ("call" in typeValue) {
var result = "";
var call = zigAnalysis.calls[typeValue.call];
var functionName = typeValueName(call.func);
var functionName = typeValueName(call.func, wantHtml, wantLink, fnDecl, linkFnNameDecl);
result += functionName + "(";
for (var j = 0; j < call.args.length; j += 1) {
result += typeValueName(call.args[j]);
result += typeValueName(call.args[j], wantHtml, wantLink, fnDecl, linkFnNameDecl);
if (j != call.args.length -1) result += ",";
}
@@ -878,6 +882,22 @@ var zigAnalysis;
return result;
}
if ("declRef" in typeValue) {
return zigAnalysis.decls[typeValue.declRef].name;
}
if ("string" in typeValue) {
return typeValue.string + " (string)";
}
if ("anytype" in typeValue) {
return "anytype";
}
if ("this" in typeValue) {
return "this";
}
console.assert("type" in typeValue)
var typeIndex = typeValue.type;
var typeObj = zigAnalysis.types[typeIndex];
@@ -1133,7 +1153,7 @@ var zigAnalysis;
if (typeObj.params) {
var fields = null;
var isVarArgs = false;
var fnNode = zigAnalysis.astNodes[fnDecl.src];
var fnNode = zigAnalysis.astNodes[typeObj.src];
fields = fnNode.fields;
isVarArgs = fnNode.varArgs;
@@ -1411,12 +1431,17 @@ var zigAnalysis;
function categorizeDecls(decls,
typesList, namespacesList, errSetsList,
fnsList, varsList, valsList) {
fnsList, varsList, valsList, testsList) {
for (var i = 0; i < decls.length; i += 1) {
var decl = zigAnalysis.decls[decls[i]];
var declValue = resolveValue(decl.value);
if (decl.isTest) {
testsList.push(decl);
continue;
}
if (decl.kind === 'var') {
varsList.push(decl);
continue;
@@ -1427,11 +1452,15 @@ var zigAnalysis;
let c = zigAnalysis.calls[declValue.call];
console.assert("comptimeExpr" in c.ret);
let fDecl = resolveValue(c.func);
console.assert("type" in fDecl);
let fType = zigAnalysis.types[fDecl.type];
console.assert("type" in fType.ret);
if (fType.ret.type === typeTypeId) {
typesList.push(decl);
if ("type" in fDecl) {
console.assert("type" in fDecl);
let fType = zigAnalysis.types[fDecl.type];
console.assert("type" in fType.ret);
if (fType.ret.type === typeTypeId) {
typesList.push(decl);
} else {
valsList.push(decl);
}
} else {
valsList.push(decl);
}
@@ -1468,13 +1497,14 @@ var zigAnalysis;
var fnsList = [];
var varsList = [];
var valsList = [];
var testsList = [];
categorizeDecls(container.pubDecls,
typesList, namespacesList, errSetsList,
fnsList, varsList, valsList);
fnsList, varsList, valsList, testsList);
if (curNav.showPrivDecls) categorizeDecls(container.privDecls,
typesList, namespacesList, errSetsList,
fnsList, varsList, valsList);
fnsList, varsList, valsList, testsList);
typesList.sort(byNameProperty);
@@ -1483,6 +1513,7 @@ var zigAnalysis;
fnsList.sort(byNameProperty);
varsList.sort(byNameProperty);
valsList.sort(byNameProperty);
testsList.sort(byNameProperty);
if (container.src != null) {
var docs = zigAnalysis.astNodes[container.src].docs;
@@ -1638,6 +1669,33 @@ var zigAnalysis;
}
domSectValues.classList.remove("hidden");
}
if (testsList.length !== 0) {
resizeDomList(domListTests, testsList.length,
'<tr><td><a href="#"></a></td><td></td><td></td></tr>');
for (var i = 0; i < testsList.length; i += 1) {
var decl = testsList[i];
var trDom = domListTests.children[i];
var tdName = trDom.children[0];
var tdNameA = tdName.children[0];
var tdType = trDom.children[1];
var tdDesc = trDom.children[2];
tdNameA.setAttribute('href', navLinkDecl(decl.name));
tdNameA.textContent = decl.name;
tdType.innerHTML = typeValueName(typeOfDecl(decl), true, true);
var docs = zigAnalysis.astNodes[decl.src].docs;
if (docs != null) {
tdDesc.innerHTML = shortDescMarkdown(docs);
} else {
tdDesc.textContent = "";
}
}
domSectTests.classList.remove("hidden");
}
}
function operatorCompare(a, b) {