authorgravatar for kappaloris@gmail.comLoris Cro <kappaloris@gmail.com> 2022-04-01 19:41:43+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-07-19 19:10:11-07:00
log80f9490e06c6190d176263ec6e7956a0d4b7887d
tree0e5d4088a672a063e00c5cd7e36d7e0b7c2cee14
parent919b8e400ca7b2885221a4a93ba5ab3192046480

autodoc: more js type fixes


2 files changed, 259 insertions(+), 138 deletions(-)

lib/docs/main.js+258-138
...@@ -33,26 +33,27 @@...@@ -33,26 +33,27 @@
33*/33*/
3434
35/**35/**
36 * @typedef {36 * @typedef {{
37 | { void: {} }37 void: {},
38 | { unreachable: {} }38 unreachable: {},
39 | { anytype: {} }39 anytype: {},
40 | { type: number }40 type: number,
41 | { comptimeExpr: number }41 comptimeExpr: number,
42 | { call: number }42 call: number,
43 | { int: { typeRef: WalkResult; value: number } }43 int: { typeRef: WalkResult; value: number },
44 | { float: { typeRef: WalkResult; value: number } }44 float: { typeRef: WalkResult; value: number },
45 | { bool: boolean }45 bool: boolean,
46 | { undefined: WalkResult }46 undefined: WalkResult,
47 | { null: WalkResult }47 null: WalkResult,
48 | { typeOf: WalkResult }48 typeOf: WalkResult,
49 | { compileError: string }49 compileError: string,
50 | { string: string }50 string: string,
51 | { struct: Struct }51 struct: Struct,
52 | { refPath: WalkResult[] }52 refPath: WalkResult[],
53 | { array: ZigArray }53 declRef: number,
54 | { enumLiteral: string }54 array: ZigArray,
55 } WalkResult55 enumLiteral: string,
56 }} WalkResult
56*/57*/
5758
58/**59/**
...@@ -76,16 +77,70 @@...@@ -76,16 +77,70 @@
76 }} Fn77 }} Fn
77*/78*/
7879
80/**
81* @typedef {{
82 kind: number,
83 name: string,
84 fields: { name: string, docs: string }[]
85 fn: number | undefined,
86}} ErrSetType
87*/
88
89/**
90* @typedef {{
91 kind: number,
92 err: WalkResult,
93 payload: WalkResult,
94}} ErrUnionType
95*/
96
97// Type, Void, Bool, NoReturn, Int, Float, ComptimeExpr, ComptimeFloat, ComptimeInt, Undefined, Null, ErrorUnion, BoundFn, Opaque, Frame, AnyFrame, Vector, EnumLiteral
98/**
99* @typedef {{
100 kind: number,
101 name: string
102}} NumberType
103*/
104
105/**
106* @typedef {{
107 kind: number,
108 size: number,
109 child: WalkResult
110 align: number,
111 bitOffsetInHost: number,
112 hostIntBytes: number,
113 volatile: boolean,
114 const: boolean,
115}} PointerType
116*/
117
118/**
119* @typedef {{
120 kind: number,
121 len: WalkResult
122 child: WalkResult
123}} ArrayType
124*/
125
126/**
127* @typedef {{
128 kind: number,
129 name: string,
130 child: WalkResult
131}} OptionalType
132*/
79133
80/**134/**
81 * @typedef {135 * @typedef {
82 | { kind: number, name: string } // Type, Void, Bool, NoReturn, Int, Float, ComptimeExpr, ComptimeFloat, ComptimeInt, Undefined, Null, ErrorUnion, BoundFn, Opaque, Frame, AnyFrame, Vector, EnumLiteral136 | OptionalType
83 | { kind: number, name: string; child: WalkResult } // Optional137 | ArrayType
84 | { kind: number, len: WalkResult; child: WalkResult } // Array138 | PointerType
85 | { kind: number, name: string; fields: { name: string; docs: string }[] } // ErrorSet
86 | { kind: number, size: "One" | "Many" | "Slice" | "C"; child: WalkResult } // Pointer
87 | ContainerType139 | ContainerType
88 | Fn140 | Fn
141 | ErrSetType
142 | ErrUnionType
143 | NumberType
89 } Type144 } Type
90*/145*/
91146
...@@ -107,6 +162,8 @@...@@ -107,6 +162,8 @@
107 docs?: string,162 docs?: string,
108 fields?: number[],163 fields?: number[],
109 comptime: boolean,164 comptime: boolean,
165 noalias: boolean,
166 varArgs: boolean,
110 }} AstNode167 }} AstNode
111*/168*/
112169
...@@ -117,7 +174,7 @@...@@ -117,7 +174,7 @@
117 src: number,174 src: number,
118 value: WalkResult,175 value: WalkResult,
119 decltest?: number,176 decltest?: number,
120 isTest: bool,177 isTest: boolean,
121 }} Decl178 }} Decl
122*/179*/
123180
...@@ -223,7 +280,7 @@ var zigAnalysis;...@@ -223,7 +280,7 @@ var zigAnalysis;
223 var domSectSearchNoResults = /** @type HTMLElement */(document.getElementById("sectSearchNoResults"));280 var domSectSearchNoResults = /** @type HTMLElement */(document.getElementById("sectSearchNoResults"));
224 var domSectInfo = /** @type HTMLElement */(document.getElementById("sectInfo"));281 var domSectInfo = /** @type HTMLElement */(document.getElementById("sectInfo"));
225 var domTdTarget = /** @type HTMLElement */(document.getElementById("tdTarget"));282 var domTdTarget = /** @type HTMLElement */(document.getElementById("tdTarget"));
226 var domPrivDeclsBox = /** @type HTMLElement */(document.getElementById("privDeclsBox"));283 var domPrivDeclsBox = /** @type HTMLCheckboxElement */(document.getElementById("privDeclsBox"));
227 var domTdZigVer = /** @type HTMLElement */(document.getElementById("tdZigVer"));284 var domTdZigVer = /** @type HTMLElement */(document.getElementById("tdZigVer"));
228 var domHdrName = /** @type HTMLElement */(document.getElementById("hdrName"));285 var domHdrName = /** @type HTMLElement */(document.getElementById("hdrName"));
229 var domHelpModal = /** @type HTMLElement */(document.getElementById("helpDialog"));286 var domHelpModal = /** @type HTMLElement */(document.getElementById("helpDialog"));
...@@ -252,7 +309,7 @@ var zigAnalysis;...@@ -252,7 +309,7 @@ var zigAnalysis;
252 var canonTypeDecls = null; // lazy; use getCanonTypeDecl309 var canonTypeDecls = null; // lazy; use getCanonTypeDecl
253310
254 /** @typedef {{311 /** @typedef {{
255 * showPrivDecls: bool,312 * showPrivDecls: boolean,
256 * pkgNames: string[],313 * pkgNames: string[],
257 * pkgObjs: Package[],314 * pkgObjs: Package[],
258 * declNames: string[],315 * declNames: string[],
...@@ -598,6 +655,7 @@ var zigAnalysis;...@@ -598,6 +655,7 @@ var zigAnalysis;
598 return typeObj.generic;655 return typeObj.generic;
599 }656 }
600657
658 /** @param {Decl} fnDecl */
601 function renderFn(fnDecl) {659 function renderFn(fnDecl) {
602 var value = resolveValue(fnDecl.value);660 var value = resolveValue(fnDecl.value);
603 console.assert("type" in value);661 console.assert("type" in value);
...@@ -622,31 +680,32 @@ var zigAnalysis;...@@ -622,31 +680,32 @@ var zigAnalysis;
622 errSetTypeIndex = retType.err;680 errSetTypeIndex = retType.err;
623 }681 }
624 if (errSetTypeIndex != null) {682 if (errSetTypeIndex != null) {
625 var errSetType = zigAnalysis.types[errSetTypeIndex];683 var errSetType = /** @type {ErrSetType} */(zigAnalysis.types[errSetTypeIndex]);
626 renderErrorSet(errSetType);684 renderErrorSet(errSetType);
627 }685 }
628686
629 var protoSrcIndex = fnDecl.src;687 var protoSrcIndex = fnDecl.src;
630 if (typeIsGenericFn(value.type)) {688 if (typeIsGenericFn(value.type)) {
631 var instantiations = nodesToFnsMap[protoSrcIndex];689 throw "TODO";
632 var calls = nodesToCallsMap[protoSrcIndex];690 // var instantiations = nodesToFnsMap[protoSrcIndex];
633 if (instantiations == null && calls == null) {691 // var calls = nodesToCallsMap[protoSrcIndex];
634 domFnNoExamples.classList.remove("hidden");692 // if (instantiations == null && calls == null) {
635 } else if (calls != null) {693 // domFnNoExamples.classList.remove("hidden");
636 // if (fnObj.combined === undefined) fnObj.combined = allCompTimeFnCallsResult(calls);694 // } else if (calls != null) {
637 if (fnObj.combined != null) renderContainer(fnObj.combined);695 // // if (fnObj.combined === undefined) fnObj.combined = allCompTimeFnCallsResult(calls);
638696 // if (fnObj.combined != null) renderContainer(fnObj.combined);
639 resizeDomList(domListFnExamples, calls.length, '<li></li>');697
640698 // resizeDomList(domListFnExamples, calls.length, '<li></li>');
641 for (var callI = 0; callI < calls.length; callI += 1) {699
642 var liDom = domListFnExamples.children[callI];700 // for (var callI = 0; callI < calls.length; callI += 1) {
643 liDom.innerHTML = getCallHtml(fnDecl, calls[callI]);701 // var liDom = domListFnExamples.children[callI];
644 }702 // liDom.innerHTML = getCallHtml(fnDecl, calls[callI]);
645703 // }
646 domFnExamples.classList.remove("hidden");704
647 } else if (instantiations != null) {705 // domFnExamples.classList.remove("hidden");
648 // TODO706 // } else if (instantiations != null) {
649 }707 // // TODO
708 // }
650 } else {709 } else {
651710
652 domFnExamples.classList.add("hidden");711 domFnExamples.classList.add("hidden");
...@@ -664,11 +723,15 @@ var zigAnalysis;...@@ -664,11 +723,15 @@ var zigAnalysis;
664 domFnProto.classList.remove("hidden");723 domFnProto.classList.remove("hidden");
665 }724 }
666725
726 /**
727 * @param {Decl} fnDecl
728 * @param {Fn} typeObj
729 */
667 function renderFnParamDocs(fnDecl, typeObj) {730 function renderFnParamDocs(fnDecl, typeObj) {
668 var docCount = 0;731 var docCount = 0;
669732
670 var fnNode = zigAnalysis.astNodes[fnDecl.src];733 var fnNode = zigAnalysis.astNodes[fnDecl.src];
671 var fields = fnNode.fields;734 var fields = /** @type {number[]} */(fnNode.fields);
672 var isVarArgs = fnNode.varArgs;735 var isVarArgs = fnNode.varArgs;
673736
674 for (var i = 0; i < fields.length; i += 1) {737 for (var i = 0; i < fields.length; i += 1) {
...@@ -696,11 +759,11 @@ var zigAnalysis;...@@ -696,11 +759,11 @@ var zigAnalysis;
696759
697760
698 var value = typeObj.params[i];761 var value = typeObj.params[i];
699 var html = '<pre>' + escapeHtml(fieldNode.name) + ": ";762 var html = '<pre>' + escapeHtml(/** @type {string} */(fieldNode.name)) + ": ";
700 if (isVarArgs && i === typeObj.params.length - 1) {763 if (isVarArgs && i === typeObj.params.length - 1) {
701 html += '...';764 html += '...';
702 } else {765 } else {
703 var name = typeValueName(value);766 var name = typeValueName(value, false, false);
704 html += '<span class="tok-kw">' + name + '</span>';767 html += '<span class="tok-kw">' + name + '</span>';
705 }768 }
706769
...@@ -720,7 +783,7 @@ var zigAnalysis;...@@ -720,7 +783,7 @@ var zigAnalysis;
720 resizeDomList(domListNav, len, '<li><a href="#"></a></li>');783 resizeDomList(domListNav, len, '<li><a href="#"></a></li>');
721 var list = [];784 var list = [];
722 var hrefPkgNames = [];785 var hrefPkgNames = [];
723 var hrefDeclNames = [];786 var hrefDeclNames = /** @type {string[]} */([]);
724 for (var i = 0; i < curNav.pkgNames.length; i += 1) {787 for (var i = 0; i < curNav.pkgNames.length; i += 1) {
725 hrefPkgNames.push(curNav.pkgNames[i]);788 hrefPkgNames.push(curNav.pkgNames[i]);
726 list.push({789 list.push({
...@@ -753,7 +816,7 @@ var zigAnalysis;...@@ -753,7 +816,7 @@ var zigAnalysis;
753816
754 function renderInfo() {817 function renderInfo() {
755 domTdZigVer.textContent = zigAnalysis.params.zigVersion;818 domTdZigVer.textContent = zigAnalysis.params.zigVersion;
756 domTdTarget.textContent = zigAnalysis.params.builds[0].target;819 //domTdTarget.textContent = zigAnalysis.params.builds[0].target;
757820
758 domSectInfo.classList.remove("hidden");821 domSectInfo.classList.remove("hidden");
759 }822 }
...@@ -809,6 +872,12 @@ var zigAnalysis;...@@ -809,6 +872,12 @@ var zigAnalysis;
809 }872 }
810 }873 }
811874
875 /**
876 * @param {string[]} pkgNames
877 * @param {string[]} declNames
878 * @param {string} [callName]
879 */
880
812 function navLink(pkgNames, declNames, callName) {881 function navLink(pkgNames, declNames, callName) {
813 let base = '#';882 let base = '#';
814 if (curNav.showPrivDecls) {883 if (curNav.showPrivDecls) {
...@@ -826,23 +895,26 @@ var zigAnalysis;...@@ -826,23 +895,26 @@ var zigAnalysis;
826 }895 }
827 }896 }
828897
898 /** @param {number} pkgIndex */
829 function navLinkPkg(pkgIndex) {899 function navLinkPkg(pkgIndex) {
830 return navLink(canonPkgPaths[pkgIndex], []);900 return navLink(canonPkgPaths[pkgIndex], []);
831 }901 }
832902
903 /** @param {string} childName */
833 function navLinkDecl(childName) {904 function navLinkDecl(childName) {
834 return navLink(curNav.pkgNames, curNav.declNames.concat([childName]));905 return navLink(curNav.pkgNames, curNav.declNames.concat([childName]));
835 }906 }
836907
908 /** @param {Call} callObj */
837 function navLinkCall(callObj) {909 function navLinkCall(callObj) {
838 var declNamesCopy = curNav.declNames.concat([]);910 var declNamesCopy = curNav.declNames.concat([]);
839 var callName = declNamesCopy.pop();911 var callName = /** @type {string} */(declNamesCopy.pop());
840912
841 callName += '(';913 callName += '(';
842 for (var arg_i = 0; arg_i < callObj.args.length; arg_i += 1) {914 for (var arg_i = 0; arg_i < callObj.args.length; arg_i += 1) {
843 if (arg_i !== 0) callName += ',';915 if (arg_i !== 0) callName += ',';
844 var argObj = callObj.args[arg_i];916 var argObj = callObj.args[arg_i];
845 callName += getValueText(argObj.type, argObj.value, false, false);917 callName += getValueText(argObj, argObj, false, false);
846 }918 }
847 callName += ')';919 callName += ')';
848920
...@@ -850,6 +922,10 @@ var zigAnalysis;...@@ -850,6 +922,10 @@ var zigAnalysis;
850 return navLink(curNav.pkgNames, declNamesCopy);922 return navLink(curNav.pkgNames, declNamesCopy);
851 }923 }
852924
925 /**
926 * @param {any} dlDom
927 * @param {number} desiredLen
928 */
853 function resizeDomListDl(dlDom, desiredLen) {929 function resizeDomListDl(dlDom, desiredLen) {
854 // add the missing dom entries930 // add the missing dom entries
855 var i, ev;931 var i, ev;
...@@ -863,6 +939,11 @@ var zigAnalysis;...@@ -863,6 +939,11 @@ var zigAnalysis;
863 }939 }
864 }940 }
865941
942 /**
943 * @param {any} listDom
944 * @param {number} desiredLen
945 * @param {string} templateHtml
946 */
866 function resizeDomList(listDom, desiredLen, templateHtml) {947 function resizeDomList(listDom, desiredLen, templateHtml) {
867 // add the missing dom entries948 // add the missing dom entries
868 var i, ev;949 var i, ev;
...@@ -879,14 +960,14 @@ var zigAnalysis;...@@ -879,14 +960,14 @@ var zigAnalysis;
879 * @param {WalkResult} typeValue,960 * @param {WalkResult} typeValue,
880 * @param {boolean} wantHtml,961 * @param {boolean} wantHtml,
881 * @param {boolean} wantLink,962 * @param {boolean} wantLink,
882 * @param {number} [fnDecl],963 * @param {Decl | null} [fnDecl],
883 * @param {string} [linkFnNameDecl],964 * @param {string} [linkFnNameDecl],
884 * @return {string}965 * @return {string}
885 */966 */
886 function typeValueName(typeValue, wantHtml, wantLink, fnDecl, linkFnNameDecl) {967 function typeValueName(typeValue, wantHtml, wantLink, fnDecl, linkFnNameDecl) {
887968
888 if ("int" in typeValue) {969 if ("int" in typeValue) {
889 return typeValue.int.value;970 return "" + typeValue.int.value;
890 }971 }
891 if ("call" in typeValue) {972 if ("call" in typeValue) {
892 var result = "";973 var result = "";
...@@ -963,38 +1044,51 @@ var zigAnalysis;...@@ -963,38 +1044,51 @@ var zigAnalysis;
963 }1044 }
964 }1045 }
9651046
1047 /**
1048 * @param {WalkResult} typeRef
1049 * @param {string} paramName
1050 */
966 function shouldSkipParamName(typeRef, paramName) {1051 function shouldSkipParamName(typeRef, paramName) {
967 var resolvedTypeRef = resolveValue(typeRef);1052 var resolvedTypeRef = resolveValue(typeRef);
968 if ("type" in resolvedTypeRef) {1053 if ("type" in resolvedTypeRef) {
969 var typeObj = zigAnalysis.types[resolvedTypeRef.type];1054 var typeObj = zigAnalysis.types[resolvedTypeRef.type];
970 if (typeObj.kind === typeKinds.Pointer &&1055 if (typeObj.kind === typeKinds.Pointer){
971 getPtrSize(typeObj) === pointerSizeEnum.One) {1056 let ptrObj = /** @type {PointerType} */(typeObj);
972 const value = resolveValue(typeObj.child);1057 if (getPtrSize(ptrObj) === pointerSizeEnum.One) {
973 return typeValueName(value, false, true).toLowerCase() === paramName;1058 const value = resolveValue(ptrObj.child);
1059 return typeValueName(value, false, true).toLowerCase() === paramName;
1060 }
974 }1061 }
975 }1062 }
976 return false;1063 return false;
977 }1064 }
9781065
1066 /** @param {PointerType} typeObj */
979 function getPtrSize(typeObj) {1067 function getPtrSize(typeObj) {
980 return (typeObj.len == null) ? pointerSizeEnum.One : typeObj.len;1068 return (typeObj.size == null) ? pointerSizeEnum.One : typeObj.size;
981 }1069 }
9821070
983 function getCallHtml(fnDecl, callIndex) {1071 // function getCallHtml(fnDecl, callIndex) {
984 var callObj = zigAnalysis.calls[callIndex];1072 // var callObj = zigAnalysis.calls[callIndex];
9851073
986 // TODO make these links work1074 // // TODO make these links work
987 //var html = '<a href="' + navLinkCall(callObj) + '">' + escapeHtml(fnDecl.name) + '</a>(';1075 // //var html = '<a href="' + navLinkCall(callObj) + '">' + escapeHtml(fnDecl.name) + '</a>(';
988 var html = escapeHtml(fnDecl.name) + '(';1076 // var html = escapeHtml(fnDecl.name) + '(';
989 for (var arg_i = 0; arg_i < callObj.args.length; arg_i += 1) {1077 // for (var arg_i = 0; arg_i < callObj.args.length; arg_i += 1) {
990 if (arg_i !== 0) html += ', ';1078 // if (arg_i !== 0) html += ', ';
991 var argObj = callObj.args[arg_i];1079 // var argObj = callObj.args[arg_i];
992 html += getValueText(argObj, argObj.value, true, true);1080 // html += getValueText(argObj, argObj.value, true, true);
993 }1081 // }
994 html += ')';1082 // html += ')';
995 return html;1083 // return html;
996 }1084 // }
9971085
1086 /**
1087 * @param {WalkResult} typeRef
1088 * @param {any} value
1089 * @param {boolean} wantHtml
1090 * @param {boolean} wantLink
1091 */
998 function getValueText(typeRef, value, wantHtml, wantLink) {1092 function getValueText(typeRef, value, wantHtml, wantLink) {
999 var resolvedTypeRef = resolveValue(typeRef);1093 var resolvedTypeRef = resolveValue(typeRef);
1000 if ("comptimeExpr" in resolvedTypeRef) {1094 if ("comptimeExpr" in resolvedTypeRef) {
...@@ -1004,10 +1098,10 @@ var zigAnalysis;...@@ -1004,10 +1098,10 @@ var zigAnalysis;
1004 var typeObj = zigAnalysis.types[typeRef.type];1098 var typeObj = zigAnalysis.types[typeRef.type];
1005 switch (typeObj.kind) {1099 switch (typeObj.kind) {
1006 case typeKinds.Type:1100 case typeKinds.Type:
1007 return typeIndexName(value, wantHtml, wantLink);1101 return typeValueName(value, wantHtml, wantLink);
1008 case typeKinds.Fn:1102 case typeKinds.Fn:
1009 var fnObj = zigAnalysis.fns[value];1103 var fnObj = zigAnalysis.fns[value];
1010 return typeValueName(fnObj, wantHtml, wantLink);1104 return typeName(fnObj, wantHtml, wantLink);
1011 case typeKinds.Int:1105 case typeKinds.Int:
1012 if (wantHtml) {1106 if (wantHtml) {
1013 return '<span class="tok-number">' + value + '</span>';1107 return '<span class="tok-number">' + value + '</span>';
...@@ -1023,29 +1117,34 @@ var zigAnalysis;...@@ -1023,29 +1117,34 @@ var zigAnalysis;
1023 * @param {Type} typeObj,1117 * @param {Type} typeObj,
1024 * @param {boolean} wantHtml,1118 * @param {boolean} wantHtml,
1025 * @param {boolean} wantSubLink,1119 * @param {boolean} wantSubLink,
1026 * @param {number} [fnDecl],1120 * @param {Decl | null} [fnDecl],
1027 * @param {string} [linkFnNameDecl],1121 * @param {string} [linkFnNameDecl],
1028 * @return {string}1122 * @return {string}
1029 */1123 */
1030 function typeName(typeObj, wantHtml, wantSubLink, fnDecl, linkFnNameDecl) {1124 function typeName(typeObj, wantHtml, wantSubLink, fnDecl, linkFnNameDecl) {
1031 switch (typeObj.kind) {1125 switch (typeObj.kind) {
1032 case typeKinds.Array:1126 case typeKinds.Array:
1127 {
1128 let arrayObj = /** @type {ArrayType} */(typeObj);
1033 var name = "[";1129 var name = "[";
1034 var lenName = typeValueName(typeObj.len, wantHtml);1130 var lenName = typeValueName(arrayObj.len, wantHtml, wantSubLink);
1035 if (wantHtml) {1131 if (wantHtml) {
1036 name += '<span class="tok-number">' + lenName + '</span>';1132 name += '<span class="tok-number">' + lenName + '</span>';
1037 } else {1133 } else {
1038 name += lenName;1134 name += lenName;
1039 }1135 }
1040 name += "]";1136 name += "]";
1041 name += typeValueName(typeObj.child, wantHtml, wantSubLink, null);1137 name += typeValueName(arrayObj.child, wantHtml, wantSubLink, null);
1042 return name;1138 return name;
1139 }
1043 case typeKinds.Optional:1140 case typeKinds.Optional:
10441141
1045 return "?" + typeValueName(typeObj.child, wantHtml, wantSubLink, fnDecl, linkFnNameDecl);1142 return "?" + typeValueName(/**@type {OptionalType} */(typeObj).child, wantHtml, wantSubLink, fnDecl, linkFnNameDecl);
1046 case typeKinds.Pointer:1143 case typeKinds.Pointer:
1047 var name = "";1144 {
1048 switch (typeObj.size) {1145 let ptrObj = /** @type {PointerType} */(typeObj);
1146 var name = "";
1147 switch (ptrObj.size) {
1049 default:1148 default:
1050 console.log("TODO: implement unhandled pointer size case");1149 console.log("TODO: implement unhandled pointer size case");
1051 case pointerSizeEnum.One:1150 case pointerSizeEnum.One:
...@@ -1061,62 +1160,70 @@ var zigAnalysis;...@@ -1061,62 +1160,70 @@ var zigAnalysis;
1061 name += "[*c]";1160 name += "[*c]";
1062 break;1161 break;
1063 }1162 }
1064 if (typeObj['const']) {1163 if (ptrObj['const']) {
1065 if (wantHtml) {1164 if (wantHtml) {
1066 name += '<span class="tok-kw">const</span> ';1165 name += '<span class="tok-kw">const</span> ';
1067 } else {1166 } else {
1068 name += "const ";1167 name += "const ";
1069 }1168 }
1070 }1169 }
1071 if (typeObj['volatile']) {1170 if (ptrObj['volatile']) {
1072 if (wantHtml) {1171 if (wantHtml) {
1073 name += '<span class="tok-kw">volatile</span> ';1172 name += '<span class="tok-kw">volatile</span> ';
1074 } else {1173 } else {
1075 name += "volatile ";1174 name += "volatile ";
1076 }1175 }
1077 }1176 }
1078 if (typeObj.align != null) {1177 if (ptrObj.align != null) {
1079 if (wantHtml) {1178 if (wantHtml) {
1080 name += '<span class="tok-kw">align</span>(';1179 name += '<span class="tok-kw">align</span>(';
1081 } else {1180 } else {
1082 name += "align(";1181 name += "align(";
1083 }1182 }
1084 if (wantHtml) {1183 if (wantHtml) {
1085 name += '<span class="tok-number">' + typeObj.align + '</span>';1184 name += '<span class="tok-number">' + ptrObj.align + '</span>';
1086 } else {1185 } else {
1087 name += typeObj.align;1186 name += ptrObj.align;
1088 }1187 }
1089 if (typeObj.hostIntBytes != null) {1188 if (ptrObj.hostIntBytes != null) {
1090 name += ":";1189 name += ":";
1091 if (wantHtml) {1190 if (wantHtml) {
1092 name += '<span class="tok-number">' + typeObj.bitOffsetInHost + '</span>';1191 name += '<span class="tok-number">' + ptrObj.bitOffsetInHost + '</span>';
1093 } else {1192 } else {
1094 name += typeObj.bitOffsetInHost;1193 name += ptrObj.bitOffsetInHost;
1095 }1194 }
1096 name += ":";1195 name += ":";
1097 if (wantHtml) {1196 if (wantHtml) {
1098 name += '<span class="tok-number">' + typeObj.hostIntBytes + '</span>';1197 name += '<span class="tok-number">' + ptrObj.hostIntBytes + '</span>';
1099 } else {1198 } else {
1100 name += typeObj.hostIntBytes;1199 name += ptrObj.hostIntBytes;
1101 }1200 }
1102 }1201 }
1103 name += ") ";1202 name += ") ";
1104 }1203 }
1105 name += typeValueName(typeObj.child, wantHtml, wantSubLink, null);1204 name += typeValueName(ptrObj.child, wantHtml, wantSubLink, null);
1106 return name;1205 return name;
1206 }
1107 case typeKinds.Float:1207 case typeKinds.Float:
1208 {
1209 let floatObj = /** @type {NumberType} */ (typeObj);
1210
1108 if (wantHtml) {1211 if (wantHtml) {
1109 return '<span class="tok-type">f' + typeObj.bits + '</span>';1212 return '<span class="tok-type">' + floatObj.name + '</span>';
1110 } else {1213 } else {
1111 return "f" + typeObj.bits;1214 return floatObj.name;
1112 }1215 }
1216 }
1113 case typeKinds.Int:1217 case typeKinds.Int:
1114 var name = typeObj.name;1218 {
1219 let intObj = /** @type {NumberType} */(typeObj);
1220 var name = intObj.name;
1115 if (wantHtml) {1221 if (wantHtml) {
1116 return '<span class="tok-type">' + name + '</span>';1222 return '<span class="tok-type">' + name + '</span>';
1117 } else {1223 } else {
1118 return name;1224 return name;
1119 }1225 }
1226 }
1120 case typeKinds.ComptimeInt:1227 case typeKinds.ComptimeInt:
1121 if (wantHtml) {1228 if (wantHtml) {
1122 return '<span class="tok-type">comptime_int</span>';1229 return '<span class="tok-type">comptime_int</span>';
...@@ -1160,29 +1267,41 @@ var zigAnalysis;...@@ -1160,29 +1267,41 @@ var zigAnalysis;
1160 return "noreturn";1267 return "noreturn";
1161 }1268 }
1162 case typeKinds.ErrorSet:1269 case typeKinds.ErrorSet:
1163 if (typeObj.errors == null) {1270 {
1271 let errSetObj = /** @type {ErrSetType} */(typeObj);
1272 if (errSetObj.fields == null) {
1164 if (wantHtml) {1273 if (wantHtml) {
1165 return '<span class="tok-type">anyerror</span>';1274 return '<span class="tok-type">anyerror</span>';
1166 } else {1275 } else {
1167 return "anyerror";1276 return "anyerror";
1168 }1277 }
1169 } else {1278 } else {
1170 if (wantHtml) {1279 throw "TODO";
1171 return escapeHtml(typeObj.name);1280 // if (wantHtml) {
1172 } else {1281 // return escapeHtml(typeObj.name);
1173 return typeObj.name;1282 // } else {
1174 }1283 // return typeObj.name;
1284 // }
1175 }1285 }
1286 }
1176 case typeKinds.ErrorUnion:1287 case typeKinds.ErrorUnion:
1177 var errSetTypeObj = zigAnalysis.types[typeObj.err];1288 {
1178 var payloadHtml = typeIndexName(typeObj.payload, wantHtml, wantSubLink, null);1289 throw "TODO";
1179 if (fnDecl != null && errSetTypeObj.fn === fnDecl.value) {1290 // TODO: implement error union printing assuming that both
1180 // function index parameter supplied and this is the inferred error set of it1291 // payload and error union are walk results!
1181 return "!" + payloadHtml;1292 // let errUnionObj = /** @type {ErrUnionType} */(typeObj);
1182 } else {1293 // var errSetTypeObj = /** @type {ErrSetType} */ (zigAnalysis.types[errUnionObj.err]);
1183 return typeIndexName(typeObj.err, wantHtml, wantSubLink, null) + "!" + payloadHtml;1294 // var payloadHtml = typeValueName(errUnionObj.payload, wantHtml, wantSubLink, null);
1184 }1295 // if (fnDecl != null && errSetTypeObj.fn === fnDecl.value.type) {
1296 // // function index parameter supplied and this is the inferred error set of it
1297 // return "!" + payloadHtml;
1298 // } else {
1299 // return typeValueName(errUnionObj.err, wantHtml, wantSubLink, null) + "!" + payloadHtml;
1300 // }
1301 }
1185 case typeKinds.Fn:1302 case typeKinds.Fn:
1303 {
1304 let fnObj = /** @type {Fn} */(typeObj);
1186 var payloadHtml = "";1305 var payloadHtml = "";
1187 if (wantHtml) {1306 if (wantHtml) {
1188 payloadHtml += '<span class="tok-kw">fn</span>';1307 payloadHtml += '<span class="tok-kw">fn</span>';
...@@ -1200,19 +1319,19 @@ var zigAnalysis;...@@ -1200,19 +1319,19 @@ var zigAnalysis;
1200 payloadHtml += 'fn'1319 payloadHtml += 'fn'
1201 }1320 }
1202 payloadHtml += '(';1321 payloadHtml += '(';
1203 if (typeObj.params) {1322 if (fnObj.params) {
1204 var fields = null;1323 var fields = null;
1205 var isVarArgs = false;1324 var isVarArgs = false;
1206 var fnNode = zigAnalysis.astNodes[typeObj.src];1325 var fnNode = zigAnalysis.astNodes[fnObj.src];
1207 fields = fnNode.fields;1326 fields = fnNode.fields;
1208 isVarArgs = fnNode.varArgs;1327 isVarArgs = fnNode.varArgs;
12091328
1210 for (var i = 0; i < typeObj.params.length; i += 1) {1329 for (var i = 0; i < fnObj.params.length; i += 1) {
1211 if (i != 0) {1330 if (i != 0) {
1212 payloadHtml += ', ';1331 payloadHtml += ', ';
1213 }1332 }
12141333
1215 var value = typeObj.params[i];1334 var value = fnObj.params[i];
1216 var paramValue = resolveValue(value);1335 var paramValue = resolveValue(value);
1217 var isCte = "comptimeExpr" in paramValue;1336 var isCte = "comptimeExpr" in paramValue;
12181337
...@@ -1249,7 +1368,7 @@ var zigAnalysis;...@@ -1249,7 +1368,7 @@ var zigAnalysis;
1249 }1368 }
1250 }1369 }
12511370
1252 if (isVarArgs && i === typeObj.params.length - 1) {1371 if (isVarArgs && i === fnObj.params.length - 1) {
1253 payloadHtml += '...';1372 payloadHtml += '...';
1254 } else if ("refPath" in value) {1373 } else if ("refPath" in value) {
1255 payloadHtml += '<a href="">';1374 payloadHtml += '<a href="">';
...@@ -1257,7 +1376,7 @@ var zigAnalysis;...@@ -1257,7 +1376,7 @@ var zigAnalysis;
1257 payloadHtml += '</a>';1376 payloadHtml += '</a>';
12581377
1259 } else if ("type" in value) {1378 } else if ("type" in value) {
1260 var name = typeValueName(value, false);1379 var name = typeValueName(value, wantHtml, wantSubLink, fnDecl, linkFnNameDecl);
1261 payloadHtml += '<span class="tok-kw">' + escapeHtml(name) + '</span>';1380 payloadHtml += '<span class="tok-kw">' + escapeHtml(name) + '</span>';
1262 } else if ("comptimeExpr" in value) {1381 } else if ("comptimeExpr" in value) {
1263 payloadHtml += '<span class="tok-kw">[ComptimeExpr]</span>';1382 payloadHtml += '<span class="tok-kw">[ComptimeExpr]</span>';
...@@ -1270,23 +1389,26 @@ var zigAnalysis;...@@ -1270,23 +1389,26 @@ var zigAnalysis;
1270 }1389 }
12711390
1272 payloadHtml += ') ';1391 payloadHtml += ') ';
1273 if (typeObj.ret != null) {1392 if (fnObj.ret != null) {
1274 payloadHtml += typeValueName(typeObj.ret, wantHtml, wantSubLink, fnDecl);1393 payloadHtml += typeValueName(fnObj.ret, wantHtml, wantSubLink, fnDecl);
1275 } else if (wantHtml) {1394 } else if (wantHtml) {
1276 payloadHtml += '<span class="tok-kw">anytype</span>';1395 payloadHtml += '<span class="tok-kw">anytype</span>';
1277 } else {1396 } else {
1278 payloadHtml += 'anytype';1397 payloadHtml += 'anytype';
1279 }1398 }
1280 return payloadHtml;1399 return payloadHtml;
1400 }
1281 default:1401 default:
1282 if (wantHtml) {1402 throw "TODO";
1283 return escapeHtml(typeObj.name);1403 // if (wantHtml) {
1284 } else {1404 // return escapeHtml(typeObj.name);
1285 return typeObj.name;1405 // } else {
1286 }1406 // return typeObj.name;
1407 // }
1287 }1408 }
1288 }1409 }
12891410
1411 /** @param {Type} typeObj */
1290 function renderType(typeObj) {1412 function renderType(typeObj) {
1291 var name;1413 var name;
1292 if (rootIsStd && typeObj === zigAnalysis.types[zigAnalysis.packages[zigAnalysis.rootPkg].main]) {1414 if (rootIsStd && typeObj === zigAnalysis.types[zigAnalysis.packages[zigAnalysis.rootPkg].main]) {
...@@ -1299,32 +1421,30 @@ var zigAnalysis;...@@ -1299,32 +1421,30 @@ var zigAnalysis;
1299 domHdrName.classList.remove("hidden");1421 domHdrName.classList.remove("hidden");
1300 }1422 }
1301 if (typeObj.kind == typeKinds.ErrorSet) {1423 if (typeObj.kind == typeKinds.ErrorSet) {
1302 renderErrorSet(typeObj);1424 renderErrorSet(/** @type {ErrSetType} */(typeObj));
1303 }1425 }
1304 }1426 }
13051427
1428 /** @param {ErrSetType} errSetType */
1306 function renderErrorSet(errSetType) {1429 function renderErrorSet(errSetType) {
1307 if (errSetType.errors == null) {1430 if (errSetType.fields == null) {
1308 domFnErrorsAnyError.classList.remove("hidden");1431 domFnErrorsAnyError.classList.remove("hidden");
1309 } else {1432 } else {
1310 var errorList = [];1433 var errorList = [];
1311 for (var i = 0; i < errSetType.errors.length; i += 1) {1434 for (var i = 0; i < errSetType.fields.length; i += 1) {
1312 var errObj = zigAnalysis.errors[errSetType.errors[i]];1435 var errObj = errSetType.fields[i];
1313 var srcObj = zigAnalysis.astNodes[errObj.src];1436 //var srcObj = zigAnalysis.astNodes[errObj.src];
1314 errorList.push({1437 errorList.push(errObj);
1315 err: errObj,
1316 docs: srcObj.docs,
1317 });
1318 }1438 }
1319 errorList.sort(function(a, b) {1439 errorList.sort(function(a, b) {
1320 return operatorCompare(a.err.name.toLowerCase(), b.err.name.toLowerCase());1440 return operatorCompare(a.name.toLowerCase(), b.name.toLowerCase());
1321 });1441 });
13221442
1323 resizeDomListDl(domListFnErrors, errorList.length);1443 resizeDomListDl(domListFnErrors, errorList.length);
1324 for (var i = 0; i < errorList.length; i += 1) {1444 for (var i = 0; i < errorList.length; i += 1) {
1325 var nameTdDom = domListFnErrors.children[i * 2 + 0];1445 var nameTdDom = domListFnErrors.children[i * 2 + 0];
1326 var descTdDom = domListFnErrors.children[i * 2 + 1];1446 var descTdDom = domListFnErrors.children[i * 2 + 1];
1327 nameTdDom.textContent = errorList[i].err.name;1447 nameTdDom.textContent = errorList[i].name;
1328 var docs = errorList[i].docs;1448 var docs = errorList[i].docs;
1329 if (docs != null) {1449 if (docs != null) {
1330 descTdDom.innerHTML = markdown(docs);1450 descTdDom.innerHTML = markdown(docs);
...@@ -1517,7 +1637,7 @@ var zigAnalysis;...@@ -1517,7 +1637,7 @@ var zigAnalysis;
1517 let fDecl = resolveValue(c.func);1637 let fDecl = resolveValue(c.func);
1518 if ("type" in fDecl) {1638 if ("type" in fDecl) {
1519 console.assert("type" in fDecl);1639 console.assert("type" in fDecl);
1520 let fType = zigAnalysis.types[fDecl.type];1640 let fType = /** @type {Fn} */(zigAnalysis.types[fDecl.type]);
1521 console.assert("type" in fType.ret);1641 console.assert("type" in fType.ret);
1522 if (fType.ret.type === typeTypeId) {1642 if (fType.ret.type === typeTypeId) {
1523 typesList.push(decl);1643 typesList.push(decl);
...@@ -1671,7 +1791,7 @@ var zigAnalysis;...@@ -1671,7 +1791,7 @@ var zigAnalysis;
1671 } else {1791 } else {
1672 var field = container.fields[i];1792 var field = container.fields[i];
1673 html += ": ";1793 html += ": ";
1674 var name = typeValueName(field);1794 var name = typeValueName(field, false, false);
1675 html += '<span class="tok-kw">'+ name +'</span>';1795 html += '<span class="tok-kw">'+ name +'</span>';
1676 }1796 }
16771797
src/Autodoc.zig+1
...@@ -409,6 +409,7 @@ const DocData = struct {...@@ -409,6 +409,7 @@ const DocData = struct {
409 ErrorSet: struct {409 ErrorSet: struct {
410 name: []const u8,410 name: []const u8,
411 fields: []const Field,411 fields: []const Field,
412 // TODO: fn field for inferred error sets?
412 },413 },
413 Enum: struct {414 Enum: struct {
414 name: []const u8,415 name: []const u8,