authorgravatar for kappaloris@gmail.comLoris Cro <kappaloris@gmail.com> 2022-08-16 16:52:55+02:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2022-08-16 16:52:55+02:00
log6e794938b810384323ce332cf0cf3e41ecc6c4a9
tree7bd7515a24e5eafa8c4a95332908e6e5e41ffa47
parentb3922289be1ffaf194b55face332892280981356
parent7f7d58ee895d0e29850ed1823ba91e672edc03a6
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #12374 from vesim987/autodoc-links

autodoc: links to source code

2 files changed, 23 insertions(+), 9 deletions(-)

lib/docs/main.js+17-3
...@@ -51,8 +51,10 @@ var zigAnalysis;...@@ -51,8 +51,10 @@ var zigAnalysis;
51 const domHdrName = document.getElementById("hdrName");51 const domHdrName = document.getElementById("hdrName");
52 const domHelpModal = document.getElementById("helpModal");52 const domHelpModal = document.getElementById("helpModal");
53 const domSearchPlaceholder = document.getElementById("searchPlaceholder");53 const domSearchPlaceholder = document.getElementById("searchPlaceholder");
54 const sourceFileUrlTemplate = "/src-viewer/{{file}}#L{{line}}"
54 const domLangRefLink = document.getElementById("langRefLink");55 const domLangRefLink = document.getElementById("langRefLink");
5556
57 let lineCounter = 1;
56 let searchTimer = null;58 let searchTimer = null;
57 let searchTrimResults = true;59 let searchTrimResults = true;
5860
...@@ -411,6 +413,8 @@ var zigAnalysis;...@@ -411,6 +413,8 @@ var zigAnalysis;
411 if (curNavSearch !== "") {413 if (curNavSearch !== "") {
412 return renderSearch();414 return renderSearch();
413 }415 }
416
417 lineCounter = 1;
414418
415 let rootPkg = zigAnalysis.packages[zigAnalysis.rootPkg];419 let rootPkg = zigAnalysis.packages[zigAnalysis.rootPkg];
416 let pkg = rootPkg;420 let pkg = rootPkg;
...@@ -441,6 +445,10 @@ var zigAnalysis;...@@ -441,6 +445,10 @@ var zigAnalysis;
441 }445 }
442446
443 currentType = childDecl;447 currentType = childDecl;
448 if ("src" in currentType) {
449 const ast_node = zigAnalysis.astNodes[currentType.src];
450 lineCounter += ast_node.line;
451 }
444 curNav.declObjs.push(currentType);452 curNav.declObjs.push(currentType);
445 }453 }
446454
...@@ -981,7 +989,7 @@ var zigAnalysis;...@@ -981,7 +989,7 @@ var zigAnalysis;
981 "switch(" +989 "switch(" +
982 cond +990 cond +
983 ") {" +991 ") {" +
984 '<a href="https://github.com/ziglang/zig/tree/master/lib/std/' +992 '<a href="/src-viewer/' +
985 file_name +993 file_name +
986 "#L" +994 "#L" +
987 line +995 line +
...@@ -2268,6 +2276,13 @@ var zigAnalysis;...@@ -2268,6 +2276,13 @@ var zigAnalysis;
2268 }2276 }
2269 }2277 }
2270 }2278 }
2279 function renderSourceFileLink(decl) {
2280 let srcNode = zigAnalysis.astNodes[decl.src];
2281
2282 return "<a style=\"float: right;\" href=\"" +
2283 sourceFileUrlTemplate.replace("{{file}}",
2284 zigAnalysis.files[srcNode.file]).replace("{{line}}", lineCounter + srcNode.line) + "\">[src]</a>";
2285 }
22712286
2272 function renderContainer(container) {2287 function renderContainer(container) {
2273 let typesList = [];2288 let typesList = [];
...@@ -2386,13 +2401,12 @@ var zigAnalysis;...@@ -2386,13 +2401,12 @@ var zigAnalysis;
23862401
2387 let declType = resolveValue(decl.value);2402 let declType = resolveValue(decl.value);
2388 console.assert("type" in declType.expr);2403 console.assert("type" in declType.expr);
2389
2390 tdFnCode.innerHTML = exprName(declType.expr, {2404 tdFnCode.innerHTML = exprName(declType.expr, {
2391 wantHtml: true,2405 wantHtml: true,
2392 wantLink: true,2406 wantLink: true,
2393 fnDecl: decl,2407 fnDecl: decl,
2394 linkFnNameDecl: navLinkDecl(decl.name),2408 linkFnNameDecl: navLinkDecl(decl.name),
2395 });2409 }) + renderSourceFileLink(decl);
23962410
2397 let docs = zigAnalysis.astNodes[decl.src].docs;2411 let docs = zigAnalysis.astNodes[decl.src].docs;
2398 if (docs != null) {2412 if (docs != null) {
src/Autodoc.zig+6-6
...@@ -2824,8 +2824,8 @@ fn walkDecls(...@@ -2824,8 +2824,8 @@ fn walkDecls(
2824 const ast_node_index = idx: {2824 const ast_node_index = idx: {
2825 const idx = self.ast_nodes.items.len;2825 const idx = self.ast_nodes.items.len;
2826 try self.ast_nodes.append(self.arena, .{2826 try self.ast_nodes.append(self.arena, .{
2827 .file = 0,2827 .file = self.files.getIndex(file) orelse unreachable,
2828 .line = line,2828 .line = line, // TODO: calculate absolute line
2829 .col = 0,2829 .col = 0,
2830 .docs = doc_comment,2830 .docs = doc_comment,
2831 .fields = null, // walkInstruction will fill `fields` if necessary2831 .fields = null, // walkInstruction will fill `fields` if necessary
...@@ -3902,13 +3902,13 @@ fn cteTodo(self: *Autodoc, msg: []const u8) error{OutOfMemory}!DocData.WalkResul...@@ -3902,13 +3902,13 @@ fn cteTodo(self: *Autodoc, msg: []const u8) error{OutOfMemory}!DocData.WalkResul
3902}3902}
39033903
3904fn writeFileTableToJson(map: std.AutoArrayHashMapUnmanaged(*File, usize), jsw: anytype) !void {3904fn writeFileTableToJson(map: std.AutoArrayHashMapUnmanaged(*File, usize), jsw: anytype) !void {
3905 try jsw.beginObject();3905 try jsw.beginArray();
3906 var it = map.iterator();3906 var it = map.iterator();
3907 while (it.next()) |entry| {3907 while (it.next()) |entry| {
3908 try jsw.objectField(entry.key_ptr.*.sub_file_path);3908 try jsw.arrayElem();
3909 try jsw.emitNumber(entry.value_ptr.*);3909 try jsw.emitString(entry.key_ptr.*.sub_file_path);
3910 }3910 }
3911 try jsw.endObject();3911 try jsw.endArray();
3912}3912}
39133913
3914fn writePackageTableToJson(3914fn writePackageTableToJson(