| ... | ... | @@ -191,30 +191,7 @@ |
| 191 | 191 | } |
| 192 | 192 | |
| 193 | 193 | 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); |
| 218 | 195 | |
| 219 | 196 | var docsSource = null; |
| 220 | 197 | var srcNode = zigAnalysis.astNodes[fnDecl.src]; |
| ... | ... | @@ -222,6 +199,7 @@ |
| 222 | 199 | docsSource = srcNode.docs; |
| 223 | 200 | } |
| 224 | 201 | |
| 202 | var typeObj = zigAnalysis.types[fnDecl.type]; |
| 225 | 203 | var errSetTypeIndex = null; |
| 226 | 204 | if (typeObj.ret != null) { |
| 227 | 205 | var retType = zigAnalysis.types[typeObj.ret]; |
| ... | ... | @@ -409,24 +387,24 @@ |
| 409 | 387 | } |
| 410 | 388 | } |
| 411 | 389 | |
| 412 | | function typeIndexName(typeIndex, wantHtml, wantLink, fnIndex) { |
| 390 | function typeIndexName(typeIndex, wantHtml, wantLink, fnDecl, skipFnName) { |
| 413 | 391 | var typeObj = zigAnalysis.types[typeIndex]; |
| 414 | 392 | if (wantLink) { |
| 415 | 393 | var declIndex = getCanonTypeDecl(typeIndex); |
| 416 | 394 | var declPath = getCanonDeclPath(declIndex); |
| 417 | 395 | var haveLink = declPath != null; |
| 418 | | var typeNameHtml = typeName(typeObj, true, !haveLink, fnIndex); |
| 396 | var typeNameHtml = typeName(typeObj, true, !haveLink, fnDecl, skipFnName); |
| 419 | 397 | if (haveLink) { |
| 420 | 398 | return '<a href="' + navLink(declPath.pkgNames, declPath.declNames) + '">' + typeNameHtml + '</a>'; |
| 421 | 399 | } else { |
| 422 | 400 | return typeNameHtml; |
| 423 | 401 | } |
| 424 | 402 | } else { |
| 425 | | return typeName(typeObj, wantHtml, false, fnIndex); |
| 403 | return typeName(typeObj, wantHtml, false, fnDecl, skipFnName); |
| 426 | 404 | } |
| 427 | 405 | } |
| 428 | 406 | |
| 429 | | function typeName(typeObj, wantHtml, wantSubLink, fnIndex) { |
| 407 | function typeName(typeObj, wantHtml, wantSubLink, fnDecl, skipFnName) { |
| 430 | 408 | switch (typeObj.kind) { |
| 431 | 409 | case typeKindPtrId: |
| 432 | 410 | var name = ""; |
| ... | ... | @@ -537,12 +515,48 @@ |
| 537 | 515 | case typeKindErrUnionId: |
| 538 | 516 | var errSetTypeObj = zigAnalysis.types[typeObj.err]; |
| 539 | 517 | var payloadHtml = typeIndexName(typeObj.payload, wantHtml, wantSubLink, null); |
| 540 | | if (errSetTypeObj.fn != null && errSetTypeObj.fn == fnIndex) { |
| 518 | if (fnDecl != null && errSetTypeObj.fn === fnDecl.value) { |
| 541 | 519 | // function index parameter supplied and this is the inferred error set of it |
| 542 | 520 | return "!" + payloadHtml; |
| 543 | 521 | } else { |
| 544 | 522 | return typeIndexName(typeObj.err, wantHtml, wantSubLink, null) + "!" + payloadHtml; |
| 545 | 523 | } |
| 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; |
| 546 | 560 | default: |
| 547 | 561 | if (wantHtml) { |
| 548 | 562 | return escapeHtml(typeObj.name); |
| ... | ... | @@ -652,13 +666,28 @@ |
| 652 | 666 | } |
| 653 | 667 | |
| 654 | 668 | 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>'); |
| 656 | 671 | for (var i = 0; i < fnsList.length; i += 1) { |
| 657 | | var liDom = domListFns.children[i]; |
| 658 | | var aDom = liDom.children[0]; |
| 659 | 672 | 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 | } |
| 662 | 691 | } |
| 663 | 692 | domSectFns.classList.remove("hidden"); |
| 664 | 693 | } |
| ... | ... | @@ -677,24 +706,25 @@ |
| 677 | 706 | } |
| 678 | 707 | |
| 679 | 708 | 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>'); |
| 681 | 711 | for (var i = 0; i < varsList.length; i += 1) { |
| 682 | 712 | var decl = varsList[i]; |
| 683 | 713 | var trDom = domListGlobalVars.children[i]; |
| 684 | | var innerHtml = ""; |
| 685 | 714 | |
| 686 | 715 | var tdName = trDom.children[0]; |
| 716 | var tdNameA = tdName.children[0]; |
| 687 | 717 | var tdType = trDom.children[1]; |
| 688 | 718 | var tdDesc = trDom.children[2]; |
| 689 | 719 | |
| 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; |
| 692 | 722 | |
| 693 | 723 | tdType.innerHTML = typeIndexName(decl.type, true, true); |
| 694 | 724 | |
| 695 | 725 | var docs = zigAnalysis.astNodes[decl.src].docs; |
| 696 | 726 | if (docs != null) { |
| 697 | | tdDesc.innerHTML = markdown(docs); |
| 727 | tdDesc.innerHTML = shortDescMarkdown(docs); |
| 698 | 728 | } else { |
| 699 | 729 | tdDesc.textContent = ""; |
| 700 | 730 | } |
| ... | ... | @@ -923,6 +953,12 @@ |
| 923 | 953 | }); |
| 924 | 954 | } |
| 925 | 955 | |
| 956 | function shortDescMarkdown(docs) { |
| 957 | var parts = docs.trim().split("\n"); |
| 958 | var firstLine = parts[0]; |
| 959 | return markdown(firstLine); |
| 960 | } |
| 961 | |
| 926 | 962 | function markdown(mdText) { |
| 927 | 963 | // TODO implement more |
| 928 | 964 | return escapeHtml(mdText); |