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 = {
18481848 case typeKinds.Struct: {
18491849 let structObj = typeObj;
18501850 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 }
18511864 if (opts.wantHtml) {
1852 name = "<span class='tok-kw'>struct</span>";
1865 name = "<span class='tok-kw'>" + layout + "struct</span>";
18531866 } else {
1854 name = "struct";
1867 name = layout + "struct";
18551868 }
18561869 if (structObj.backing_int !== null) {
1857 if (opts.wantHtml) {
1858 name = "<span class='tok-kw'>packed</span> " + name;
1859 } else {
1860 name = "packed " + name;
1861 }
1862 name += " (" + exprName(structObj.backing_int, opts) + ")";
1870 name += "(" + exprName(structObj.backing_int, opts) + ")";
18631871 }
18641872 name += " { ";
18651873 if (structObj.field_types.length > 1 && opts.wantHtml) { name += "</br>"; }
......@@ -1916,7 +1924,7 @@ const NAV_MODES = {
19161924 name = "enum";
19171925 }
19181926 if (enumObj.tag) {
1919 name += " (" + exprName(enumObj.tag, opts) + ")";
1927 name += "(" + exprName(enumObj.tag, opts) + ")";
19201928 }
19211929 name += " { ";
19221930 let enumNode = getAstNode(enumObj.src);
......@@ -1967,16 +1975,29 @@ const NAV_MODES = {
19671975 case typeKinds.Union: {
19681976 let unionObj = typeObj;
19691977 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 }
19701991 if (opts.wantHtml) {
1971 name = "<span class='tok-kw'>union</span>";
1992 name = "<span class='tok-kw'>" + layout + "union</span>";
19721993 } else {
1973 name = "union";
1994 name = layout + "union";
19741995 }
19751996 if (unionObj.auto_tag) {
19761997 if (opts.wantHtml) {
1977 name += " (<span class='tok-kw'>enum</span>";
1998 name += "(<span class='tok-kw'>enum</span>";
19781999 } else {
1979 name += " (enum";
2000 name += "(enum";
19802001 }
19812002 if (unionObj.tag) {
19822003 name += "(" + exprName(unionObj.tag, opts) + "))";
......@@ -1984,7 +2005,7 @@ const NAV_MODES = {
19842005 name += ")";
19852006 }
19862007 } else if (unionObj.tag) {
1987 name += " (" + exprName(unionObj.tag, opts) + ")";
2008 name += "(" + exprName(unionObj.tag, opts) + ")";
19882009 }
19892010 name += " { ";
19902011 if (unionObj.field_types.length > 1 && opts.wantHtml) {
......@@ -4510,6 +4531,7 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
45104531 is_tuple: ty[8],
45114532 line_number: ty[9],
45124533 parent_container: ty[10],
4534 layout: ty[11],
45134535 };
45144536 case 10: // ComptimeExpr
45154537 case 11: // ComptimeFloat
......@@ -4563,6 +4585,7 @@ function addDeclToSearchResults(decl, declIndex, modNames, item, list, stack) {
45634585 tag: ty[6],
45644586 auto_tag: ty[7],
45654587 parent_container: ty[8],
4588 layout: ty[9],
45664589 };
45674590 case 21: // Fn
45684591 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,
......@@ -2625,6 +2627,11 @@ fn walkInstruction(
26252627 break :blk fields_len;
26262628 } else 0;
26272629
2630 const layout_expr: ?DocData.Expr = switch (small.layout) {
2631 .Auto => null,
2632 else => .{ .enumLiteral = @tagName(small.layout) },
2633 };
2634
26282635 var decl_indexes: std.ArrayListUnmanaged(usize) = .{};
26292636 var priv_decl_indexes: std.ArrayListUnmanaged(usize) = .{};
26302637
......@@ -2679,6 +2686,7 @@ fn walkInstruction(
26792686 .tag = tag_type,
26802687 .auto_enum = small.auto_enum_tag,
26812688 .parent_container = parent_scope.enclosing_type,
2689 .layout = layout_expr,
26822690 },
26832691 };
26842692
......@@ -2889,6 +2897,11 @@ fn walkInstruction(
28892897 }
28902898 }
28912899
2900 const layout_expr: ?DocData.Expr = switch (small.layout) {
2901 .Auto => null,
2902 else => .{ .enumLiteral = @tagName(small.layout) },
2903 };
2904
28922905 var decl_indexes: std.ArrayListUnmanaged(usize) = .{};
28932906 var priv_decl_indexes: std.ArrayListUnmanaged(usize) = .{};
28942907
......@@ -2930,6 +2943,7 @@ fn walkInstruction(
29302943 .backing_int = backing_int,
29312944 .line_number = self.ast_nodes.items[self_ast_node_index].line,
29322945 .parent_container = parent_scope.enclosing_type,
2946 .layout = layout_expr,
29332947 },
29342948 };
29352949 if (self.ref_paths_pending_on_types.get(type_slot_index)) |paths| {