| ... | @@ -93,8 +93,7 @@ var zigAnalysis; | ... | @@ -93,8 +93,7 @@ var zigAnalysis; |
| 93 | // empty array means refers to the package itself | 93 | // empty array means refers to the package itself |
| 94 | declNames: [], | 94 | declNames: [], |
| 95 | // these will be all types, except the last one may be a type or a decl | 95 | // these will be all types, except the last one may be a type or a decl |
| 96 | declObjs: [], | 96 | declObjs: [], |
| 97 | | | |
| 98 | // (a, b, c, d) comptime call; result is the value the docs refer to | 97 | // (a, b, c, d) comptime call; result is the value the docs refer to |
| 99 | callName: null, | 98 | callName: null, |
| 100 | }; | 99 | }; |
| ... | @@ -451,6 +450,8 @@ var zigAnalysis; | ... | @@ -451,6 +450,8 @@ var zigAnalysis; |
| 451 | curNav.declObjs.push(currentType); | 450 | curNav.declObjs.push(currentType); |
| 452 | } | 451 | } |
| 453 | | 452 | |
| | 453 | |
| | 454 | |
| 454 | window.x = currentType; | 455 | window.x = currentType; |
| 455 | | 456 | |
| 456 | renderNav(); | 457 | renderNav(); |
| ... | @@ -819,6 +820,27 @@ var zigAnalysis; | ... | @@ -819,6 +820,27 @@ var zigAnalysis; |
| 819 | return navLink(curNav.pkgNames, curNav.declNames.concat([childName])); | 820 | return navLink(curNav.pkgNames, curNav.declNames.concat([childName])); |
| 820 | } | 821 | } |
| 821 | | 822 | |
| | 823 | function findDeclNavLink(declName) { |
| | 824 | if (curNav.declObjs.length == 0) return null; |
| | 825 | const curFile = getAstNode(curNav.declObjs[curNav.declObjs.length-1].src).file; |
| | 826 | |
| | 827 | for (let i = curNav.declObjs.length -1; i >= 0; i--) { |
| | 828 | const curDecl = curNav.declObjs[i]; |
| | 829 | const curDeclName = curNav.declNames[i-1]; |
| | 830 | if (curDeclName == declName) { |
| | 831 | const declPath = curNav.declNames.slice(0,i); |
| | 832 | return navLink(curNav.pkgNames, declPath); |
| | 833 | } |
| | 834 | |
| | 835 | if (findSubDecl(curDecl, declName) != null) { |
| | 836 | const declPath = curNav.declNames.slice(0,i).concat([declName]); |
| | 837 | return navLink(curNav.pkgNames, declPath); |
| | 838 | } |
| | 839 | } |
| | 840 | |
| | 841 | //throw("could not resolve links for '" + declName + "'"); |
| | 842 | } |
| | 843 | |
| 822 | // | 844 | // |
| 823 | // function navLinkCall(callObj) { | 845 | // function navLinkCall(callObj) { |
| 824 | // let declNamesCopy = curNav.declNames.concat([]); | 846 | // let declNamesCopy = curNav.declNames.concat([]); |
| ... | @@ -879,7 +901,7 @@ var zigAnalysis; | ... | @@ -879,7 +901,7 @@ var zigAnalysis; |
| 879 | return "false"; | 901 | return "false"; |
| 880 | } | 902 | } |
| 881 | case "&": { | 903 | case "&": { |
| 882 | return "&" + exprName(zigAnalysis.exprs[expr["&"]]); | 904 | return "&" + exprName(zigAnalysis.exprs[expr["&"]], opts); |
| 883 | } | 905 | } |
| 884 | case "compileError": { | 906 | case "compileError": { |
| 885 | let compileError = expr.compileError; | 907 | let compileError = expr.compileError; |
| ... | @@ -896,18 +918,18 @@ var zigAnalysis; | ... | @@ -896,18 +918,18 @@ var zigAnalysis; |
| 896 | let payloadHtml = ""; | 918 | let payloadHtml = ""; |
| 897 | const lhsExpr = zigAnalysis.exprs[expr.slice.lhs]; | 919 | const lhsExpr = zigAnalysis.exprs[expr.slice.lhs]; |
| 898 | const startExpr = zigAnalysis.exprs[expr.slice.start]; | 920 | const startExpr = zigAnalysis.exprs[expr.slice.start]; |
| 899 | let decl = exprName(lhsExpr); | 921 | let decl = exprName(lhsExpr, opts); |
| 900 | let start = exprName(startExpr); | 922 | let start = exprName(startExpr, opts); |
| 901 | let end = ""; | 923 | let end = ""; |
| 902 | let sentinel = ""; | 924 | let sentinel = ""; |
| 903 | if (expr.slice["end"]) { | 925 | if (expr.slice["end"]) { |
| 904 | const endExpr = zigAnalysis.exprs[expr.slice.end]; | 926 | const endExpr = zigAnalysis.exprs[expr.slice.end]; |
| 905 | let end_ = exprName(endExpr); | 927 | let end_ = exprName(endExpr, opts); |
| 906 | end += end_; | 928 | end += end_; |
| 907 | } | 929 | } |
| 908 | if (expr.slice["sentinel"]) { | 930 | if (expr.slice["sentinel"]) { |
| 909 | const sentinelExpr = zigAnalysis.exprs[expr.slice.sentinel]; | 931 | const sentinelExpr = zigAnalysis.exprs[expr.slice.sentinel]; |
| 910 | let sentinel_ = exprName(sentinelExpr); | 932 | let sentinel_ = exprName(sentinelExpr, opts); |
| 911 | sentinel += " :" + sentinel_; | 933 | sentinel += " :" + sentinel_; |
| 912 | } | 934 | } |
| 913 | payloadHtml += decl + "[" + start + ".." + end + sentinel + "]"; | 935 | payloadHtml += decl + "[" + start + ".." + end + sentinel + "]"; |
| ... | @@ -915,7 +937,7 @@ var zigAnalysis; | ... | @@ -915,7 +937,7 @@ var zigAnalysis; |
| 915 | } | 937 | } |
| 916 | case "sliceIndex": { | 938 | case "sliceIndex": { |
| 917 | const sliceIndex = zigAnalysis.exprs[expr.sliceIndex]; | 939 | const sliceIndex = zigAnalysis.exprs[expr.sliceIndex]; |
| 918 | return exprName(sliceIndex, opts); | 940 | return exprName(sliceIndex, opts, opts); |
| 919 | } | 941 | } |
| 920 | case "cmpxchg": { | 942 | case "cmpxchg": { |
| 921 | const typeIndex = zigAnalysis.exprs[expr.cmpxchg.type]; | 943 | const typeIndex = zigAnalysis.exprs[expr.cmpxchg.type]; |
| ... | @@ -1019,19 +1041,6 @@ var zigAnalysis; | ... | @@ -1019,19 +1041,6 @@ var zigAnalysis; |
| 1019 | const switchIndex = zigAnalysis.exprs[expr.switchIndex]; | 1041 | const switchIndex = zigAnalysis.exprs[expr.switchIndex]; |
| 1020 | return exprName(switchIndex, opts); | 1042 | return exprName(switchIndex, opts); |
| 1021 | } | 1043 | } |
| 1022 | case "refPath": { | | |
| 1023 | let name = exprName(expr.refPath[0]); | | |
| 1024 | for (let i = 1; i < expr.refPath.length; i++) { | | |
| 1025 | let component = undefined; | | |
| 1026 | if ("string" in expr.refPath[i]) { | | |
| 1027 | component = expr.refPath[i].string; | | |
| 1028 | } else { | | |
| 1029 | component = exprName(expr.refPath[i]); | | |
| 1030 | } | | |
| 1031 | name += "." + component; | | |
| 1032 | } | | |
| 1033 | return name; | | |
| 1034 | } | | |
| 1035 | case "fieldRef": { | 1044 | case "fieldRef": { |
| 1036 | const enumObj = exprName({ type: expr.fieldRef.type }, opts); | 1045 | const enumObj = exprName({ type: expr.fieldRef.type }, opts); |
| 1037 | const field = | 1046 | const field = |
| ... | @@ -1581,10 +1590,46 @@ var zigAnalysis; | ... | @@ -1581,10 +1590,46 @@ var zigAnalysis; |
| 1581 | return exprName(exprArg, opts); | 1590 | return exprName(exprArg, opts); |
| 1582 | } | 1591 | } |
| 1583 | case "declRef": { | 1592 | case "declRef": { |
| 1584 | return getDecl(expr.declRef).name; | 1593 | const name = getDecl(expr.declRef).name; |
| | 1594 | |
| | 1595 | if (opts.wantHtml) { |
| | 1596 | let payloadHtml = ""; |
| | 1597 | if (opts.wantLink) { |
| | 1598 | payloadHtml += '<a href="'+ findDeclNavLink(name) +'">'; |
| | 1599 | } |
| | 1600 | payloadHtml += |
| | 1601 | '<span class="tok-kw" style="color:lightblue;">' + |
| | 1602 | name + |
| | 1603 | "</span>"; |
| | 1604 | if (opts.wantLink) payloadHtml += "</a>"; |
| | 1605 | return payloadHtml; |
| | 1606 | } else { |
| | 1607 | return name; |
| | 1608 | } |
| 1585 | } | 1609 | } |
| 1586 | case "refPath": { | 1610 | case "refPath": { |
| 1587 | return expr.refPath.map((x) => exprName(x, opts)).join("."); | 1611 | let firstComponent = expr.refPath[0]; |
| | 1612 | let name = exprName(firstComponent, opts); |
| | 1613 | let url = undefined; |
| | 1614 | if (opts.wantLink && "declRef" in firstComponent) { |
| | 1615 | url = findDeclNavLink(getDecl(firstComponent.declRef).name); |
| | 1616 | } |
| | 1617 | for (let i = 1; i < expr.refPath.length; i++) { |
| | 1618 | let component = undefined; |
| | 1619 | if ("string" in expr.refPath[i]) { |
| | 1620 | component = expr.refPath[i].string; |
| | 1621 | } else { |
| | 1622 | component = exprName(expr.refPath[i], {...opts, wantLink: false}); |
| | 1623 | if (opts.wantLink && "declRef" in expr.refPath[i]) { |
| | 1624 | url += "." + getDecl(expr.refPath[i].declRef).name; |
| | 1625 | component = '<a href="'+ url +'">' + |
| | 1626 | component + |
| | 1627 | "</a>"; |
| | 1628 | } |
| | 1629 | } |
| | 1630 | name += "." + component; |
| | 1631 | } |
| | 1632 | return name; |
| 1588 | } | 1633 | } |
| 1589 | case "int": { | 1634 | case "int": { |
| 1590 | return "" + expr.int; | 1635 | return "" + expr.int; |
| ... | @@ -1929,78 +1974,20 @@ var zigAnalysis; | ... | @@ -1929,78 +1974,20 @@ var zigAnalysis; |
| 1929 | if (isVarArgs && i === fnObj.params.length - 1) { | 1974 | if (isVarArgs && i === fnObj.params.length - 1) { |
| 1930 | payloadHtml += "..."; | 1975 | payloadHtml += "..."; |
| 1931 | } else if ("alignOf" in value) { | 1976 | } else if ("alignOf" in value) { |
| 1932 | if (opts.wantHtml) { | 1977 | payloadHtml += exprName(value, opts); |
| 1933 | payloadHtml += '<a href="">'; | | |
| 1934 | payloadHtml += | | |
| 1935 | '<span class="tok-kw" style="color:lightblue;">' + | | |
| 1936 | exprName(value, opts) + | | |
| 1937 | "</span>"; | | |
| 1938 | payloadHtml += "</a>"; | | |
| 1939 | } else { | | |
| 1940 | payloadHtml += exprName(value, opts); | | |
| 1941 | } | | |
| 1942 | } else if ("typeOf" in value) { | 1978 | } else if ("typeOf" in value) { |
| 1943 | if (opts.wantHtml) { | 1979 | payloadHtml += exprName(value, opts); |
| 1944 | payloadHtml += '<a href="">'; | | |
| 1945 | payloadHtml += | | |
| 1946 | '<span class="tok-kw" style="color:lightblue;">' + | | |
| 1947 | exprName(value, opts) + | | |
| 1948 | "</span>"; | | |
| 1949 | payloadHtml += "</a>"; | | |
| 1950 | } else { | | |
| 1951 | payloadHtml += exprName(value, opts); | | |
| 1952 | } | | |
| 1953 | } else if ("typeOf_peer" in value) { | 1980 | } else if ("typeOf_peer" in value) { |
| 1954 | if (opts.wantHtml) { | | |
| 1955 | payloadHtml += '<a href="">'; | | |
| 1956 | payloadHtml += | | |
| 1957 | '<span class="tok-kw" style="color:lightblue;">' + | | |
| 1958 | exprName(value, opts) + | | |
| 1959 | "</span>"; | | |
| 1960 | payloadHtml += "</a>"; | | |
| 1961 | } else { | | |
| 1962 | payloadHtml += exprName(value, opts); | 1981 | payloadHtml += exprName(value, opts); |
| 1963 | } | | |
| 1964 | } else if ("declRef" in value) { | 1982 | } else if ("declRef" in value) { |
| 1965 | if (opts.wantHtml) { | | |
| 1966 | payloadHtml += '<a href="">'; | | |
| 1967 | payloadHtml += | | |
| 1968 | '<span class="tok-kw" style="color:lightblue;">' + | | |
| 1969 | exprName(value, opts) + | | |
| 1970 | "</span>"; | | |
| 1971 | payloadHtml += "</a>"; | | |
| 1972 | } else { | | |
| 1973 | payloadHtml += exprName(value, opts); | 1983 | payloadHtml += exprName(value, opts); |
| 1974 | } | | |
| 1975 | } else if ("call" in value) { | 1984 | } else if ("call" in value) { |
| 1976 | if (opts.wantHtml) { | | |
| 1977 | payloadHtml += '<a href="">'; | | |
| 1978 | payloadHtml += | | |
| 1979 | '<span class="tok-kw" style="color:lightblue;">' + | | |
| 1980 | exprName(value, opts) + | | |
| 1981 | "</span>"; | | |
| 1982 | payloadHtml += "</a>"; | | |
| 1983 | } else { | | |
| 1984 | payloadHtml += exprName(value, opts); | 1985 | payloadHtml += exprName(value, opts); |
| 1985 | } | | |
| 1986 | } else if ("refPath" in value) { | 1986 | } else if ("refPath" in value) { |
| 1987 | if (opts.wantHtml) { | | |
| 1988 | payloadHtml += '<a href="">'; | | |
| 1989 | payloadHtml += | | |
| 1990 | '<span class="tok-kw" style="color:lightblue;">' + | | |
| 1991 | exprName(value, opts) + | | |
| 1992 | "</span>"; | | |
| 1993 | payloadHtml += "</a>"; | | |
| 1994 | } else { | | |
| 1995 | payloadHtml += exprName(value, opts); | 1987 | payloadHtml += exprName(value, opts); |
| 1996 | } | | |
| 1997 | } else if ("type" in value) { | 1988 | } else if ("type" in value) { |
| 1998 | let name = exprName(value, { | 1989 | payloadHtml += exprName(value, opts); |
| 1999 | ...opts, | 1990 | //payloadHtml += '<span class="tok-kw">' + name + "</span>"; |
| 2000 | wantHtml: false, | | |
| 2001 | wantLink: false, | | |
| 2002 | }); | | |
| 2003 | payloadHtml += '<span class="tok-kw">' + name + "</span>"; | | |
| 2004 | } else if ("binOpIndex" in value) { | 1991 | } else if ("binOpIndex" in value) { |
| 2005 | payloadHtml += exprName(value, opts); | 1992 | payloadHtml += exprName(value, opts); |
| 2006 | } else if ("comptimeExpr" in value) { | 1993 | } else if ("comptimeExpr" in value) { |
| ... | @@ -2405,11 +2392,10 @@ var zigAnalysis; | ... | @@ -2405,11 +2392,10 @@ var zigAnalysis; |
| 2405 | } | 2392 | } |
| 2406 | | 2393 | |
| 2407 | if (typesList.length !== 0) { | 2394 | if (typesList.length !== 0) { |
| 2408 | window.x = typesList; | | |
| 2409 | resizeDomList( | 2395 | resizeDomList( |
| 2410 | domListTypes, | 2396 | domListTypes, |
| 2411 | typesList.length, | 2397 | typesList.length, |
| 2412 | '<li><a href="#"></a></li>' | 2398 | '<li><a href=""></a></li>' |
| 2413 | ); | 2399 | ); |
| 2414 | for (let i = 0; i < typesList.length; i += 1) { | 2400 | for (let i = 0; i < typesList.length; i += 1) { |
| 2415 | let liDom = domListTypes.children[i]; | 2401 | let liDom = domListTypes.children[i]; |
| ... | @@ -2511,8 +2497,7 @@ var zigAnalysis; | ... | @@ -2511,8 +2497,7 @@ var zigAnalysis; |
| 2511 | } else { | 2497 | } else { |
| 2512 | let fieldTypeExpr = container.fields[i]; | 2498 | let fieldTypeExpr = container.fields[i]; |
| 2513 | html += ": "; | 2499 | html += ": "; |
| 2514 | let name = exprName(fieldTypeExpr, false, false); | 2500 | html += exprName(fieldTypeExpr, {wantHtml:true, wantLink:true}); |
| 2515 | html += '<span class="tok-kw">' + name + "</span>"; | | |
| 2516 | let tsn = typeShorthandName(fieldTypeExpr); | 2501 | let tsn = typeShorthandName(fieldTypeExpr); |
| 2517 | if (tsn) { | 2502 | if (tsn) { |
| 2518 | html += "<span> (" + tsn + ")</span>"; | 2503 | html += "<span> (" + tsn + ")</span>"; |
| ... | @@ -2746,13 +2731,15 @@ var zigAnalysis; | ... | @@ -2746,13 +2731,15 @@ var zigAnalysis; |
| 2746 | } | 2731 | } |
| 2747 | } | 2732 | } |
| 2748 | | 2733 | |
| 2749 | function findSubDecl(parentType, childName) { | 2734 | function findSubDecl(parentTypeOrDecl, childName) { |
| | 2735 | let parentType = parentTypeOrDecl; |
| 2750 | { | 2736 | { |
| 2751 | // Generic functions | 2737 | // Generic functions / resorlving decls |
| 2752 | if ("value" in parentType) { | 2738 | if ("value" in parentType) { |
| 2753 | const rv = resolveValue(parentType.value); | 2739 | const rv = resolveValue(parentType.value); |
| 2754 | if ("type" in rv.expr) { | 2740 | if ("type" in rv.expr) { |
| 2755 | const t = getType(rv.expr.type); | 2741 | const t = getType(rv.expr.type); |
| | 2742 | parentType = t; |
| 2756 | if (t.kind == typeKinds.Fn && t.generic_ret != null) { | 2743 | if (t.kind == typeKinds.Fn && t.generic_ret != null) { |
| 2757 | let resolvedGenericRet = resolveValue({ expr: t.generic_ret }); | 2744 | let resolvedGenericRet = resolveValue({ expr: t.generic_ret }); |
| 2758 | | 2745 | |