authorgravatar for kappaloris@gmail.comLoris Cro <kappaloris@gmail.com> 2023-05-11 17:46:29+02:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2023-05-11 17:46:29+02:00
log5512455974a9dda5d2a86a81e4a5cc520cb7afa8
tree245772af837ebda7de0cdd0e25dfbd158b21d779
parent8ece99083f1c9af33c3240f31ab849a617547817
parentb7ba9aa8927ed5c04ad84902cdb6e3e8bcf0d8d3
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #15637 from der-teufel-programming/autodoc-layouts

autodoc: Add layout to Struct and Union to handle packed and extern

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

lib/docs/main.js+37-14
...@@ -1848,18 +1848,26 @@ const NAV_MODES = {...@@ -1848,18 +1848,26 @@ const NAV_MODES = {
1848 case typeKinds.Struct: {1848 case typeKinds.Struct: {
1849 let structObj = typeObj;1849 let structObj = typeObj;
1850 let name = "";1850 let name = "";
1851 let layout = "";
1852 if (structObj.layout !== null) {
1853 switch (structObj.layout.enumLiteral) {
1854 case "Packed": {
1855 layout = "packed ";
1856 break;
1857 }
1858 case "Extern": {
1859 layout = "extern ";
1860 break;
1861 }
1862 }
1863 }
1851 if (opts.wantHtml) {1864 if (opts.wantHtml) {
1852 name = "<span class='tok-kw'>struct</span>";1865 name = "<span class='tok-kw'>" + layout + "struct</span>";
1853 } else {1866 } else {
1854 name = "struct";1867 name = layout + "struct";
1855 }1868 }
1856 if (structObj.backing_int !== null) {1869 if (structObj.backing_int !== null) {
1857 if (opts.wantHtml) {1870 name += "(" + exprName(structObj.backing_int, opts) + ")";
1858 name = "<span class='tok-kw'>packed</span> " + name;
1859 } else {
1860 name = "packed " + name;
1861 }
1862 name += " (" + exprName(structObj.backing_int, opts) + ")";
1863 }1871 }
1864 name += " { ";1872 name += " { ";
1865 if (structObj.field_types.length > 1 && opts.wantHtml) { name += "</br>"; }1873 if (structObj.field_types.length > 1 && opts.wantHtml) { name += "</br>"; }
...@@ -1916,7 +1924,7 @@ const NAV_MODES = {...@@ -1916,7 +1924,7 @@ const NAV_MODES = {
1916 name = "enum";1924 name = "enum";
1917 }1925 }
1918 if (enumObj.tag) {1926 if (enumObj.tag) {
1919 name += " (" + exprName(enumObj.tag, opts) + ")";1927 name += "(" + exprName(enumObj.tag, opts) + ")";
1920 }1928 }
1921 name += " { ";1929 name += " { ";
1922 let enumNode = getAstNode(enumObj.src);1930 let enumNode = getAstNode(enumObj.src);
...@@ -1967,16 +1975,29 @@ const NAV_MODES = {...@@ -1967,16 +1975,29 @@ const NAV_MODES = {
1967 case typeKinds.Union: {1975 case typeKinds.Union: {
1968 let unionObj = typeObj;1976 let unionObj = typeObj;
1969 let name = "";1977 let name = "";
1978 let layout = "";
1979 if (unionObj.layout !== null) {
1980 switch (unionObj.layout.enumLiteral) {
1981 case "Packed": {
1982 layout = "packed ";
1983 break;
1984 }
1985 case "Extern": {
1986 layout = "extern ";
1987 break;
1988 }
1989 }
1990 }
1970 if (opts.wantHtml) {1991 if (opts.wantHtml) {
1971 name = "<span class='tok-kw'>union</span>";1992 name = "<span class='tok-kw'>" + layout + "union</span>";
1972 } else {1993 } else {
1973 name = "union";1994 name = layout + "union";
1974 }1995 }
1975 if (unionObj.auto_tag) {1996 if (unionObj.auto_tag) {
1976 if (opts.wantHtml) {1997 if (opts.wantHtml) {
1977 name += " (<span class='tok-kw'>enum</span>";1998 name += "(<span class='tok-kw'>enum</span>";
1978 } else {1999 } else {
1979 name += " (enum";2000 name += "(enum";
1980 }2001 }
1981 if (unionObj.tag) {2002 if (unionObj.tag) {
1982 name += "(" + exprName(unionObj.tag, opts) + "))";2003 name += "(" + exprName(unionObj.tag, opts) + "))";
...@@ -1984,7 +2005,7 @@ const NAV_MODES = {...@@ -1984,7 +2005,7 @@ const NAV_MODES = {
1984 name += ")";2005 name += ")";
1985 }2006 }
1986 } else if (unionObj.tag) {2007 } else if (unionObj.tag) {
1987 name += " (" + exprName(unionObj.tag, opts) + ")";2008 name += "(" + exprName(unionObj.tag, opts) + ")";
1988 }2009 }
1989 name += " { ";2010 name += " { ";
1990 if (unionObj.field_types.length > 1 && opts.wantHtml) {2011 if (unionObj.field_types.length > 1 && opts.wantHtml) {
...@@ -4510,6 +4531,7 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {...@@ -4510,6 +4531,7 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
4510 is_tuple: ty[8],4531 is_tuple: ty[8],
4511 line_number: ty[9],4532 line_number: ty[9],
4512 parent_container: ty[10],4533 parent_container: ty[10],
4534 layout: ty[11],
4513 };4535 };
4514 case 10: // ComptimeExpr4536 case 10: // ComptimeExpr
4515 case 11: // ComptimeFloat4537 case 11: // ComptimeFloat
...@@ -4563,6 +4585,7 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {...@@ -4563,6 +4585,7 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
4563 tag: ty[6],4585 tag: ty[6],
4564 auto_tag: ty[7],4586 auto_tag: ty[7],
4565 parent_container: ty[8],4587 parent_container: ty[8],
4588 layout: ty[9],
4566 };4589 };
4567 case 21: // Fn4590 case 21: // Fn
4568 return {4591 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,
...@@ -2625,6 +2627,11 @@ fn walkInstruction(...@@ -2625,6 +2627,11 @@ fn walkInstruction(
2625 break :blk fields_len;2627 break :blk fields_len;
2626 } else 0;2628 } else 0;
26272629
2630 const layout_expr: ?DocData.Expr = switch (small.layout) {
2631 .Auto => null,
2632 else => .{ .enumLiteral = @tagName(small.layout) },
2633 };
2634
2628 var decl_indexes: std.ArrayListUnmanaged(usize) = .{};2635 var decl_indexes: std.ArrayListUnmanaged(usize) = .{};
2629 var priv_decl_indexes: std.ArrayListUnmanaged(usize) = .{};2636 var priv_decl_indexes: std.ArrayListUnmanaged(usize) = .{};
26302637
...@@ -2679,6 +2686,7 @@ fn walkInstruction(...@@ -2679,6 +2686,7 @@ fn walkInstruction(
2679 .tag = tag_type,2686 .tag = tag_type,
2680 .auto_enum = small.auto_enum_tag,2687 .auto_enum = small.auto_enum_tag,
2681 .parent_container = parent_scope.enclosing_type,2688 .parent_container = parent_scope.enclosing_type,
2689 .layout = layout_expr,
2682 },2690 },
2683 };2691 };
26842692
...@@ -2889,6 +2897,11 @@ fn walkInstruction(...@@ -2889,6 +2897,11 @@ fn walkInstruction(
2889 }2897 }
2890 }2898 }
28912899
2900 const layout_expr: ?DocData.Expr = switch (small.layout) {
2901 .Auto => null,
2902 else => .{ .enumLiteral = @tagName(small.layout) },
2903 };
2904
2892 var decl_indexes: std.ArrayListUnmanaged(usize) = .{};2905 var decl_indexes: std.ArrayListUnmanaged(usize) = .{};
2893 var priv_decl_indexes: std.ArrayListUnmanaged(usize) = .{};2906 var priv_decl_indexes: std.ArrayListUnmanaged(usize) = .{};
28942907
...@@ -2930,6 +2943,7 @@ fn walkInstruction(...@@ -2930,6 +2943,7 @@ fn walkInstruction(
2930 .backing_int = backing_int,2943 .backing_int = backing_int,
2931 .line_number = self.ast_nodes.items[self_ast_node_index].line,2944 .line_number = self.ast_nodes.items[self_ast_node_index].line,
2932 .parent_container = parent_scope.enclosing_type,2945 .parent_container = parent_scope.enclosing_type,
2946 .layout = layout_expr,
2933 },2947 },
2934 };2948 };
2935 if (self.ref_paths_pending_on_types.get(type_slot_index)) |paths| {2949 if (self.ref_paths_pending_on_types.get(type_slot_index)) |paths| {