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 = {...@@ -1844,18 +1844,26 @@ const NAV_MODES = {
1844 case typeKinds.Struct: {1844 case typeKinds.Struct: {
1845 let structObj = typeObj;1845 let structObj = typeObj;
1846 let name = "";1846 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 }
1847 if (opts.wantHtml) {1860 if (opts.wantHtml) {
1848 name = "<span class='tok-kw'>struct</span>";1861 name = "<span class='tok-kw'>" + layout + "struct</span>";
1849 } else {1862 } else {
1850 name = "struct";1863 name = layout + "struct";
1851 }1864 }
1852 if (structObj.backing_int !== null) {1865 if (structObj.backing_int !== null) {
1853 if (opts.wantHtml) {1866 name += "(" + exprName(structObj.backing_int, opts) + ")";
1854 name = "<span class='tok-kw'>packed</span> " + name;
1855 } else {
1856 name = "packed " + name;
1857 }
1858 name += " (" + exprName(structObj.backing_int, opts) + ")";
1859 }1867 }
1860 name += " { ";1868 name += " { ";
1861 if (structObj.field_types.length > 1 && opts.wantHtml) { name += "</br>"; }1869 if (structObj.field_types.length > 1 && opts.wantHtml) { name += "</br>"; }
...@@ -1912,7 +1920,7 @@ const NAV_MODES = {...@@ -1912,7 +1920,7 @@ const NAV_MODES = {
1912 name = "enum";1920 name = "enum";
1913 }1921 }
1914 if (enumObj.tag) {1922 if (enumObj.tag) {
1915 name += " (" + exprName(enumObj.tag, opts) + ")";1923 name += "(" + exprName(enumObj.tag, opts) + ")";
1916 }1924 }
1917 name += " { ";1925 name += " { ";
1918 let enumNode = getAstNode(enumObj.src);1926 let enumNode = getAstNode(enumObj.src);
...@@ -1963,16 +1971,29 @@ const NAV_MODES = {...@@ -1963,16 +1971,29 @@ const NAV_MODES = {
1963 case typeKinds.Union: {1971 case typeKinds.Union: {
1964 let unionObj = typeObj;1972 let unionObj = typeObj;
1965 let name = "";1973 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 }
1966 if (opts.wantHtml) {1987 if (opts.wantHtml) {
1967 name = "<span class='tok-kw'>union</span>";1988 name = "<span class='tok-kw'>" + layout + "union</span>";
1968 } else {1989 } else {
1969 name = "union";1990 name = layout + "union";
1970 }1991 }
1971 if (unionObj.auto_tag) {1992 if (unionObj.auto_tag) {
1972 if (opts.wantHtml) {1993 if (opts.wantHtml) {
1973 name += " (<span class='tok-kw'>enum</span>";1994 name += "(<span class='tok-kw'>enum</span>";
1974 } else {1995 } else {
1975 name += " (enum";1996 name += "(enum";
1976 }1997 }
1977 if (unionObj.tag) {1998 if (unionObj.tag) {
1978 name += "(" + exprName(unionObj.tag, opts) + "))";1999 name += "(" + exprName(unionObj.tag, opts) + "))";
...@@ -1980,7 +2001,7 @@ const NAV_MODES = {...@@ -1980,7 +2001,7 @@ const NAV_MODES = {
1980 name += ")";2001 name += ")";
1981 }2002 }
1982 } else if (unionObj.tag) {2003 } else if (unionObj.tag) {
1983 name += " (" + exprName(unionObj.tag, opts) + ")";2004 name += "(" + exprName(unionObj.tag, opts) + ")";
1984 }2005 }
1985 name += " { ";2006 name += " { ";
1986 if (unionObj.field_types.length > 1 && opts.wantHtml) {2007 if (unionObj.field_types.length > 1 && opts.wantHtml) {
...@@ -4499,6 +4520,7 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {...@@ -4499,6 +4520,7 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
4499 is_tuple: ty[8],4520 is_tuple: ty[8],
4500 line_number: ty[9],4521 line_number: ty[9],
4501 parent_container: ty[10],4522 parent_container: ty[10],
4523 layout: ty[11],
4502 };4524 };
4503 case 10: // ComptimeExpr4525 case 10: // ComptimeExpr
4504 case 11: // ComptimeFloat4526 case 11: // ComptimeFloat
...@@ -4552,6 +4574,7 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {...@@ -4552,6 +4574,7 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
4552 tag: ty[6],4574 tag: ty[6],
4553 auto_tag: ty[7],4575 auto_tag: ty[7],
4554 parent_container: ty[8],4576 parent_container: ty[8],
4577 layout: ty[9],
4555 };4578 };
4556 case 21: // Fn4579 case 21: // Fn
4557 return {4580 return {
src/Autodoc.zig+14
...@@ -608,6 +608,7 @@ const DocData = struct {...@@ -608,6 +608,7 @@ const DocData = struct {
608 is_tuple: bool,608 is_tuple: bool,
609 line_number: usize,609 line_number: usize,
610 parent_container: ?usize, // index into `types`610 parent_container: ?usize, // index into `types`
611 layout: ?Expr, // if different than Auto
611 },612 },
612 ComptimeExpr: struct { name: []const u8 },613 ComptimeExpr: struct { name: []const u8 },
613 ComptimeFloat: struct { name: []const u8 },614 ComptimeFloat: struct { name: []const u8 },
...@@ -645,6 +646,7 @@ const DocData = struct {...@@ -645,6 +646,7 @@ const DocData = struct {
645 tag: ?Expr, // tag type if specified646 tag: ?Expr, // tag type if specified
646 auto_enum: bool, // tag is an auto enum647 auto_enum: bool, // tag is an auto enum
647 parent_container: ?usize, // index into `types`648 parent_container: ?usize, // index into `types`
649 layout: ?Expr, // if different than Auto
648 },650 },
649 Fn: struct {651 Fn: struct {
650 name: []const u8,652 name: []const u8,
...@@ -2613,6 +2615,11 @@ fn walkInstruction(...@@ -2613,6 +2615,11 @@ fn walkInstruction(
2613 break :blk fields_len;2615 break :blk fields_len;
2614 } else 0;2616 } else 0;
26152617
2618 const layout_expr: ?DocData.Expr = switch (small.layout) {
2619 .Auto => null,
2620 else => .{ .enumLiteral = @tagName(small.layout) },
2621 };
2622
2616 var decl_indexes: std.ArrayListUnmanaged(usize) = .{};2623 var decl_indexes: std.ArrayListUnmanaged(usize) = .{};
2617 var priv_decl_indexes: std.ArrayListUnmanaged(usize) = .{};2624 var priv_decl_indexes: std.ArrayListUnmanaged(usize) = .{};
26182625
...@@ -2667,6 +2674,7 @@ fn walkInstruction(...@@ -2667,6 +2674,7 @@ fn walkInstruction(
2667 .tag = tag_type,2674 .tag = tag_type,
2668 .auto_enum = small.auto_enum_tag,2675 .auto_enum = small.auto_enum_tag,
2669 .parent_container = parent_scope.enclosing_type,2676 .parent_container = parent_scope.enclosing_type,
2677 .layout = layout_expr,
2670 },2678 },
2671 };2679 };
26722680
...@@ -2877,6 +2885,11 @@ fn walkInstruction(...@@ -2877,6 +2885,11 @@ fn walkInstruction(
2877 }2885 }
2878 }2886 }
28792887
2888 const layout_expr: ?DocData.Expr = switch (small.layout) {
2889 .Auto => null,
2890 else => .{ .enumLiteral = @tagName(small.layout) },
2891 };
2892
2880 var decl_indexes: std.ArrayListUnmanaged(usize) = .{};2893 var decl_indexes: std.ArrayListUnmanaged(usize) = .{};
2881 var priv_decl_indexes: std.ArrayListUnmanaged(usize) = .{};2894 var priv_decl_indexes: std.ArrayListUnmanaged(usize) = .{};
28822895
...@@ -2918,6 +2931,7 @@ fn walkInstruction(...@@ -2918,6 +2931,7 @@ fn walkInstruction(
2918 .backing_int = backing_int,2931 .backing_int = backing_int,
2919 .line_number = self.ast_nodes.items[self_ast_node_index].line,2932 .line_number = self.ast_nodes.items[self_ast_node_index].line,
2920 .parent_container = parent_scope.enclosing_type,2933 .parent_container = parent_scope.enclosing_type,
2934 .layout = layout_expr,
2921 },2935 },
2922 };2936 };
2923 if (self.ref_paths_pending_on_types.get(type_slot_index)) |paths| {2937 if (self.ref_paths_pending_on_types.get(type_slot_index)) |paths| {