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 @@
3333*/
3434
3535/**
36 * @typedef {
37 | { void: {} }
38 | { unreachable: {} }
39 | { anytype: {} }
40 | { type: number }
41 | { comptimeExpr: number }
42 | { call: number }
43 | { int: { typeRef: WalkResult; value: number } }
44 | { float: { typeRef: WalkResult; value: number } }
45 | { bool: boolean }
46 | { undefined: WalkResult }
47 | { null: WalkResult }
48 | { typeOf: WalkResult }
49 | { compileError: string }
50 | { string: string }
51 | { struct: Struct }
52 | { refPath: WalkResult[] }
53 | { array: ZigArray }
54 | { enumLiteral: string }
55 } WalkResult
36 * @typedef {{
37 void: {},
38 unreachable: {},
39 anytype: {},
40 type: number,
41 comptimeExpr: number,
42 call: number,
43 int: { typeRef: WalkResult; value: number },
44 float: { typeRef: WalkResult; value: number },
45 bool: boolean,
46 undefined: WalkResult,
47 null: WalkResult,
48 typeOf: WalkResult,
49 compileError: string,
50 string: string,
51 struct: Struct,
52 refPath: WalkResult[],
53 declRef: number,
54 array: ZigArray,
55 enumLiteral: string,
56 }} WalkResult
5657*/
5758
5859/**
......@@ -76,16 +77,70 @@
7677 }} Fn
7778*/
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
80134/**
81135 * @typedef {
82 | { kind: number, name: string } // Type, Void, Bool, NoReturn, Int, Float, ComptimeExpr, ComptimeFloat, ComptimeInt, Undefined, Null, ErrorUnion, BoundFn, Opaque, Frame, AnyFrame, Vector, EnumLiteral
83 | { kind: number, name: string; child: WalkResult } // Optional
84 | { kind: number, len: WalkResult; child: WalkResult } // Array
85 | { kind: number, name: string; fields: { name: string; docs: string }[] } // ErrorSet
86 | { kind: number, size: "One" | "Many" | "Slice" | "C"; child: WalkResult } // Pointer
136 | OptionalType
137 | ArrayType
138 | PointerType
87139 | ContainerType
88140 | Fn
141 | ErrSetType
142 | ErrUnionType
143 | NumberType
89144 } Type
90145*/
91146
......@@ -107,6 +162,8 @@
107162 docs?: string,
108163 fields?: number[],
109164 comptime: boolean,
165 noalias: boolean,
166 varArgs: boolean,
110167 }} AstNode
111168*/
112169
......@@ -117,7 +174,7 @@
117174 src: number,
118175 value: WalkResult,
119176 decltest?: number,
120 isTest: bool,
177 isTest: boolean,
121178 }} Decl
122179*/
123180
......@@ -223,7 +280,7 @@ var zigAnalysis;
223280 var domSectSearchNoResults = /** @type HTMLElement */(document.getElementById("sectSearchNoResults"));
224281 var domSectInfo = /** @type HTMLElement */(document.getElementById("sectInfo"));
225282 var domTdTarget = /** @type HTMLElement */(document.getElementById("tdTarget"));
226 var domPrivDeclsBox = /** @type HTMLElement */(document.getElementById("privDeclsBox"));
283 var domPrivDeclsBox = /** @type HTMLCheckboxElement */(document.getElementById("privDeclsBox"));
227284 var domTdZigVer = /** @type HTMLElement */(document.getElementById("tdZigVer"));
228285 var domHdrName = /** @type HTMLElement */(document.getElementById("hdrName"));
229286 var domHelpModal = /** @type HTMLElement */(document.getElementById("helpDialog"));
......@@ -252,7 +309,7 @@ var zigAnalysis;
252309 var canonTypeDecls = null; // lazy; use getCanonTypeDecl
253310
254311 /** @typedef {{
255 * showPrivDecls: bool,
312 * showPrivDecls: boolean,
256313 * pkgNames: string[],
257314 * pkgObjs: Package[],
258315 * declNames: string[],
......@@ -598,6 +655,7 @@ var zigAnalysis;
598655 return typeObj.generic;
599656 }
600657
658 /** @param {Decl} fnDecl */
601659 function renderFn(fnDecl) {
602660 var value = resolveValue(fnDecl.value);
603661 console.assert("type" in value);
......@@ -622,31 +680,32 @@ var zigAnalysis;
622680 errSetTypeIndex = retType.err;
623681 }
624682 if (errSetTypeIndex != null) {
625 var errSetType = zigAnalysis.types[errSetTypeIndex];
683 var errSetType = /** @type {ErrSetType} */(zigAnalysis.types[errSetTypeIndex]);
626684 renderErrorSet(errSetType);
627685 }
628686
629687 var protoSrcIndex = fnDecl.src;
630688 if (typeIsGenericFn(value.type)) {
631 var instantiations = nodesToFnsMap[protoSrcIndex];
632 var calls = nodesToCallsMap[protoSrcIndex];
633 if (instantiations == null && calls == null) {
634 domFnNoExamples.classList.remove("hidden");
635 } else if (calls != null) {
636 // if (fnObj.combined === undefined) fnObj.combined = allCompTimeFnCallsResult(calls);
637 if (fnObj.combined != null) renderContainer(fnObj.combined);
638
639 resizeDomList(domListFnExamples, calls.length, '<li></li>');
640
641 for (var callI = 0; callI < calls.length; callI += 1) {
642 var liDom = domListFnExamples.children[callI];
643 liDom.innerHTML = getCallHtml(fnDecl, calls[callI]);
644 }
645
646 domFnExamples.classList.remove("hidden");
647 } else if (instantiations != null) {
648 // TODO
649 }
689 throw "TODO";
690 // var instantiations = nodesToFnsMap[protoSrcIndex];
691 // var calls = nodesToCallsMap[protoSrcIndex];
692 // if (instantiations == null && calls == null) {
693 // domFnNoExamples.classList.remove("hidden");
694 // } else if (calls != null) {
695 // // if (fnObj.combined === undefined) fnObj.combined = allCompTimeFnCallsResult(calls);
696 // if (fnObj.combined != null) renderContainer(fnObj.combined);
697
698 // resizeDomList(domListFnExamples, calls.length, '<li></li>');
699
700 // for (var callI = 0; callI < calls.length; callI += 1) {
701 // var liDom = domListFnExamples.children[callI];
702 // liDom.innerHTML = getCallHtml(fnDecl, calls[callI]);
703 // }
704
705 // domFnExamples.classList.remove("hidden");
706 // } else if (instantiations != null) {
707 // // TODO
708 // }
650709 } else {
651710
652711 domFnExamples.classList.add("hidden");
......@@ -664,11 +723,15 @@ var zigAnalysis;
664723 domFnProto.classList.remove("hidden");
665724 }
666725
726 /**
727 * @param {Decl} fnDecl
728 * @param {Fn} typeObj
729 */
667730 function renderFnParamDocs(fnDecl, typeObj) {
668731 var docCount = 0;
669732
670733 var fnNode = zigAnalysis.astNodes[fnDecl.src];
671 var fields = fnNode.fields;
734 var fields = /** @type {number[]} */(fnNode.fields);
672735 var isVarArgs = fnNode.varArgs;
673736
674737 for (var i = 0; i < fields.length; i += 1) {
......@@ -696,11 +759,11 @@ var zigAnalysis;
696759
697760
698761 var value = typeObj.params[i];
699 var html = '<pre>' + escapeHtml(fieldNode.name) + ": ";
762 var html = '<pre>' + escapeHtml(/** @type {string} */(fieldNode.name)) + ": ";
700763 if (isVarArgs && i === typeObj.params.length - 1) {
701764 html += '...';
702765 } else {
703 var name = typeValueName(value);
766 var name = typeValueName(value, false, false);
704767 html += '<span class="tok-kw">' + name + '</span>';
705768 }
706769
......@@ -720,7 +783,7 @@ var zigAnalysis;
720783 resizeDomList(domListNav, len, '<li><a href="#"></a></li>');
721784 var list = [];
722785 var hrefPkgNames = [];
723 var hrefDeclNames = [];
786 var hrefDeclNames = /** @type {string[]} */([]);
724787 for (var i = 0; i < curNav.pkgNames.length; i += 1) {
725788 hrefPkgNames.push(curNav.pkgNames[i]);
726789 list.push({
......@@ -753,7 +816,7 @@ var zigAnalysis;
753816
754817 function renderInfo() {
755818 domTdZigVer.textContent = zigAnalysis.params.zigVersion;
756 domTdTarget.textContent = zigAnalysis.params.builds[0].target;
819 //domTdTarget.textContent = zigAnalysis.params.builds[0].target;
757820
758821 domSectInfo.classList.remove("hidden");
759822 }
......@@ -809,6 +872,12 @@ var zigAnalysis;
809872 }
810873 }
811874
875 /**
876 * @param {string[]} pkgNames
877 * @param {string[]} declNames
878 * @param {string} [callName]
879 */
880
812881 function navLink(pkgNames, declNames, callName) {
813882 let base = '#';
814883 if (curNav.showPrivDecls) {
......@@ -826,23 +895,26 @@ var zigAnalysis;
826895 }
827896 }
828897
898 /** @param {number} pkgIndex */
829899 function navLinkPkg(pkgIndex) {
830900 return navLink(canonPkgPaths[pkgIndex], []);
831901 }
832902
903 /** @param {string} childName */
833904 function navLinkDecl(childName) {
834905 return navLink(curNav.pkgNames, curNav.declNames.concat([childName]));
835906 }
836907
908 /** @param {Call} callObj */
837909 function navLinkCall(callObj) {
838910 var declNamesCopy = curNav.declNames.concat([]);
839 var callName = declNamesCopy.pop();
911 var callName = /** @type {string} */(declNamesCopy.pop());
840912
841913 callName += '(';
842914 for (var arg_i = 0; arg_i < callObj.args.length; arg_i += 1) {
843915 if (arg_i !== 0) callName += ',';
844916 var argObj = callObj.args[arg_i];
845 callName += getValueText(argObj.type, argObj.value, false, false);
917 callName += getValueText(argObj, argObj, false, false);
846918 }
847919 callName += ')';
848920
......@@ -850,6 +922,10 @@ var zigAnalysis;
850922 return navLink(curNav.pkgNames, declNamesCopy);
851923 }
852924
925 /**
926 * @param {any} dlDom
927 * @param {number} desiredLen
928 */
853929 function resizeDomListDl(dlDom, desiredLen) {
854930 // add the missing dom entries
855931 var i, ev;
......@@ -863,6 +939,11 @@ var zigAnalysis;
863939 }
864940 }
865941
942 /**
943 * @param {any} listDom
944 * @param {number} desiredLen
945 * @param {string} templateHtml
946 */
866947 function resizeDomList(listDom, desiredLen, templateHtml) {
867948 // add the missing dom entries
868949 var i, ev;
......@@ -879,14 +960,14 @@ var zigAnalysis;
879960 * @param {WalkResult} typeValue,
880961 * @param {boolean} wantHtml,
881962 * @param {boolean} wantLink,
882 * @param {number} [fnDecl],
963 * @param {Decl | null} [fnDecl],
883964 * @param {string} [linkFnNameDecl],
884965 * @return {string}
885966 */
886967 function typeValueName(typeValue, wantHtml, wantLink, fnDecl, linkFnNameDecl) {
887968
888969 if ("int" in typeValue) {
889 return typeValue.int.value;
970 return "" + typeValue.int.value;
890971 }
891972 if ("call" in typeValue) {
892973 var result = "";
......@@ -963,38 +1044,51 @@ var zigAnalysis;
9631044 }
9641045 }
9651046
1047 /**
1048 * @param {WalkResult} typeRef
1049 * @param {string} paramName
1050 */
9661051 function shouldSkipParamName(typeRef, paramName) {
9671052 var resolvedTypeRef = resolveValue(typeRef);
9681053 if ("type" in resolvedTypeRef) {
9691054 var typeObj = zigAnalysis.types[resolvedTypeRef.type];
970 if (typeObj.kind === typeKinds.Pointer &&
971 getPtrSize(typeObj) === pointerSizeEnum.One) {
972 const value = resolveValue(typeObj.child);
973 return typeValueName(value, false, true).toLowerCase() === paramName;
1055 if (typeObj.kind === typeKinds.Pointer){
1056 let ptrObj = /** @type {PointerType} */(typeObj);
1057 if (getPtrSize(ptrObj) === pointerSizeEnum.One) {
1058 const value = resolveValue(ptrObj.child);
1059 return typeValueName(value, false, true).toLowerCase() === paramName;
1060 }
9741061 }
9751062 }
9761063 return false;
9771064 }
9781065
1066 /** @param {PointerType} typeObj */
9791067 function getPtrSize(typeObj) {
980 return (typeObj.len == null) ? pointerSizeEnum.One : typeObj.len;
1068 return (typeObj.size == null) ? pointerSizeEnum.One : typeObj.size;
9811069 }
9821070
983 function getCallHtml(fnDecl, callIndex) {
984 var callObj = zigAnalysis.calls[callIndex];
985
986 // TODO make these links work
987 //var html = '<a href="' + navLinkCall(callObj) + '">' + escapeHtml(fnDecl.name) + '</a>(';
988 var html = escapeHtml(fnDecl.name) + '(';
989 for (var arg_i = 0; arg_i < callObj.args.length; arg_i += 1) {
990 if (arg_i !== 0) html += ', ';
991 var argObj = callObj.args[arg_i];
992 html += getValueText(argObj, argObj.value, true, true);
993 }
994 html += ')';
995 return html;
996 }
1071 // function getCallHtml(fnDecl, callIndex) {
1072 // var callObj = zigAnalysis.calls[callIndex];
1073
1074 // // TODO make these links work
1075 // //var html = '<a href="' + navLinkCall(callObj) + '">' + escapeHtml(fnDecl.name) + '</a>(';
1076 // var html = escapeHtml(fnDecl.name) + '(';
1077 // for (var arg_i = 0; arg_i < callObj.args.length; arg_i += 1) {
1078 // if (arg_i !== 0) html += ', ';
1079 // var argObj = callObj.args[arg_i];
1080 // html += getValueText(argObj, argObj.value, true, true);
1081 // }
1082 // html += ')';
1083 // return html;
1084 // }
9971085
1086 /**
1087 * @param {WalkResult} typeRef
1088 * @param {any} value
1089 * @param {boolean} wantHtml
1090 * @param {boolean} wantLink
1091 */
9981092 function getValueText(typeRef, value, wantHtml, wantLink) {
9991093 var resolvedTypeRef = resolveValue(typeRef);
10001094 if ("comptimeExpr" in resolvedTypeRef) {
......@@ -1004,10 +1098,10 @@ var zigAnalysis;
10041098 var typeObj = zigAnalysis.types[typeRef.type];
10051099 switch (typeObj.kind) {
10061100 case typeKinds.Type:
1007 return typeIndexName(value, wantHtml, wantLink);
1101 return typeValueName(value, wantHtml, wantLink);
10081102 case typeKinds.Fn:
10091103 var fnObj = zigAnalysis.fns[value];
1010 return typeValueName(fnObj, wantHtml, wantLink);
1104 return typeName(fnObj, wantHtml, wantLink);
10111105 case typeKinds.Int:
10121106 if (wantHtml) {
10131107 return '<span class="tok-number">' + value + '</span>';
......@@ -1023,29 +1117,34 @@ var zigAnalysis;
10231117 * @param {Type} typeObj,
10241118 * @param {boolean} wantHtml,
10251119 * @param {boolean} wantSubLink,
1026 * @param {number} [fnDecl],
1120 * @param {Decl | null} [fnDecl],
10271121 * @param {string} [linkFnNameDecl],
10281122 * @return {string}
10291123 */
10301124 function typeName(typeObj, wantHtml, wantSubLink, fnDecl, linkFnNameDecl) {
10311125 switch (typeObj.kind) {
10321126 case typeKinds.Array:
1127 {
1128 let arrayObj = /** @type {ArrayType} */(typeObj);
10331129 var name = "[";
1034 var lenName = typeValueName(typeObj.len, wantHtml);
1130 var lenName = typeValueName(arrayObj.len, wantHtml, wantSubLink);
10351131 if (wantHtml) {
10361132 name += '<span class="tok-number">' + lenName + '</span>';
10371133 } else {
10381134 name += lenName;
10391135 }
10401136 name += "]";
1041 name += typeValueName(typeObj.child, wantHtml, wantSubLink, null);
1137 name += typeValueName(arrayObj.child, wantHtml, wantSubLink, null);
10421138 return name;
1139 }
10431140 case typeKinds.Optional:
10441141
1045 return "?" + typeValueName(typeObj.child, wantHtml, wantSubLink, fnDecl, linkFnNameDecl);
1142 return "?" + typeValueName(/**@type {OptionalType} */(typeObj).child, wantHtml, wantSubLink, fnDecl, linkFnNameDecl);
10461143 case typeKinds.Pointer:
1047 var name = "";
1048 switch (typeObj.size) {
1144 {
1145 let ptrObj = /** @type {PointerType} */(typeObj);
1146 var name = "";
1147 switch (ptrObj.size) {
10491148 default:
10501149 console.log("TODO: implement unhandled pointer size case");
10511150 case pointerSizeEnum.One:
......@@ -1061,62 +1160,70 @@ var zigAnalysis;
10611160 name += "[*c]";
10621161 break;
10631162 }
1064 if (typeObj['const']) {
1163 if (ptrObj['const']) {
10651164 if (wantHtml) {
10661165 name += '<span class="tok-kw">const</span> ';
10671166 } else {
10681167 name += "const ";
10691168 }
10701169 }
1071 if (typeObj['volatile']) {
1170 if (ptrObj['volatile']) {
10721171 if (wantHtml) {
10731172 name += '<span class="tok-kw">volatile</span> ';
10741173 } else {
10751174 name += "volatile ";
10761175 }
10771176 }
1078 if (typeObj.align != null) {
1177 if (ptrObj.align != null) {
10791178 if (wantHtml) {
10801179 name += '<span class="tok-kw">align</span>(';
10811180 } else {
10821181 name += "align(";
10831182 }
10841183 if (wantHtml) {
1085 name += '<span class="tok-number">' + typeObj.align + '</span>';
1184 name += '<span class="tok-number">' + ptrObj.align + '</span>';
10861185 } else {
1087 name += typeObj.align;
1186 name += ptrObj.align;
10881187 }
1089 if (typeObj.hostIntBytes != null) {
1188 if (ptrObj.hostIntBytes != null) {
10901189 name += ":";
10911190 if (wantHtml) {
1092 name += '<span class="tok-number">' + typeObj.bitOffsetInHost + '</span>';
1191 name += '<span class="tok-number">' + ptrObj.bitOffsetInHost + '</span>';
10931192 } else {
1094 name += typeObj.bitOffsetInHost;
1193 name += ptrObj.bitOffsetInHost;
10951194 }
10961195 name += ":";
10971196 if (wantHtml) {
1098 name += '<span class="tok-number">' + typeObj.hostIntBytes + '</span>';
1197 name += '<span class="tok-number">' + ptrObj.hostIntBytes + '</span>';
10991198 } else {
1100 name += typeObj.hostIntBytes;
1199 name += ptrObj.hostIntBytes;
11011200 }
11021201 }
11031202 name += ") ";
11041203 }
1105 name += typeValueName(typeObj.child, wantHtml, wantSubLink, null);
1204 name += typeValueName(ptrObj.child, wantHtml, wantSubLink, null);
11061205 return name;
1206 }
11071207 case typeKinds.Float:
1208 {
1209 let floatObj = /** @type {NumberType} */ (typeObj);
1210
11081211 if (wantHtml) {
1109 return '<span class="tok-type">f' + typeObj.bits + '</span>';
1212 return '<span class="tok-type">' + floatObj.name + '</span>';
11101213 } else {
1111 return "f" + typeObj.bits;
1214 return floatObj.name;
11121215 }
1216 }
11131217 case typeKinds.Int:
1114 var name = typeObj.name;
1218 {
1219 let intObj = /** @type {NumberType} */(typeObj);
1220 var name = intObj.name;
11151221 if (wantHtml) {
11161222 return '<span class="tok-type">' + name + '</span>';
11171223 } else {
11181224 return name;
11191225 }
1226 }
11201227 case typeKinds.ComptimeInt:
11211228 if (wantHtml) {
11221229 return '<span class="tok-type">comptime_int</span>';
......@@ -1160,29 +1267,41 @@ var zigAnalysis;
11601267 return "noreturn";
11611268 }
11621269 case typeKinds.ErrorSet:
1163 if (typeObj.errors == null) {
1270 {
1271 let errSetObj = /** @type {ErrSetType} */(typeObj);
1272 if (errSetObj.fields == null) {
11641273 if (wantHtml) {
11651274 return '<span class="tok-type">anyerror</span>';
11661275 } else {
11671276 return "anyerror";
11681277 }
11691278 } else {
1170 if (wantHtml) {
1171 return escapeHtml(typeObj.name);
1172 } else {
1173 return typeObj.name;
1174 }
1279 throw "TODO";
1280 // if (wantHtml) {
1281 // return escapeHtml(typeObj.name);
1282 // } else {
1283 // return typeObj.name;
1284 // }
11751285 }
1286 }
11761287 case typeKinds.ErrorUnion:
1177 var errSetTypeObj = zigAnalysis.types[typeObj.err];
1178 var payloadHtml = typeIndexName(typeObj.payload, wantHtml, wantSubLink, null);
1179 if (fnDecl != null && errSetTypeObj.fn === fnDecl.value) {
1180 // function index parameter supplied and this is the inferred error set of it
1181 return "!" + payloadHtml;
1182 } else {
1183 return typeIndexName(typeObj.err, wantHtml, wantSubLink, null) + "!" + payloadHtml;
1184 }
1288 {
1289 throw "TODO";
1290 // TODO: implement error union printing assuming that both
1291 // payload and error union are walk results!
1292 // let errUnionObj = /** @type {ErrUnionType} */(typeObj);
1293 // var errSetTypeObj = /** @type {ErrSetType} */ (zigAnalysis.types[errUnionObj.err]);
1294 // var payloadHtml = typeValueName(errUnionObj.payload, wantHtml, wantSubLink, null);
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 }
11851302 case typeKinds.Fn:
1303 {
1304 let fnObj = /** @type {Fn} */(typeObj);
11861305 var payloadHtml = "";
11871306 if (wantHtml) {
11881307 payloadHtml += '<span class="tok-kw">fn</span>';
......@@ -1200,19 +1319,19 @@ var zigAnalysis;
12001319 payloadHtml += 'fn'
12011320 }
12021321 payloadHtml += '(';
1203 if (typeObj.params) {
1322 if (fnObj.params) {
12041323 var fields = null;
12051324 var isVarArgs = false;
1206 var fnNode = zigAnalysis.astNodes[typeObj.src];
1325 var fnNode = zigAnalysis.astNodes[fnObj.src];
12071326 fields = fnNode.fields;
12081327 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) {
12111330 if (i != 0) {
12121331 payloadHtml += ', ';
12131332 }
12141333
1215 var value = typeObj.params[i];
1334 var value = fnObj.params[i];
12161335 var paramValue = resolveValue(value);
12171336 var isCte = "comptimeExpr" in paramValue;
12181337
......@@ -1249,7 +1368,7 @@ var zigAnalysis;
12491368 }
12501369 }
12511370
1252 if (isVarArgs && i === typeObj.params.length - 1) {
1371 if (isVarArgs && i === fnObj.params.length - 1) {
12531372 payloadHtml += '...';
12541373 } else if ("refPath" in value) {
12551374 payloadHtml += '<a href="">';
......@@ -1257,7 +1376,7 @@ var zigAnalysis;
12571376 payloadHtml += '</a>';
12581377
12591378 } else if ("type" in value) {
1260 var name = typeValueName(value, false);
1379 var name = typeValueName(value, wantHtml, wantSubLink, fnDecl, linkFnNameDecl);
12611380 payloadHtml += '<span class="tok-kw">' + escapeHtml(name) + '</span>';
12621381 } else if ("comptimeExpr" in value) {
12631382 payloadHtml += '<span class="tok-kw">[ComptimeExpr]</span>';
......@@ -1270,23 +1389,26 @@ var zigAnalysis;
12701389 }
12711390
12721391 payloadHtml += ') ';
1273 if (typeObj.ret != null) {
1274 payloadHtml += typeValueName(typeObj.ret, wantHtml, wantSubLink, fnDecl);
1392 if (fnObj.ret != null) {
1393 payloadHtml += typeValueName(fnObj.ret, wantHtml, wantSubLink, fnDecl);
12751394 } else if (wantHtml) {
12761395 payloadHtml += '<span class="tok-kw">anytype</span>';
12771396 } else {
12781397 payloadHtml += 'anytype';
12791398 }
12801399 return payloadHtml;
1400 }
12811401 default:
1282 if (wantHtml) {
1283 return escapeHtml(typeObj.name);
1284 } else {
1285 return typeObj.name;
1286 }
1402 throw "TODO";
1403 // if (wantHtml) {
1404 // return escapeHtml(typeObj.name);
1405 // } else {
1406 // return typeObj.name;
1407 // }
12871408 }
12881409 }
12891410
1411 /** @param {Type} typeObj */
12901412 function renderType(typeObj) {
12911413 var name;
12921414 if (rootIsStd && typeObj === zigAnalysis.types[zigAnalysis.packages[zigAnalysis.rootPkg].main]) {
......@@ -1299,32 +1421,30 @@ var zigAnalysis;
12991421 domHdrName.classList.remove("hidden");
13001422 }
13011423 if (typeObj.kind == typeKinds.ErrorSet) {
1302 renderErrorSet(typeObj);
1424 renderErrorSet(/** @type {ErrSetType} */(typeObj));
13031425 }
13041426 }
13051427
1428 /** @param {ErrSetType} errSetType */
13061429 function renderErrorSet(errSetType) {
1307 if (errSetType.errors == null) {
1430 if (errSetType.fields == null) {
13081431 domFnErrorsAnyError.classList.remove("hidden");
13091432 } else {
13101433 var errorList = [];
1311 for (var i = 0; i < errSetType.errors.length; i += 1) {
1312 var errObj = zigAnalysis.errors[errSetType.errors[i]];
1313 var srcObj = zigAnalysis.astNodes[errObj.src];
1314 errorList.push({
1315 err: errObj,
1316 docs: srcObj.docs,
1317 });
1434 for (var i = 0; i < errSetType.fields.length; i += 1) {
1435 var errObj = errSetType.fields[i];
1436 //var srcObj = zigAnalysis.astNodes[errObj.src];
1437 errorList.push(errObj);
13181438 }
13191439 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());
13211441 });
13221442
13231443 resizeDomListDl(domListFnErrors, errorList.length);
13241444 for (var i = 0; i < errorList.length; i += 1) {
13251445 var nameTdDom = domListFnErrors.children[i * 2 + 0];
13261446 var descTdDom = domListFnErrors.children[i * 2 + 1];
1327 nameTdDom.textContent = errorList[i].err.name;
1447 nameTdDom.textContent = errorList[i].name;
13281448 var docs = errorList[i].docs;
13291449 if (docs != null) {
13301450 descTdDom.innerHTML = markdown(docs);
......@@ -1517,7 +1637,7 @@ var zigAnalysis;
15171637 let fDecl = resolveValue(c.func);
15181638 if ("type" in fDecl) {
15191639 console.assert("type" in fDecl);
1520 let fType = zigAnalysis.types[fDecl.type];
1640 let fType = /** @type {Fn} */(zigAnalysis.types[fDecl.type]);
15211641 console.assert("type" in fType.ret);
15221642 if (fType.ret.type === typeTypeId) {
15231643 typesList.push(decl);
......@@ -1671,7 +1791,7 @@ var zigAnalysis;
16711791 } else {
16721792 var field = container.fields[i];
16731793 html += ": ";
1674 var name = typeValueName(field);
1794 var name = typeValueName(field, false, false);
16751795 html += '<span class="tok-kw">'+ name +'</span>';
16761796 }
16771797
src/Autodoc.zig+1
......@@ -409,6 +409,7 @@ const DocData = struct {
409409 ErrorSet: struct {
410410 name: []const u8,
411411 fields: []const Field,
412 // TODO: fn field for inferred error sets?
412413 },
413414 Enum: struct {
414415 name: []const u8,