Commit a0a1178694

Maciej 'vesim' Kuliński <vesim809@pm.me>
2022-08-08 21:42:38
autodoc: links to source code
1 parent 1db99b0
Changed files (2)
lib
docs
src
lib/docs/main.js
@@ -51,6 +51,7 @@ var zigAnalysis;
   const domHdrName = document.getElementById("hdrName");
   const domHelpModal = document.getElementById("helpModal");
   const domSearchPlaceholder = document.getElementById("searchPlaceholder");
+  const sourceFileUrlTemplate = "https://github.com/ziglang/zig/blob/master/lib/std/{{file}}#L{{line}}"
 
   let searchTimer = null;
   let searchTrimResults = true;
@@ -2260,6 +2261,11 @@ var zigAnalysis;
       }
     }
   }
+  function renderSourceFileLink(decl) {
+    let srcNode = zigAnalysis.astNodes[decl.src];
+
+    return  "<a style=\"float: right;\" href=\"" + sourceFileUrlTemplate.replace("{{file}}", zigAnalysis.files[srcNode.file]).replace("{{line}}", srcNode.line) + "\">[src]</a>";
+  }
 
   function renderContainer(container) {
     let typesList = [];
@@ -2378,13 +2384,12 @@ var zigAnalysis;
 
         let declType = resolveValue(decl.value);
         console.assert("type" in declType.expr);
-
         tdFnCode.innerHTML = exprName(declType.expr, {
           wantHtml: true,
           wantLink: true,
           fnDecl: decl,
           linkFnNameDecl: navLinkDecl(decl.name),
-        });
+        }) + renderSourceFileLink(decl);
 
         let docs = zigAnalysis.astNodes[decl.src].docs;
         if (docs != null) {
src/Autodoc.zig
@@ -2808,8 +2808,8 @@ fn walkDecls(
         const ast_node_index = idx: {
             const idx = self.ast_nodes.items.len;
             try self.ast_nodes.append(self.arena, .{
-                .file = 0,
-                .line = line,
+                .file = self.files.getIndex(file) orelse unreachable,
+                .line = line, // TODO: calculate absolute line
                 .col = 0,
                 .docs = doc_comment,
                 .fields = null, // walkInstruction will fill `fields` if necessary
@@ -3886,13 +3886,13 @@ fn cteTodo(self: *Autodoc, msg: []const u8) error{OutOfMemory}!DocData.WalkResul
 }
 
 fn writeFileTableToJson(map: std.AutoArrayHashMapUnmanaged(*File, usize), jsw: anytype) !void {
-    try jsw.beginObject();
+    try jsw.beginArray();
     var it = map.iterator();
     while (it.next()) |entry| {
-        try jsw.objectField(entry.key_ptr.*.sub_file_path);
-        try jsw.emitNumber(entry.value_ptr.*);
+        try jsw.arrayElem();
+        try jsw.emitString(entry.key_ptr.*.sub_file_path);
     }
-    try jsw.endObject();
+    try jsw.endArray();
 }
 
 fn writePackageTableToJson(