authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-10-09 00:24:58-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-10-09 00:24:58-04:00
log48f5b21e7cb1da7593a780ffb59394ce18d1113d
tree459130e82796781a5270ab328be3d91dbd35872f
parent71fb4ef8dad086321d98cac1cb10ac5869a53e76
signaturelock-open Commit is signed but in an unrecognized format.

generated docs: functions in a table with descriptions


2 files changed, 83 insertions(+), 42 deletions(-)

lib/std/special/docs/index.html+8-3
......@@ -158,10 +158,13 @@
158158 vertical-align: top;
159159 }
160160
161 #sectGlobalVars td {
161 #sectGlobalVars td, #sectFns td {
162162 vertical-align: top;
163163 margin: 0;
164164 padding: 0.5em;
165 max-width: 20em;
166 text-overflow: ellipsis;
167 overflow-x: hidden;
165168 }
166169
167170 .tok-kw {
......@@ -327,8 +330,10 @@
327330 </div>
328331 <div id="sectFns" class="hidden">
329332 <h2>Functions</h2>
330 <ul id="listFns">
331 </ul>
333 <table>
334 <tbody id="listFns">
335 </tbody>
336 </table>
332337 </div>
333338 <div id="sectErrSets" class="hidden">
334339 <h2>Error Sets</h2>
lib/std/special/docs/main.js+75-39
......@@ -191,30 +191,7 @@
191191 }
192192
193193 function renderFn(fnDecl) {
194 var typeObj = zigAnalysis.types[fnDecl.type];
195 var protoHtml = '<span class="tok-kw">fn</span> <span class="tok-fn">'
196 + escapeHtml(fnDecl.name) + '</span>(';
197 if (typeObj.args != null) {
198 for (var i = 0; i < typeObj.args.length; i += 1) {
199 if (i != 0) {
200 protoHtml += ', ';
201 }
202 var argTypeIndex = typeObj.args[i];
203 if (argTypeIndex != null) {
204 protoHtml += typeIndexName(argTypeIndex, true, true);
205 } else {
206 protoHtml += '<span class="tok-kw">var</span>';
207 }
208 }
209 }
210
211 protoHtml += ') ';
212 if (typeObj.ret != null) {
213 protoHtml += typeIndexName(typeObj.ret, true, true, fnDecl.value);
214 } else {
215 protoHtml += '<span class="tok-kw">var</span>';
216 }
217 domFnProtoCode.innerHTML = protoHtml;
194 domFnProtoCode.innerHTML = typeIndexName(fnDecl.type, true, true, fnDecl);
218195
219196 var docsSource = null;
220197 var srcNode = zigAnalysis.astNodes[fnDecl.src];
......@@ -222,6 +199,7 @@
222199 docsSource = srcNode.docs;
223200 }
224201
202 var typeObj = zigAnalysis.types[fnDecl.type];
225203 var errSetTypeIndex = null;
226204 if (typeObj.ret != null) {
227205 var retType = zigAnalysis.types[typeObj.ret];
......@@ -409,24 +387,24 @@
409387 }
410388 }
411389
412 function typeIndexName(typeIndex, wantHtml, wantLink, fnIndex) {
390 function typeIndexName(typeIndex, wantHtml, wantLink, fnDecl, skipFnName) {
413391 var typeObj = zigAnalysis.types[typeIndex];
414392 if (wantLink) {
415393 var declIndex = getCanonTypeDecl(typeIndex);
416394 var declPath = getCanonDeclPath(declIndex);
417395 var haveLink = declPath != null;
418 var typeNameHtml = typeName(typeObj, true, !haveLink, fnIndex);
396 var typeNameHtml = typeName(typeObj, true, !haveLink, fnDecl, skipFnName);
419397 if (haveLink) {
420398 return '<a href="' + navLink(declPath.pkgNames, declPath.declNames) + '">' + typeNameHtml + '</a>';
421399 } else {
422400 return typeNameHtml;
423401 }
424402 } else {
425 return typeName(typeObj, wantHtml, false, fnIndex);
403 return typeName(typeObj, wantHtml, false, fnDecl, skipFnName);
426404 }
427405 }
428406
429 function typeName(typeObj, wantHtml, wantSubLink, fnIndex) {
407 function typeName(typeObj, wantHtml, wantSubLink, fnDecl, skipFnName) {
430408 switch (typeObj.kind) {
431409 case typeKindPtrId:
432410 var name = "";
......@@ -537,12 +515,48 @@
537515 case typeKindErrUnionId:
538516 var errSetTypeObj = zigAnalysis.types[typeObj.err];
539517 var payloadHtml = typeIndexName(typeObj.payload, wantHtml, wantSubLink, null);
540 if (errSetTypeObj.fn != null && errSetTypeObj.fn == fnIndex) {
518 if (fnDecl != null && errSetTypeObj.fn === fnDecl.value) {
541519 // function index parameter supplied and this is the inferred error set of it
542520 return "!" + payloadHtml;
543521 } else {
544522 return typeIndexName(typeObj.err, wantHtml, wantSubLink, null) + "!" + payloadHtml;
545523 }
524 case typeKindFnId:
525 var payloadHtml = "";
526 if (wantHtml) {
527 payloadHtml += '<span class="tok-kw">fn</span>';
528 if (fnDecl != null && !skipFnName) {
529 payloadHtml += ' <span class="tok-fn">' + escapeHtml(fnDecl.name) + '</span>';
530 }
531 } else {
532 payloadHtml += 'fn'
533 }
534 payloadHtml += '(';
535 if (typeObj.args != null) {
536 for (var i = 0; i < typeObj.args.length; i += 1) {
537 if (i != 0) {
538 payloadHtml += ', ';
539 }
540 var argTypeIndex = typeObj.args[i];
541 if (argTypeIndex != null) {
542 payloadHtml += typeIndexName(argTypeIndex, wantHtml, wantSubLink);
543 } else if (wantHtml) {
544 payloadHtml += '<span class="tok-kw">var</span>';
545 } else {
546 payloadHtml += 'var';
547 }
548 }
549 }
550
551 payloadHtml += ') ';
552 if (typeObj.ret != null) {
553 payloadHtml += typeIndexName(typeObj.ret, wantHtml, wantSubLink, fnDecl);
554 } else if (wantHtml) {
555 payloadHtml += '<span class="tok-kw">var</span>';
556 } else {
557 payloadHtml += 'var';
558 }
559 return payloadHtml;
546560 default:
547561 if (wantHtml) {
548562 return escapeHtml(typeObj.name);
......@@ -652,13 +666,28 @@
652666 }
653667
654668 if (fnsList.length !== 0) {
655 resizeDomList(domListFns, fnsList.length, '<li><a href="#"></a></li>');
669 resizeDomList(domListFns, fnsList.length,
670 '<tr><td><a href="#"></a></td><td></td><td></td></tr>');
656671 for (var i = 0; i < fnsList.length; i += 1) {
657 var liDom = domListFns.children[i];
658 var aDom = liDom.children[0];
659672 var decl = fnsList[i];
660 aDom.textContent = decl.name;
661 aDom.setAttribute('href', navLinkDecl(decl.name));
673 var trDom = domListFns.children[i];
674
675 var tdName = trDom.children[0];
676 var tdNameA = tdName.children[0];
677 var tdType = trDom.children[1];
678 var tdDesc = trDom.children[2];
679
680 tdNameA.setAttribute('href', navLinkDecl(decl.name));
681 tdNameA.textContent = decl.name;
682
683 tdType.innerHTML = typeIndexName(decl.type, true, true, decl, true);
684
685 var docs = zigAnalysis.astNodes[decl.src].docs;
686 if (docs != null) {
687 tdDesc.innerHTML = shortDescMarkdown(docs);
688 } else {
689 tdDesc.textContent = "";
690 }
662691 }
663692 domSectFns.classList.remove("hidden");
664693 }
......@@ -677,24 +706,25 @@
677706 }
678707
679708 if (varsList.length !== 0) {
680 resizeDomList(domListGlobalVars, varsList.length, '<tr><td></td><td></td><td></td></tr>');
709 resizeDomList(domListGlobalVars, varsList.length,
710 '<tr><td><a href="#"></a></td><td></td><td></td></tr>');
681711 for (var i = 0; i < varsList.length; i += 1) {
682712 var decl = varsList[i];
683713 var trDom = domListGlobalVars.children[i];
684 var innerHtml = "";
685714
686715 var tdName = trDom.children[0];
716 var tdNameA = tdName.children[0];
687717 var tdType = trDom.children[1];
688718 var tdDesc = trDom.children[2];
689719
690 tdName.innerHTML = '<a href="' +
691 navLinkDecl(decl.name) + '">' + escapeHtml(decl.name) + '</a>';
720 tdNameA.setAttribute('href', navLinkDecl(decl.name));
721 tdNameA.textContent = decl.name;
692722
693723 tdType.innerHTML = typeIndexName(decl.type, true, true);
694724
695725 var docs = zigAnalysis.astNodes[decl.src].docs;
696726 if (docs != null) {
697 tdDesc.innerHTML = markdown(docs);
727 tdDesc.innerHTML = shortDescMarkdown(docs);
698728 } else {
699729 tdDesc.textContent = "";
700730 }
......@@ -923,6 +953,12 @@
923953 });
924954 }
925955
956 function shortDescMarkdown(docs) {
957 var parts = docs.trim().split("\n");
958 var firstLine = parts[0];
959 return markdown(firstLine);
960 }
961
926962 function markdown(mdText) {
927963 // TODO implement more
928964 return escapeHtml(mdText);