authorgravatar for der.teufel.mail@gmail.comKrzysztof Wolicki <der.teufel.mail@gmail.com> 2023-05-10 01:53:00+02:00
committergravatar for der.teufel.mail@gmail.comKrzysztof Wolicki <der.teufel.mail@gmail.com> 2023-05-10 01:53:00+02:00
logb7ba9aa8927ed5c04ad84902cdb6e3e8bcf0d8d3
tree49a7db405d2faaf1e9d88cb8c8553fe96169c9f1
parent52606572309f843c043123c1f2771829e45b4b5d

autodoc: Add layout to Struct and Union to properly display packed and extern;

Make rendering of types in exprName more similar to zig fmt

2 files changed, 51 insertions(+), 14 deletions(-)

lib/docs/main.js+37-14
......@@ -1844,18 +1844,26 @@ const NAV_MODES = {
18441844 case typeKinds.Struct: {
18451845 let structObj = typeObj;
18461846 let name = "";
1847 let layout = "";
1848 if (structObj.layout !== null) {
1849 switch (structObj.layout.enumLiteral) {
1850 case "Packed": {
1851 layout = "packed ";
1852 break;
1853 }
1854 case "Extern": {
1855 layout = "extern ";
1856 break;
1857 }
1858 }
1859 }
18471860 if (opts.wantHtml) {
1848 name = "<span class='tok-kw'>struct</span>";
1861 name = "<span class='tok-kw'>" + layout + "struct</span>";
18491862 } else {
1850 name = "struct";
1863 name = layout + "struct";
18511864 }
18521865 if (structObj.backing_int !== null) {
1853 if (opts.wantHtml) {
1854 name = "<span class='tok-kw'>packed</span> " + name;
1855 } else {
1856 name = "packed " + name;
1857 }
1858 name += " (" + exprName(structObj.backing_int, opts) + ")";
1866 name += "(" + exprName(structObj.backing_int, opts) + ")";
18591867 }
18601868 name += " { ";
18611869 if (structObj.field_types.length > 1 && opts.wantHtml) { name += "</br>"; }
......@@ -1912,7 +1920,7 @@ const NAV_MODES = {
19121920 name = "enum";
19131921 }
19141922 if (enumObj.tag) {
1915 name += " (" + exprName(enumObj.tag, opts) + ")";
1923 name += "(" + exprName(enumObj.tag, opts) + ")";
19161924 }
19171925 name += " { ";
19181926 let enumNode = getAstNode(enumObj.src);
......@@ -1963,16 +1971,29 @@ const NAV_MODES = {
19631971 case typeKinds.Union: {
19641972 let unionObj = typeObj;
19651973 let name = "";
1974 let layout = "";
1975 if (unionObj.layout !== null) {
1976 switch (unionObj.layout.enumLiteral) {
1977 case "Packed": {
1978 layout = "packed ";
1979 break;
1980 }
1981 case "Extern": {
1982 layout = "extern ";
1983 break;
1984 }
1985 }
1986 }
19661987 if (opts.wantHtml) {
1967 name = "<span class='tok-kw'>union</span>";
1988 name = "<span class='tok-kw'>" + layout + "union</span>";
19681989 } else {
1969 name = "union";
1990 name = layout + "union";
19701991 }
19711992 if (unionObj.auto_tag) {
19721993 if (opts.wantHtml) {
1973 name += " (<span class='tok-kw'>enum</span>";
1994 name += "(<span class='tok-kw'>enum</span>";
19741995 } else {
1975 name += " (enum";
1996 name += "(enum";
19761997 }
19771998 if (unionObj.tag) {
19781999 name += "(" + exprName(unionObj.tag, opts) + "))";
......@@ -1980,7 +2001,7 @@ const NAV_MODES = {
19802001 name += ")";
19812002 }
19822003 } else if (unionObj.tag) {
1983 name += " (" + exprName(unionObj.tag, opts) + ")";
2004 name += "(" + exprName(unionObj.tag, opts) + ")";
19842005 }
19852006 name += " { ";
19862007 if (unionObj.field_types.length > 1 && opts.wantHtml) {
......@@ -4499,6 +4520,7 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
44994520 is_tuple: ty[8],
45004521 line_number: ty[9],
45014522 parent_container: ty[10],
4523 layout: ty[11],
45024524 };
45034525 case 10: // ComptimeExpr
45044526 case 11: // ComptimeFloat
......@@ -4552,6 +4574,7 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
45524574 tag: ty[6],
45534575 auto_tag: ty[7],
45544576 parent_container: ty[8],
4577 layout: ty[9],
45554578 };
45564579 case 21: // Fn
45574580 return {
src/Autodoc.zig+14
......@@ -608,6 +608,7 @@ const DocData = struct {
608608 is_tuple: bool,
609609 line_number: usize,
610610 parent_container: ?usize, // index into `types`
611 layout: ?Expr, // if different than Auto
611612 },
612613 ComptimeExpr: struct { name: []const u8 },
613614 ComptimeFloat: struct { name: []const u8 },
......@@ -645,6 +646,7 @@ const DocData = struct {
645646 tag: ?Expr, // tag type if specified
646647 auto_enum: bool, // tag is an auto enum
647648 parent_container: ?usize, // index into `types`
649 layout: ?Expr, // if different than Auto
648650 },
649651 Fn: struct {
650652 name: []const u8,
......@@ -2613,6 +2615,11 @@ fn walkInstruction(
26132615 break :blk fields_len;
26142616 } else 0;
26152617
2618 const layout_expr: ?DocData.Expr = switch (small.layout) {
2619 .Auto => null,
2620 else => .{ .enumLiteral = @tagName(small.layout) },
2621 };
2622
26162623 var decl_indexes: std.ArrayListUnmanaged(usize) = .{};
26172624 var priv_decl_indexes: std.ArrayListUnmanaged(usize) = .{};
26182625
......@@ -2667,6 +2674,7 @@ fn walkInstruction(
26672674 .tag = tag_type,
26682675 .auto_enum = small.auto_enum_tag,
26692676 .parent_container = parent_scope.enclosing_type,
2677 .layout = layout_expr,
26702678 },
26712679 };
26722680
......@@ -2877,6 +2885,11 @@ fn walkInstruction(
28772885 }
28782886 }
28792887
2888 const layout_expr: ?DocData.Expr = switch (small.layout) {
2889 .Auto => null,
2890 else => .{ .enumLiteral = @tagName(small.layout) },
2891 };
2892
28802893 var decl_indexes: std.ArrayListUnmanaged(usize) = .{};
28812894 var priv_decl_indexes: std.ArrayListUnmanaged(usize) = .{};
28822895
......@@ -2918,6 +2931,7 @@ fn walkInstruction(
29182931 .backing_int = backing_int,
29192932 .line_number = self.ast_nodes.items[self_ast_node_index].line,
29202933 .parent_container = parent_scope.enclosing_type,
2934 .layout = layout_expr,
29212935 },
29222936 };
29232937 if (self.ref_paths_pending_on_types.get(type_slot_index)) |paths| {