authorgravatar for der.teufel.mail@gmail.comKrzysztof Wolicki <der.teufel.mail@gmail.com> 2023-01-25 15:28:17+01:00
committergravatar for der.teufel.mail@gmail.comKrzysztof Wolicki <der.teufel.mail@gmail.com> 2023-01-25 15:34:04+01:00
loge6cab917e15a064f5247a742e028bcb628bfc014
tree1e8f9b697a5817f5540cca8ad9841f9f6368056c
parente675af06984d0709d308e3faf60b33cadadf2bbf

autodoc: added support for tuple structs


2 files changed, 40 insertions(+), 11 deletions(-)

lib/docs/main.js+23-7
......@@ -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+17-4
......@@ -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 }