diff --git a/lib/docs/index.html b/lib/docs/index.html
index fb8544d7f0..52012cad2f 100644
--- a/lib/docs/index.html
+++ b/lib/docs/index.html
@@ -640,6 +640,7 @@
diff --git a/lib/docs/main.js b/lib/docs/main.js
index 9e4197352c..48f3d38cbf 100644
--- a/lib/docs/main.js
+++ b/lib/docs/main.js
@@ -29,6 +29,7 @@ var zigAnalysis;
const domListValues = document.getElementById("listValues");
const domFnProto = document.getElementById("fnProto");
const domFnProtoCode = document.getElementById("fnProtoCode");
+ const domFnSourceLink = document.getElementById("fnSourceLink");
const domSectParams = document.getElementById("sectParams");
const domListParams = document.getElementById("listParams");
const domTldDocs = document.getElementById("tldDocs");
@@ -548,6 +549,8 @@ var zigAnalysis;
wantLink: true,
fnDecl,
});
+
+ domFnSourceLink.innerHTML = "[
src]";
let docsSource = null;
let srcNode = getAstNode(fnDecl.src);
@@ -1839,7 +1842,14 @@ var zigAnalysis;
}
case typeKinds.Fn: {
let fnObj = typeObj;
+ let fnDecl = opts.fnDecl;
+ let linkFnNameDecl = opts.linkFnNameDecl;
+ opts.fnDecl = null;
+ opts.linkFnNameDecl = null;
let payloadHtml = "";
+ if (opts.addParensIfFnSignature && fnObj.src == 0){
+ payloadHtml += "(";
+ }
if (opts.wantHtml) {
if (fnObj.is_extern) {
payloadHtml += "pub extern ";
@@ -1847,21 +1857,16 @@ var zigAnalysis;
if (fnObj.has_lib_name) {
payloadHtml += '"' + fnObj.lib_name + '" ';
}
- payloadHtml += '
fn';
- if (opts.fnDecl) {
- payloadHtml += '
';
- if (opts.linkFnNameDecl) {
+ payloadHtml += 'fn ';
+ if (fnDecl) {
+ payloadHtml += '';
+ if (linkFnNameDecl) {
payloadHtml +=
- '' +
- escapeHtml(opts.fnDecl.name) +
+ '' +
+ escapeHtml(fnDecl.name) +
"";
} else {
- payloadHtml += escapeHtml(opts.fnDecl.name);
- payloadHtml = "" +
- escapeHtml(opts.fnDecl.name) + "";
+ payloadHtml += escapeHtml(fnDecl.name);
}
payloadHtml += "";
}
@@ -1872,10 +1877,12 @@ var zigAnalysis;
if (fnObj.params) {
let fields = null;
let isVarArgs = false;
- let fnNode = getAstNode(fnObj.src);
- fields = fnNode.fields;
- isVarArgs = fnNode.varArgs;
-
+ if (fnObj.src != 0) {
+ let fnNode = getAstNode(fnObj.src);
+ fields = fnNode.fields;
+ isVarArgs = fnNode.varArgs;
+ }
+
for (let i = 0; i < fnObj.params.length; i += 1) {
if (i != 0) {
payloadHtml += ", ";
@@ -1989,10 +1996,9 @@ var zigAnalysis;
}
} else if ("type" in value) {
let name = exprName(value, {
+ ...opts,
wantHtml: false,
wantLink: false,
- fnDecl: opts.fnDecl,
- linkFnNameDecl: opts.linkFnNameDecl,
});
payloadHtml += '' + name + "";
} else if ("binOpIndex" in value) {
@@ -2032,12 +2038,19 @@ var zigAnalysis;
payloadHtml += "!";
}
if (fnObj.ret != null) {
- payloadHtml += exprName(fnObj.ret, opts);
+ payloadHtml += exprName(fnObj.ret, {
+ ...opts,
+ addParensIfFnSignature: true,
+ });
} else if (opts.wantHtml) {
payloadHtml += 'anytype';
} else {
payloadHtml += "anytype";
}
+
+ if (opts.addParensIfFnSignature && fnObj.src == 0){
+ payloadHtml += ")";
+ }
return payloadHtml;
}
// if (wantHtml) {
diff --git a/src/Autodoc.zig b/src/Autodoc.zig
index 6f7e15c4f6..fa0b64a929 100644
--- a/src/Autodoc.zig
+++ b/src/Autodoc.zig
@@ -3807,10 +3807,15 @@ fn analyzeFancyFunction(
else => null,
};
+ // if we're analyzing a funcion signature (ie without body), we
+ // actually don't have an ast_node reserved for us, but since
+ // we don't have a name, we don't need it.
+ const src = if (fn_info.body.len == 0) 0 else self_ast_node_index;
+
self.types.items[type_slot_index] = .{
.Fn = .{
.name = "todo_name func",
- .src = self_ast_node_index,
+ .src = src,
.params = param_type_refs.items,
.ret = ret_type_ref,
.generic_ret = generic_ret,
@@ -3955,11 +3960,16 @@ fn analyzeFunction(
} else break :blk ret_type_ref;
};
+ // if we're analyzing a funcion signature (ie without body), we
+ // actually don't have an ast_node reserved for us, but since
+ // we don't have a name, we don't need it.
+ const src = if (fn_info.body.len == 0) 0 else self_ast_node_index;
+
self.ast_nodes.items[self_ast_node_index].fields = param_ast_indexes.items;
self.types.items[type_slot_index] = .{
.Fn = .{
.name = "todo_name func",
- .src = self_ast_node_index,
+ .src = src,
.params = param_type_refs.items,
.ret = ret_type,
.generic_ret = generic_ret,