Skip to content

Commit 989e771

Browse files
authored
Merge pull request #14456 from der-teufel-programming/autodoc-tuples
autodoc: added support for tuple structs
2 parents e675af0 + e6cab91 commit 989e771

File tree

2 files changed

+40
-11
lines changed

2 files changed

+40
-11
lines changed

lib/docs/main.js

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1772,9 +1772,17 @@ const NAV_MODES = {
17721772
let structObj = typeObj;
17731773
let name = "";
17741774
if (opts.wantHtml) {
1775-
name = "<span class='tok-kw'>struct</span> { ";
1775+
if (structObj.is_tuple) {
1776+
name = "<span class='tok-kw'>tuple</span> { ";
1777+
} else {
1778+
name = "<span class='tok-kw'>struct</span> { ";
1779+
}
17761780
} else {
1777-
name = "struct { ";
1781+
if (structObj.is_tuple) {
1782+
name = "tuple { ";
1783+
} else {
1784+
name = "struct { ";
1785+
}
17781786
}
17791787
if (structObj.fields.length > 1 && opts.wantHtml) {name += "</br>";}
17801788
let indent = "";
@@ -1795,10 +1803,15 @@ const NAV_MODES = {
17951803
for(let i = 0; i < structObj.fields.length; i += 1) {
17961804
let fieldNode = getAstNode(structNode.fields[i]);
17971805
let fieldName = fieldNode.name;
1798-
let html = indent + escapeHtml(fieldName);
1806+
let html = indent;
1807+
if (!structObj.is_tuple) {
1808+
html += escapeHtml(fieldName);
1809+
}
17991810

18001811
let fieldTypeExpr = structObj.fields[i];
1801-
html += ": ";
1812+
if(!structObj.is_tuple) {
1813+
html += ": ";
1814+
}
18021815

18031816
html += exprName(fieldTypeExpr, {...opts, indent: indent});
18041817

@@ -2797,7 +2810,9 @@ const NAV_MODES = {
27972810
html += ' = <span class="tok-number">' + fieldName + "</span>";
27982811
} else {
27992812
let fieldTypeExpr = container.fields[i];
2800-
html += ": ";
2813+
if(container.kind ==! typeKinds.Struct || !container.is_tuple) {
2814+
html += ": ";
2815+
}
28012816
html += exprName(fieldTypeExpr, {wantHtml:true, wantLink:true});
28022817
let tsn = typeShorthandName(fieldTypeExpr);
28032818
if (tsn) {
@@ -3945,8 +3960,9 @@ const NAV_MODES = {
39453960
privDecls: ty[3],
39463961
pubDecls: ty[4],
39473962
fields: ty[5],
3948-
line_number: ty[6],
3949-
outer_decl: ty[7],
3963+
is_tuple: ty[6],
3964+
line_number: ty[7],
3965+
outer_decl: ty[8],
39503966
};
39513967
case 10: // ComptimeExpr
39523968
case 11: // ComptimeFloat

src/Autodoc.zig

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -561,6 +561,7 @@ const DocData = struct {
561561
privDecls: []usize = &.{}, // index into decls
562562
pubDecls: []usize = &.{}, // index into decls
563563
fields: ?[]Expr = null, // (use src->fields to find names)
564+
is_tuple: bool,
564565
line_number: usize,
565566
outer_decl: usize,
566567
},
@@ -2942,6 +2943,7 @@ fn walkInstruction(
29422943
&field_type_refs,
29432944
&field_name_indexes,
29442945
extra_index,
2946+
small.is_tuple,
29452947
);
29462948

29472949
self.ast_nodes.items[self_ast_node_index].fields = field_name_indexes.items;
@@ -2953,6 +2955,7 @@ fn walkInstruction(
29532955
.privDecls = priv_decl_indexes.items,
29542956
.pubDecls = decl_indexes.items,
29552957
.fields = field_type_refs.items,
2958+
.is_tuple = small.is_tuple,
29562959
.line_number = self.ast_nodes.items[self_ast_node_index].line,
29572960
.outer_decl = type_slot_index - 1,
29582961
},
@@ -4116,6 +4119,7 @@ fn collectStructFieldInfo(
41164119
field_type_refs: *std.ArrayListUnmanaged(DocData.Expr),
41174120
field_name_indexes: *std.ArrayListUnmanaged(usize),
41184121
ei: usize,
4122+
is_tuple: bool,
41194123
) !void {
41204124
if (fields_len == 0) return;
41214125
var extra_index = ei;
@@ -4125,7 +4129,7 @@ fn collectStructFieldInfo(
41254129
const bit_bags_count = std.math.divCeil(usize, fields_len, fields_per_u32) catch unreachable;
41264130

41274131
const Field = struct {
4128-
field_name: u32,
4132+
field_name: ?u32,
41294133
doc_comment_index: u32,
41304134
type_body_len: u32 = 0,
41314135
align_body_len: u32 = 0,
@@ -4153,8 +4157,12 @@ fn collectStructFieldInfo(
41534157
const has_type_body = @truncate(u1, cur_bit_bag) != 0;
41544158
cur_bit_bag >>= 1;
41554159

4156-
const field_name = file.zir.extra[extra_index];
4157-
extra_index += 1;
4160+
const field_name: ?u32 = if (!is_tuple) blk: {
4161+
const fname = file.zir.extra[extra_index];
4162+
extra_index += 1;
4163+
break :blk fname;
4164+
} else null;
4165+
41584166
const doc_comment_index = file.zir.extra[extra_index];
41594167
extra_index += 1;
41604168

@@ -4217,8 +4225,13 @@ fn collectStructFieldInfo(
42174225
file.zir.nullTerminatedString(field.doc_comment_index)
42184226
else
42194227
null;
4228+
const field_name: []const u8 = if (field.field_name) |f_name|
4229+
file.zir.nullTerminatedString(f_name)
4230+
else
4231+
"";
4232+
42204233
try self.ast_nodes.append(self.arena, .{
4221-
.name = file.zir.nullTerminatedString(field.field_name),
4234+
.name = field_name,
42224235
.docs = doc_comment,
42234236
});
42244237
}

0 commit comments

Comments
 (0)