| ... | @@ -191,30 +191,7 @@ | ... | @@ -191,30 +191,7 @@ |
| 191 | } | 191 | } |
| 192 | | 192 | |
| 193 | function renderFn(fnDecl) { | 193 | function renderFn(fnDecl) { |
| 194 | var typeObj = zigAnalysis.types[fnDecl.type]; | 194 | domFnProtoCode.innerHTML = typeIndexName(fnDecl.type, true, true, fnDecl); |
| 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; | | |
| 218 | | 195 | |
| 219 | var docsSource = null; | 196 | var docsSource = null; |
| 220 | var srcNode = zigAnalysis.astNodes[fnDecl.src]; | 197 | var srcNode = zigAnalysis.astNodes[fnDecl.src]; |
| ... | @@ -222,6 +199,7 @@ | ... | @@ -222,6 +199,7 @@ |
| 222 | docsSource = srcNode.docs; | 199 | docsSource = srcNode.docs; |
| 223 | } | 200 | } |
| 224 | | 201 | |
| | 202 | var typeObj = zigAnalysis.types[fnDecl.type]; |
| 225 | var errSetTypeIndex = null; | 203 | var errSetTypeIndex = null; |
| 226 | if (typeObj.ret != null) { | 204 | if (typeObj.ret != null) { |
| 227 | var retType = zigAnalysis.types[typeObj.ret]; | 205 | var retType = zigAnalysis.types[typeObj.ret]; |
| ... | @@ -409,24 +387,24 @@ | ... | @@ -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 | var typeObj = zigAnalysis.types[typeIndex]; | 391 | var typeObj = zigAnalysis.types[typeIndex]; |
| 414 | if (wantLink) { | 392 | if (wantLink) { |
| 415 | var declIndex = getCanonTypeDecl(typeIndex); | 393 | var declIndex = getCanonTypeDecl(typeIndex); |
| 416 | var declPath = getCanonDeclPath(declIndex); | 394 | var declPath = getCanonDeclPath(declIndex); |
| 417 | var haveLink = declPath != null; | 395 | var haveLink = declPath != null; |
| 418 | var typeNameHtml = typeName(typeObj, true, !haveLink, fnIndex); | 396 | var typeNameHtml = typeName(typeObj, true, !haveLink, fnDecl, skipFnName); |
| 419 | if (haveLink) { | 397 | if (haveLink) { |
| 420 | return '<a href="' + navLink(declPath.pkgNames, declPath.declNames) + '">' + typeNameHtml + '</a>'; | 398 | return '<a href="' + navLink(declPath.pkgNames, declPath.declNames) + '">' + typeNameHtml + '</a>'; |
| 421 | } else { | 399 | } else { |
| 422 | return typeNameHtml; | 400 | return typeNameHtml; |
| 423 | } | 401 | } |
| 424 | } else { | 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 | switch (typeObj.kind) { | 408 | switch (typeObj.kind) { |
| 431 | case typeKindPtrId: | 409 | case typeKindPtrId: |
| 432 | var name = ""; | 410 | var name = ""; |
| ... | @@ -537,12 +515,48 @@ | ... | @@ -537,12 +515,48 @@ |
| 537 | case typeKindErrUnionId: | 515 | case typeKindErrUnionId: |
| 538 | var errSetTypeObj = zigAnalysis.types[typeObj.err]; | 516 | var errSetTypeObj = zigAnalysis.types[typeObj.err]; |
| 539 | var payloadHtml = typeIndexName(typeObj.payload, wantHtml, wantSubLink, null); | 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 | // function index parameter supplied and this is the inferred error set of it | 519 | // function index parameter supplied and this is the inferred error set of it |
| 542 | return "!" + payloadHtml; | 520 | return "!" + payloadHtml; |
| 543 | } else { | 521 | } else { |
| 544 | return typeIndexName(typeObj.err, wantHtml, wantSubLink, null) + "!" + payloadHtml; | 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 | default: | 560 | default: |
| 547 | if (wantHtml) { | 561 | if (wantHtml) { |
| 548 | return escapeHtml(typeObj.name); | 562 | return escapeHtml(typeObj.name); |
| ... | @@ -652,13 +666,28 @@ | ... | @@ -652,13 +666,28 @@ |
| 652 | } | 666 | } |
| 653 | | 667 | |
| 654 | if (fnsList.length !== 0) { | 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 | for (var i = 0; i < fnsList.length; i += 1) { | 671 | for (var i = 0; i < fnsList.length; i += 1) { |
| 657 | var liDom = domListFns.children[i]; | | |
| 658 | var aDom = liDom.children[0]; | | |
| 659 | var decl = fnsList[i]; | 672 | var decl = fnsList[i]; |
| 660 | aDom.textContent = decl.name; | 673 | var trDom = domListFns.children[i]; |
| 661 | aDom.setAttribute('href', navLinkDecl(decl.name)); | 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 | domSectFns.classList.remove("hidden"); | 692 | domSectFns.classList.remove("hidden"); |
| 664 | } | 693 | } |
| ... | @@ -677,24 +706,25 @@ | ... | @@ -677,24 +706,25 @@ |
| 677 | } | 706 | } |
| 678 | | 707 | |
| 679 | if (varsList.length !== 0) { | 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 | for (var i = 0; i < varsList.length; i += 1) { | 711 | for (var i = 0; i < varsList.length; i += 1) { |
| 682 | var decl = varsList[i]; | 712 | var decl = varsList[i]; |
| 683 | var trDom = domListGlobalVars.children[i]; | 713 | var trDom = domListGlobalVars.children[i]; |
| 684 | var innerHtml = ""; | | |
| 685 | | 714 | |
| 686 | var tdName = trDom.children[0]; | 715 | var tdName = trDom.children[0]; |
| | 716 | var tdNameA = tdName.children[0]; |
| 687 | var tdType = trDom.children[1]; | 717 | var tdType = trDom.children[1]; |
| 688 | var tdDesc = trDom.children[2]; | 718 | var tdDesc = trDom.children[2]; |
| 689 | | 719 | |
| 690 | tdName.innerHTML = '<a href="' + | 720 | tdNameA.setAttribute('href', navLinkDecl(decl.name)); |
| 691 | navLinkDecl(decl.name) + '">' + escapeHtml(decl.name) + '</a>'; | 721 | tdNameA.textContent = decl.name; |
| 692 | | 722 | |
| 693 | tdType.innerHTML = typeIndexName(decl.type, true, true); | 723 | tdType.innerHTML = typeIndexName(decl.type, true, true); |
| 694 | | 724 | |
| 695 | var docs = zigAnalysis.astNodes[decl.src].docs; | 725 | var docs = zigAnalysis.astNodes[decl.src].docs; |
| 696 | if (docs != null) { | 726 | if (docs != null) { |
| 697 | tdDesc.innerHTML = markdown(docs); | 727 | tdDesc.innerHTML = shortDescMarkdown(docs); |
| 698 | } else { | 728 | } else { |
| 699 | tdDesc.textContent = ""; | 729 | tdDesc.textContent = ""; |
| 700 | } | 730 | } |
| ... | @@ -923,6 +953,12 @@ | ... | @@ -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 | function markdown(mdText) { | 962 | function markdown(mdText) { |
| 927 | // TODO implement more | 963 | // TODO implement more |
| 928 | return escapeHtml(mdText); | 964 | return escapeHtml(mdText); |