| ... | ... | @@ -149,8 +149,9 @@ |
| 149 | 149 | while(i < 1000) { |
| 150 | 150 | i += 1; |
| 151 | 151 | |
| 152 | | if ("declRef" in value) { |
| 153 | | value = zigAnalysis.decls[value.declRef].value; |
| 152 | if ("declPath" in value) { |
| 153 | console.assert(value.declPath.length == 1); // only support declRefs for now |
| 154 | value = zigAnalysis.decls[value.declPath[0]].value; |
| 154 | 155 | continue; |
| 155 | 156 | } |
| 156 | 157 | |
| ... | ... | @@ -169,8 +170,9 @@ |
| 169 | 170 | return typeTypeId; |
| 170 | 171 | } |
| 171 | 172 | |
| 172 | | if ("declRef" in decl.value) { |
| 173 | | decl = zigAnalysis.decls[decl.value.declRef]; |
| 173 | if ("declPath" in decl.value) { |
| 174 | console.assert(decl.value.declPath.length == 1); // only support declRefs for now |
| 175 | decl = zigAnalysis.decls[decl.value.declPath[0]]; |
| 174 | 176 | continue; |
| 175 | 177 | } |
| 176 | 178 | |
| ... | ... | @@ -193,6 +195,7 @@ |
| 193 | 195 | |
| 194 | 196 | console.log("TODO: handle in `typeOfDecl` more cases: ", decl); |
| 195 | 197 | console.assert(false); |
| 198 | throw {}; |
| 196 | 199 | } |
| 197 | 200 | console.assert(false); |
| 198 | 201 | } |
| ... | ... | @@ -637,6 +640,25 @@ |
| 637 | 640 | } |
| 638 | 641 | |
| 639 | 642 | function typeIndexName(typeIndex, wantHtml, wantLink, fnDecl, linkFnNameDecl) { |
| 643 | return typeValueName({ type: typeIndex }, wantHtml, wantLink, fnDecl, linkFnNameDecl); |
| 644 | } |
| 645 | |
| 646 | function typeValueName(typeValue, wantHtml, wantLink, fnDecl, linkFnNameDecl) { |
| 647 | if ("declPath" in typeValue) { |
| 648 | console.assert(typeValue.declPath.length == 1); |
| 649 | var declIndex = typeValue.declPath[0]; |
| 650 | var name = zigAnalysis.decls[declIndex].name; |
| 651 | var declPath = getCanonDeclPath(declIndex); |
| 652 | if (wantLink) { |
| 653 | var nl = navLink(declPath.pkgNames, declPath.declNames); |
| 654 | return '<a href="' + nl + '">' + name + '</a>'; |
| 655 | } else { |
| 656 | return name; |
| 657 | } |
| 658 | } |
| 659 | |
| 660 | console.assert("type" in typeValue) |
| 661 | var typeIndex = typeValue.type; |
| 640 | 662 | var typeObj = zigAnalysis.types[typeIndex]; |
| 641 | 663 | var declNameOk = declCanRepresentTypeKind(typeObj.kind); |
| 642 | 664 | if (wantLink) { |
| ... | ... | @@ -714,10 +736,11 @@ |
| 714 | 736 | name += typeObj.len; |
| 715 | 737 | } |
| 716 | 738 | name += "]"; |
| 717 | | name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null); |
| 739 | name += typeValueName(typeObj.elem, wantHtml, wantSubLink, null); |
| 718 | 740 | return name; |
| 719 | 741 | case typeKinds.Optional: |
| 720 | | return "?" + typeIndexName(typeObj.child, wantHtml, wantSubLink, fnDecl, linkFnNameDecl); |
| 742 | |
| 743 | return "?" + typeValueName(typeObj.child, wantHtml, wantSubLink, fnDecl, linkFnNameDecl); |
| 721 | 744 | case typeKinds.Pointer: |
| 722 | 745 | var name = ""; |
| 723 | 746 | switch (typeObj.len) { |
| ... | ... | @@ -776,7 +799,7 @@ |
| 776 | 799 | } |
| 777 | 800 | name += ") "; |
| 778 | 801 | } |
| 779 | | name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null); |
| 802 | name += typeValueName(typeObj.elem, wantHtml, wantSubLink, null); |
| 780 | 803 | return name; |
| 781 | 804 | case typeKinds.Float: |
| 782 | 805 | if (wantHtml) { |
| ... | ... | @@ -949,13 +972,9 @@ |
| 949 | 972 | } |
| 950 | 973 | } |
| 951 | 974 | |
| 952 | | var retValue = resolveValue(typeObj.ret); |
| 953 | | console.assert("type" in retValue); |
| 954 | | var retTypeIndex = retValue.type; |
| 955 | | |
| 956 | | payloadHtml += ') '; |
| 957 | | if (retTypeIndex != null) { |
| 958 | | payloadHtml += typeIndexName(retTypeIndex, wantHtml, wantSubLink, fnDecl); |
| 975 | payloadHtml += ') '; |
| 976 | if (typeObj.ret != null) { |
| 977 | payloadHtml += typeValueName(typeObj.ret, wantHtml, wantSubLink, fnDecl); |
| 959 | 978 | } else if (wantHtml) { |
| 960 | 979 | payloadHtml += '<span class="tok-kw">anytype</span>'; |
| 961 | 980 | } else { |
| ... | ... | @@ -1188,10 +1207,10 @@ |
| 1188 | 1207 | var kind = value.kind; |
| 1189 | 1208 | if (kind === typeKinds.Fn) { |
| 1190 | 1209 | //if (allCompTimeFnCallsHaveTypeResult(decl.type, declTypeId)) { |
| 1191 | | // typesList.push(decl); |
| 1192 | | //} else { |
| 1193 | | fnsList.push(decl); |
| 1194 | | // } |
| 1210 | // typesList.push(decl); |
| 1211 | //} else { |
| 1212 | fnsList.push(decl); |
| 1213 | // } |
| 1195 | 1214 | |
| 1196 | 1215 | } else if (typeIsErrSet(declValue.type)) { |
| 1197 | 1216 | errSetsList.push(decl); |
| ... | ... | @@ -1295,8 +1314,9 @@ |
| 1295 | 1314 | if (typeof(field) === 'object') { |
| 1296 | 1315 | if (field.failure === true) { |
| 1297 | 1316 | html += '<span class="tok-kw" style="color:red;">#FAILURE#</span>'; |
| 1298 | | } else if ("declRef" in field) { |
| 1299 | | var decl = zigAnalysis.decls[field.declRef]; |
| 1317 | } else if ("declPath" in field) { |
| 1318 | console.assert(field.declPath.lenght == 1); |
| 1319 | var decl = zigAnalysis.decls[field.declPath[0]]; |
| 1300 | 1320 | var val = resolveValue(decl.value); |
| 1301 | 1321 | console.assert("type" in val); |
| 1302 | 1322 | var valType = zigAnalysis.types[val.type]; |
| ... | ... | @@ -2002,117 +2022,117 @@ |
| 2002 | 2022 | } |
| 2003 | 2023 | } |
| 2004 | 2024 | |
| 2005 | | function showHelpModal() { |
| 2006 | | domHelpModal.classList.remove("hidden"); |
| 2007 | | domHelpModal.style.left = (window.innerWidth / 2 - domHelpModal.clientWidth / 2) + "px"; |
| 2008 | | domHelpModal.style.top = (window.innerHeight / 2 - domHelpModal.clientHeight / 2) + "px"; |
| 2009 | | domHelpModal.focus(); |
| 2010 | | } |
| 2011 | | |
| 2012 | | function clearAsyncSearch() { |
| 2013 | | if (searchTimer != null) { |
| 2014 | | clearTimeout(searchTimer); |
| 2015 | | searchTimer = null; |
| 2016 | | } |
| 2017 | | } |
| 2025 | function showHelpModal() { |
| 2026 | domHelpModal.classList.remove("hidden"); |
| 2027 | domHelpModal.style.left = (window.innerWidth / 2 - domHelpModal.clientWidth / 2) + "px"; |
| 2028 | domHelpModal.style.top = (window.innerHeight / 2 - domHelpModal.clientHeight / 2) + "px"; |
| 2029 | domHelpModal.focus(); |
| 2030 | } |
| 2018 | 2031 | |
| 2019 | | function startAsyncSearch() { |
| 2020 | | clearAsyncSearch(); |
| 2021 | | searchTimer = setTimeout(startSearch, 100); |
| 2032 | function clearAsyncSearch() { |
| 2033 | if (searchTimer != null) { |
| 2034 | clearTimeout(searchTimer); |
| 2035 | searchTimer = null; |
| 2022 | 2036 | } |
| 2023 | | function startSearch() { |
| 2024 | | clearAsyncSearch(); |
| 2025 | | var oldHash = location.hash; |
| 2026 | | var parts = oldHash.split("?"); |
| 2027 | | var newPart2 = (domSearch.value === "") ? "" : ("?" + domSearch.value); |
| 2028 | | location.hash = (parts.length === 1) ? (oldHash + newPart2) : (parts[0] + newPart2); |
| 2029 | | } |
| 2030 | | function getSearchTerms() { |
| 2031 | | var list = curNavSearch.trim().split(/[ \r\n\t]+/); |
| 2032 | | list.sort(); |
| 2033 | | return list; |
| 2034 | | } |
| 2035 | | function renderSearch() { |
| 2036 | | var matchedItems = []; |
| 2037 | | var ignoreCase = (curNavSearch.toLowerCase() === curNavSearch); |
| 2038 | | var terms = getSearchTerms(); |
| 2039 | | |
| 2040 | | decl_loop: for (var declIndex = 0; declIndex < zigAnalysis.decls.length; declIndex += 1) { |
| 2041 | | var canonPath = getCanonDeclPath(declIndex); |
| 2042 | | if (canonPath == null) continue; |
| 2037 | } |
| 2043 | 2038 | |
| 2044 | | var decl = zigAnalysis.decls[declIndex]; |
| 2045 | | var lastPkgName = canonPath.pkgNames[canonPath.pkgNames.length - 1]; |
| 2046 | | var fullPathSearchText = lastPkgName + "." + canonPath.declNames.join('.'); |
| 2047 | | var astNode = zigAnalysis.astNodes[decl.src]; |
| 2048 | | var fileAndDocs = zigAnalysis.files[astNode.file]; |
| 2049 | | if (astNode.docs != null) { |
| 2050 | | fileAndDocs += "\n" + astNode.docs; |
| 2039 | function startAsyncSearch() { |
| 2040 | clearAsyncSearch(); |
| 2041 | searchTimer = setTimeout(startSearch, 100); |
| 2042 | } |
| 2043 | function startSearch() { |
| 2044 | clearAsyncSearch(); |
| 2045 | var oldHash = location.hash; |
| 2046 | var parts = oldHash.split("?"); |
| 2047 | var newPart2 = (domSearch.value === "") ? "" : ("?" + domSearch.value); |
| 2048 | location.hash = (parts.length === 1) ? (oldHash + newPart2) : (parts[0] + newPart2); |
| 2049 | } |
| 2050 | function getSearchTerms() { |
| 2051 | var list = curNavSearch.trim().split(/[ \r\n\t]+/); |
| 2052 | list.sort(); |
| 2053 | return list; |
| 2054 | } |
| 2055 | function renderSearch() { |
| 2056 | var matchedItems = []; |
| 2057 | var ignoreCase = (curNavSearch.toLowerCase() === curNavSearch); |
| 2058 | var terms = getSearchTerms(); |
| 2059 | |
| 2060 | decl_loop: for (var declIndex = 0; declIndex < zigAnalysis.decls.length; declIndex += 1) { |
| 2061 | var canonPath = getCanonDeclPath(declIndex); |
| 2062 | if (canonPath == null) continue; |
| 2063 | |
| 2064 | var decl = zigAnalysis.decls[declIndex]; |
| 2065 | var lastPkgName = canonPath.pkgNames[canonPath.pkgNames.length - 1]; |
| 2066 | var fullPathSearchText = lastPkgName + "." + canonPath.declNames.join('.'); |
| 2067 | var astNode = zigAnalysis.astNodes[decl.src]; |
| 2068 | var fileAndDocs = zigAnalysis.files[astNode.file]; |
| 2069 | if (astNode.docs != null) { |
| 2070 | fileAndDocs += "\n" + astNode.docs; |
| 2071 | } |
| 2072 | var fullPathSearchTextLower = fullPathSearchText; |
| 2073 | if (ignoreCase) { |
| 2074 | fullPathSearchTextLower = fullPathSearchTextLower.toLowerCase(); |
| 2075 | fileAndDocs = fileAndDocs.toLowerCase(); |
| 2076 | } |
| 2077 | |
| 2078 | var points = 0; |
| 2079 | for (var termIndex = 0; termIndex < terms.length; termIndex += 1) { |
| 2080 | var term = terms[termIndex]; |
| 2081 | |
| 2082 | // exact, case sensitive match of full decl path |
| 2083 | if (fullPathSearchText === term) { |
| 2084 | points += 4; |
| 2085 | continue; |
| 2051 | 2086 | } |
| 2052 | | var fullPathSearchTextLower = fullPathSearchText; |
| 2053 | | if (ignoreCase) { |
| 2054 | | fullPathSearchTextLower = fullPathSearchTextLower.toLowerCase(); |
| 2055 | | fileAndDocs = fileAndDocs.toLowerCase(); |
| 2087 | // exact, case sensitive match of just decl name |
| 2088 | if (decl.name == term) { |
| 2089 | points += 3; |
| 2090 | continue; |
| 2056 | 2091 | } |
| 2057 | | |
| 2058 | | var points = 0; |
| 2059 | | for (var termIndex = 0; termIndex < terms.length; termIndex += 1) { |
| 2060 | | var term = terms[termIndex]; |
| 2061 | | |
| 2062 | | // exact, case sensitive match of full decl path |
| 2063 | | if (fullPathSearchText === term) { |
| 2064 | | points += 4; |
| 2065 | | continue; |
| 2066 | | } |
| 2067 | | // exact, case sensitive match of just decl name |
| 2068 | | if (decl.name == term) { |
| 2069 | | points += 3; |
| 2070 | | continue; |
| 2071 | | } |
| 2072 | | // substring, case insensitive match of full decl path |
| 2073 | | if (fullPathSearchTextLower.indexOf(term) >= 0) { |
| 2074 | | points += 2; |
| 2075 | | continue; |
| 2076 | | } |
| 2077 | | if (fileAndDocs.indexOf(term) >= 0) { |
| 2078 | | points += 1; |
| 2079 | | continue; |
| 2080 | | } |
| 2081 | | |
| 2082 | | continue decl_loop; |
| 2092 | // substring, case insensitive match of full decl path |
| 2093 | if (fullPathSearchTextLower.indexOf(term) >= 0) { |
| 2094 | points += 2; |
| 2095 | continue; |
| 2096 | } |
| 2097 | if (fileAndDocs.indexOf(term) >= 0) { |
| 2098 | points += 1; |
| 2099 | continue; |
| 2083 | 2100 | } |
| 2084 | 2101 | |
| 2085 | | matchedItems.push({ |
| 2086 | | decl: decl, |
| 2087 | | path: canonPath, |
| 2088 | | points: points, |
| 2089 | | }); |
| 2102 | continue decl_loop; |
| 2090 | 2103 | } |
| 2091 | 2104 | |
| 2092 | | if (matchedItems.length !== 0) { |
| 2093 | | resizeDomList(domListSearchResults, matchedItems.length, '<li><a href="#"></a></li>'); |
| 2105 | matchedItems.push({ |
| 2106 | decl: decl, |
| 2107 | path: canonPath, |
| 2108 | points: points, |
| 2109 | }); |
| 2110 | } |
| 2094 | 2111 | |
| 2095 | | matchedItems.sort(function(a, b) { |
| 2096 | | var cmp = operatorCompare(b.points, a.points); |
| 2097 | | if (cmp != 0) return cmp; |
| 2098 | | return operatorCompare(a.decl.name, b.decl.name); |
| 2099 | | }); |
| 2112 | if (matchedItems.length !== 0) { |
| 2113 | resizeDomList(domListSearchResults, matchedItems.length, '<li><a href="#"></a></li>'); |
| 2100 | 2114 | |
| 2101 | | for (var i = 0; i < matchedItems.length; i += 1) { |
| 2102 | | var liDom = domListSearchResults.children[i]; |
| 2103 | | var aDom = liDom.children[0]; |
| 2104 | | var match = matchedItems[i]; |
| 2105 | | var lastPkgName = match.path.pkgNames[match.path.pkgNames.length - 1]; |
| 2106 | | aDom.textContent = lastPkgName + "." + match.path.declNames.join('.'); |
| 2107 | | aDom.setAttribute('href', navLink(match.path.pkgNames, match.path.declNames)); |
| 2108 | | } |
| 2109 | | renderSearchCursor(); |
| 2115 | matchedItems.sort(function(a, b) { |
| 2116 | var cmp = operatorCompare(b.points, a.points); |
| 2117 | if (cmp != 0) return cmp; |
| 2118 | return operatorCompare(a.decl.name, b.decl.name); |
| 2119 | }); |
| 2110 | 2120 | |
| 2111 | | domSectSearchResults.classList.remove("hidden"); |
| 2112 | | } else { |
| 2113 | | domSectSearchNoResults.classList.remove("hidden"); |
| 2121 | for (var i = 0; i < matchedItems.length; i += 1) { |
| 2122 | var liDom = domListSearchResults.children[i]; |
| 2123 | var aDom = liDom.children[0]; |
| 2124 | var match = matchedItems[i]; |
| 2125 | var lastPkgName = match.path.pkgNames[match.path.pkgNames.length - 1]; |
| 2126 | aDom.textContent = lastPkgName + "." + match.path.declNames.join('.'); |
| 2127 | aDom.setAttribute('href', navLink(match.path.pkgNames, match.path.declNames)); |
| 2114 | 2128 | } |
| 2129 | renderSearchCursor(); |
| 2130 | |
| 2131 | domSectSearchResults.classList.remove("hidden"); |
| 2132 | } else { |
| 2133 | domSectSearchNoResults.classList.remove("hidden"); |
| 2115 | 2134 | } |
| 2135 | } |
| 2116 | 2136 | |
| 2117 | 2137 | function renderSearchCursor() { |
| 2118 | 2138 | for (var i = 0; i < domListSearchResults.children.length; i += 1) { |