diff --git a/src/_build/steps/PathCopy.zig b/src/_build/steps/PathCopy.zig index 17eaed9..3c1e862 100644 --- a/src/_build/steps/PathCopy.zig +++ b/src/_build/steps/PathCopy.zig @@ -3,7 +3,7 @@ //! during the build. const std = @import("std"); -const ArrayList = std.ArrayListUnmanaged; +const ArrayList = std.ArrayList; const PathCopy = @This(); diff --git a/src/autodoc/wasm/Decl.zig b/src/autodoc/wasm/Decl.zig index 1a01b9e..72a9971 100644 --- a/src/autodoc/wasm/Decl.zig +++ b/src/autodoc/wasm/Decl.zig @@ -1,4 +1,4 @@ -const ArrayList = std.ArrayListUnmanaged; +const ArrayList = std.ArrayList; const Decl = @This(); const std = @import("std"); const Ast = std.zig.Ast; @@ -229,7 +229,7 @@ pub fn lookup(decl: *const Decl, name: []const u8) ?Decl.Index { } /// Appends the fully qualified name to `out`. -pub fn fqn(decl: *const Decl, out: *std.ArrayListUnmanaged(u8)) Oom!void { +pub fn fqn(decl: *const Decl, out: *std.ArrayList(u8)) Oom!void { const name = decl.extra_info().name; if (std.mem.eql(u8, name, "std") or @@ -246,7 +246,7 @@ pub fn fqn(decl: *const Decl, out: *std.ArrayListUnmanaged(u8)) Oom!void { } /// Appends the fully qualified name to `out`. -pub fn fqn2(decl: *const Decl, parent_idx: Decl.Index, out: *std.ArrayListUnmanaged(u8)) Oom!void { +pub fn fqn2(decl: *const Decl, parent_idx: Decl.Index, out: *std.ArrayList(u8)) Oom!void { const name = decl.extra_info().name; if (std.mem.eql(u8, name, "std") or @@ -268,7 +268,7 @@ pub fn fqn2(decl: *const Decl, parent_idx: Decl.Index, out: *std.ArrayListUnmana /// Appends the fully qualified name to `out`. pub fn fqnWrite( decl: *const Decl, - out: std.ArrayListUnmanaged(u8).Writer, + out: std.ArrayList(u8).Writer, ) !void { const name = decl.extra_info().name; @@ -289,8 +289,8 @@ pub fn fqnWrite( pub fn fqn2Write( decl: *const Decl, parent_idx: Decl.Index, - out: std.ArrayListUnmanaged(u8).Writer, -) Oom!void { + out: *std.Io.Writer, +) !void { const name = decl.extra_info().name; if (std.mem.eql(u8, name, "std") or @@ -299,7 +299,7 @@ pub fn fqn2Write( if (parent_idx == .none) { try decl.appendPath(out); - out.context.self.items.len -= 1; // remove the trailing '.' + out.end -= 1; // remove the trailing '.' return; } @@ -309,12 +309,12 @@ pub fn fqn2Write( try out.writeAll(name); } -pub fn reset_with_path(decl: *const Decl, list: *std.ArrayListUnmanaged(u8)) Oom!void { +pub fn reset_with_path(decl: *const Decl, list: *std.ArrayList(u8)) Oom!void { list.clearRetainingCapacity(); try append_path(decl, list); } -pub fn append_path(decl: *const Decl, list: *std.ArrayListUnmanaged(u8)) Oom!void { +pub fn append_path(decl: *const Decl, list: *std.ArrayList(u8)) Oom!void { const start = list.items.len; // Prefer the module name alias. for (Walk.modules.keys(), Walk.modules.values()) |pkg_name, pkg_file| { @@ -342,9 +342,9 @@ pub fn append_path(decl: *const Decl, list: *std.ArrayListUnmanaged(u8)) Oom!voi pub fn appendPath( decl: *const Decl, - out: std.ArrayListUnmanaged(u8).Writer, + out: *std.Io.Writer, ) !void { - const start = out.context.self.items.len; + const start = out.end; // Prefer the module name alias. for (Walk.modules.keys(), Walk.modules.values()) |pkg_name, pkg_file| { if (pkg_file == decl.file) { @@ -358,19 +358,18 @@ pub fn appendPath( // try out.ensureUnusedCapacity(gpa, file_path.len + 1); try out.writeAll(file_path); - const list = out.context.self; - for (list.items[start..]) |*byte| switch (byte.*) { + for (out.buffer[start..]) |*byte| switch (byte.*) { '/' => byte.* = '.', else => continue, }; - if (std.mem.endsWith(u8, list.items, ".zig")) { - list.items.len -= 3; + if (std.mem.endsWith(u8, out.buffered(), ".zig")) { + out.end -= 3; } else { try out.writeByte('.'); } } -pub fn append_parent_ns(list: *std.ArrayListUnmanaged(u8), parent: Decl.Index) Oom!void { +pub fn append_parent_ns(list: *std.ArrayList(u8), parent: Decl.Index) Oom!void { assert(parent != .none); const decl = parent.get(); if (decl.parent != .none) { @@ -380,7 +379,7 @@ pub fn append_parent_ns(list: *std.ArrayListUnmanaged(u8), parent: Decl.Index) O } } -pub fn appendParentNs(out: std.ArrayListUnmanaged(u8).Writer, parent: Decl.Index) !void { +pub fn appendParentNs(out: std.ArrayList(u8).Writer, parent: Decl.Index) !void { assert(parent != .none); const decl = parent.get(); if (decl.parent != .none) { diff --git a/src/autodoc/wasm/Walk.zig b/src/autodoc/wasm/Walk.zig index 8253b38..ebb164b 100644 --- a/src/autodoc/wasm/Walk.zig +++ b/src/autodoc/wasm/Walk.zig @@ -11,7 +11,7 @@ const Oom = error{OutOfMemory}; pub const Decl = @import("Decl.zig"); pub var files: std.StringArrayHashMapUnmanaged(File) = .empty; -pub var decls: std.ArrayListUnmanaged(Decl) = .empty; +pub var decls: std.ArrayList(Decl) = .empty; pub var modules: std.StringArrayHashMapUnmanaged(File.Index) = .empty; file: File.Index, diff --git a/src/autodoc/wasm/html_render.zig b/src/autodoc/wasm/html_render.zig index f756122..93b4597 100644 --- a/src/autodoc/wasm/html_render.zig +++ b/src/autodoc/wasm/html_render.zig @@ -33,7 +33,7 @@ pub const Annotation = struct { pub fn fileSourceHtml( file_index: Walk.File.Index, - out: *std.ArrayListUnmanaged(u8), + out: *std.ArrayList(u8), root_node: Ast.Node.Index, options: RenderSourceOptions, ) !void { @@ -41,7 +41,7 @@ pub fn fileSourceHtml( const file = file_index.get(); const g = struct { - var field_access_buffer: std.ArrayListUnmanaged(u8) = .empty; + var field_access_buffer: std.ArrayList(u8) = .empty; }; const start_token = ast.firstToken(root_node); @@ -117,7 +117,7 @@ pub fn fileSourceHtml( if (next_annotate_index >= options.source_location_annotations.len) break; const next_annotation = options.source_location_annotations[next_annotate_index]; if (cursor <= next_annotation.file_byte_offset) break; - try out.writer(gpa).print("", .{ + try out.print(gpa, "", .{ options.annotation_prefix, next_annotation.dom_id, }); next_annotate_index += 1; @@ -387,7 +387,7 @@ pub fn fileSourceHtml( } fn appendUnindented( - out: *std.ArrayListUnmanaged(u8), + out: *std.ArrayList(u8), s: []const u8, indent: usize, ) !void { @@ -404,7 +404,7 @@ fn appendUnindented( } } -pub fn appendEscaped(out: *std.ArrayListUnmanaged(u8), s: []const u8) !void { +pub fn appendEscaped(out: *std.ArrayList(u8), s: []const u8) !void { for (s) |c| { try out.ensureUnusedCapacity(gpa, 6); switch (c) { @@ -419,7 +419,7 @@ pub fn appendEscaped(out: *std.ArrayListUnmanaged(u8), s: []const u8) !void { fn walkFieldAccesses( file_index: Walk.File.Index, - out: *std.ArrayListUnmanaged(u8), + out: *std.ArrayList(u8), node: Ast.Node.Index, ) Oom!void { const ast = file_index.get_ast(); @@ -443,7 +443,7 @@ fn walkFieldAccesses( fn resolveIdentLink( file_index: Walk.File.Index, - out: *std.ArrayListUnmanaged(u8), + out: *std.ArrayList(u8), ident_token: Ast.TokenIndex, ) Oom!void { const decl_index = file_index.get().lookup_token(ident_token); @@ -463,7 +463,7 @@ fn unindent(s: []const u8, indent: usize) []const u8 { return s[indent_idx..]; } -pub fn resolveDeclLink(decl_index: Decl.Index, out: *std.ArrayListUnmanaged(u8)) Oom!void { +pub fn resolveDeclLink(decl_index: Decl.Index, out: *std.ArrayList(u8)) Oom!void { const decl = decl_index.get(); switch (decl.categorize()) { .alias => |alias_decl| try alias_decl.get().fqn(out), diff --git a/src/autodoc/wasm/main.zig b/src/autodoc/wasm/main.zig index 90ef071..18fc08e 100644 --- a/src/autodoc/wasm/main.zig +++ b/src/autodoc/wasm/main.zig @@ -1,4 +1,4 @@ -const ArrayList = std.ArrayListUnmanaged; +const ArrayList = std.ArrayList; const std = @import("std"); const log = std.log; const assert = std.debug.assert; @@ -68,8 +68,8 @@ export fn unpack(tar_ptr: [*]u8, tar_len: usize) void { }; } -var query_string: std.ArrayListUnmanaged(u8) = .empty; -var query_results: std.ArrayListUnmanaged(Decl.Index) = .empty; +var query_string: std.ArrayList(u8) = .empty; +var query_results: std.ArrayList(Decl.Index) = .empty; /// Resizes the query string to be the correct length; returns the pointer to /// the query string. @@ -101,11 +101,11 @@ fn query_exec_fallible(query: []const u8, ignore_case: bool) !void { segments: u16, }; const g = struct { - var full_path_search_text: std.ArrayListUnmanaged(u8) = .empty; - var full_path_search_text_lower: std.ArrayListUnmanaged(u8) = .empty; - var doc_search_text: std.ArrayListUnmanaged(u8) = .empty; + var full_path_search_text: std.ArrayList(u8) = .empty; + var full_path_search_text_lower: std.ArrayList(u8) = .empty; + var doc_search_text: std.ArrayList(u8) = .empty; /// Each element matches a corresponding query_results element. - var scores: std.ArrayListUnmanaged(Score) = .empty; + var scores: std.ArrayList(Score) = .empty; }; // First element stores the size of the list. @@ -239,7 +239,7 @@ const ErrorIdentifier = packed struct(u64) { fn html( ei: ErrorIdentifier, base_decl: Decl.Index, - out: *std.ArrayListUnmanaged(u8), + out: *std.ArrayList(u8), ) !void { const decl_index = ei.decl_index; const ast = decl_index.get().file.get_ast(); @@ -266,7 +266,7 @@ const ErrorIdentifier = packed struct(u64) { } }; -var string_result: std.ArrayListUnmanaged(u8) = .empty; +var string_result: std.ArrayList(u8) = .empty; var error_set_result: std.StringArrayHashMapUnmanaged(ErrorIdentifier) = .empty; export fn decl_error_set(decl_index: Decl.Index) Slice(ErrorIdentifier) { @@ -435,7 +435,7 @@ fn decl_fields_fallible(decl_index: Decl.Index) ![]Ast.Node.Index { fn ast_decl_fields_fallible(ast: *Ast, ast_index: Ast.Node.Index) ![]Ast.Node.Index { const g = struct { - var result: std.ArrayListUnmanaged(Ast.Node.Index) = .empty; + var result: std.ArrayList(Ast.Node.Index) = .empty; }; g.result.clearRetainingCapacity(); var buf: [2]Ast.Node.Index = undefined; @@ -453,7 +453,7 @@ fn ast_decl_fields_fallible(ast: *Ast, ast_index: Ast.Node.Index) ![]Ast.Node.In fn decl_params_fallible(decl_index: Decl.Index) ![]Ast.Node.Index { const g = struct { - var result: std.ArrayListUnmanaged(Ast.Node.Index) = .empty; + var result: std.ArrayList(Ast.Node.Index) = .empty; }; g.result.clearRetainingCapacity(); const decl = decl_index.get(); @@ -498,7 +498,7 @@ export fn decl_param_html(decl_index: Decl.Index, param_node: Ast.Node.Index) St } fn decl_field_html_fallible( - out: *std.ArrayListUnmanaged(u8), + out: *std.ArrayList(u8), decl_index: Decl.Index, field_node: Ast.Node.Index, ) !void { @@ -518,7 +518,7 @@ fn decl_field_html_fallible( } fn decl_param_html_fallible( - out: *std.ArrayListUnmanaged(u8), + out: *std.ArrayList(u8), decl_index: Decl.Index, param_node: Ast.Node.Index, ) !void { @@ -754,7 +754,7 @@ export fn decl_docs_html(decl_index: Decl.Index, short: bool) String { } fn collect_docs( - list: *std.ArrayListUnmanaged(u8), + list: *std.ArrayList(u8), ast: *const Ast, first_doc_comment: Ast.TokenIndex, ) Oom!void { @@ -772,7 +772,7 @@ fn collect_docs( } fn render_docs( - out: *std.ArrayListUnmanaged(u8), + out: *std.ArrayList(u8), decl_index: Decl.Index, first_doc_comment: Ast.TokenIndex, short: bool, @@ -799,10 +799,17 @@ fn render_docs( .context = decl_index, .renderFn = renderMarkdownNode, }; - try renderer.render(parsed_doc, out.writer(gpa)); + + var allocating = std.Io.Writer.Allocating.fromArrayList(gpa, out); + defer out.* = allocating.toArrayList(); + + renderer.render(parsed_doc, &allocating.writer) catch |err| switch (err) { + error.WriteFailed => return error.OutOfMemory, + else => return err, + }; } -const MarkdownWriter = std.ArrayListUnmanaged(u8).Writer; +const MarkdownWriter = *std.Io.Writer; const MarkdownRenderer = markdown.Renderer(MarkdownWriter, Decl.Index); fn renderMarkdownNode( @@ -812,7 +819,7 @@ fn renderMarkdownNode( writer: MarkdownWriter, ) !void { const g = struct { - var link_buffer: std.ArrayListUnmanaged(u8) = .empty; + var link_buffer: std.ArrayList(u8) = .empty; }; const data = doc.nodes.items(.data)[@intFromEnum(node)]; @@ -839,7 +846,7 @@ fn renderMarkdownNode( return MarkdownRenderer.renderDefault(r, doc, node, writer); } - // var virtual_file_name = std.ArrayListUnmanaged(u8).empty; + // var virtual_file_name = std.ArrayList(u8).empty; // try r.context.get().fqn(&virtual_file_name); // try virtual_file_name.writer(gpa).print("/snippet", .{}); // log.info("adding virtual file: {s}", .{virtual_file_name.items}); @@ -1034,7 +1041,7 @@ export fn find_module_root(pkg: Walk.ModuleIndex) Decl.Index { } /// Set by `set_input_string`. -var input_string: std.ArrayListUnmanaged(u8) = .empty; +var input_string: std.ArrayList(u8) = .empty; export fn set_input_string(len: usize) [*]u8 { input_string.resize(gpa, len) catch @panic("OOM"); @@ -1058,7 +1065,7 @@ export fn find_decl() Decl.Index { if (result != .none) return result; const g = struct { - var match_fqn: std.ArrayListUnmanaged(u8) = .empty; + var match_fqn: std.ArrayList(u8) = .empty; }; for (Walk.decls.items, 0..) |*decl, decl_index| { g.match_fqn.clearRetainingCapacity(); @@ -1120,7 +1127,7 @@ export fn namespace_members( include_private: bool, ) Slice(Decl.Index) { const g = struct { - var members: std.ArrayListUnmanaged(Decl.Index) = .empty; + var members: std.ArrayList(Decl.Index) = .empty; }; g.members.clearRetainingCapacity(); @@ -1133,7 +1140,7 @@ export fn namespace_members( fn namespaceMembersInner( parent_idx: Decl.Index, include_private: bool, - out_members: *std.ArrayListUnmanaged(Decl.Index), + out_members: *std.ArrayList(Decl.Index), ) void { const parent = parent_idx.get(); switch (parent.categorize()) { diff --git a/src/autodoc/wasm/markdown.zig b/src/autodoc/wasm/markdown.zig index b18fe05..af7c73d 100644 --- a/src/autodoc/wasm/markdown.zig +++ b/src/autodoc/wasm/markdown.zig @@ -145,7 +145,7 @@ fn mainImpl() !void { var parser = try Parser.init(gpa); defer parser.deinit(); - var stdin_buf = std.io.bufferedReader(std.io.getStdIn().reader()); + var stdin_buf = std.Io.bufferedReader(std.Io.getStdIn().reader()); var line_buf = std.ArrayList(u8).init(gpa); defer line_buf.deinit(); while (stdin_buf.reader().streamUntilDelimiter(line_buf.writer(), '\n', null)) { @@ -160,7 +160,7 @@ fn mainImpl() !void { var doc = try parser.endInput(); defer doc.deinit(gpa); - var stdout_buf = std.io.bufferedWriter(std.io.getStdOut().writer()); + var stdout_buf = std.Io.bufferedWriter(std.Io.getStdOut().writer()); try doc.render(stdout_buf.writer()); try stdout_buf.flush(); } diff --git a/src/autodoc/wasm/markdown/Parser.zig b/src/autodoc/wasm/markdown/Parser.zig index 20a3e03..0e9d48e 100644 --- a/src/autodoc/wasm/markdown/Parser.zig +++ b/src/autodoc/wasm/markdown/Parser.zig @@ -29,7 +29,7 @@ const Node = Document.Node; const ExtraIndex = Document.ExtraIndex; const ExtraData = Document.ExtraData; const StringIndex = Document.StringIndex; -const ArrayList = std.ArrayListUnmanaged; +const ArrayList = std.ArrayList; nodes: Node.List = .{}, extra: ArrayList(u32) = .empty, diff --git a/src/autodoc/wasm/markdown/renderer.zig b/src/autodoc/wasm/markdown/renderer.zig index 65f67a7..bb850db 100644 --- a/src/autodoc/wasm/markdown/renderer.zig +++ b/src/autodoc/wasm/markdown/renderer.zig @@ -189,7 +189,7 @@ pub fn renderInlineNodeText( doc: Document, node: Node.Index, writer: anytype, -) @TypeOf(writer).Error!void { +) !void { const data = doc.nodes.items(.data)[@intFromEnum(node)]; switch (doc.nodes.items(.tag)[@intFromEnum(node)]) { .root, @@ -230,11 +230,11 @@ pub fn renderInlineNodeText( } } -pub fn fmtHtml(bytes: []const u8) std.fmt.Formatter([]const u8, formatHtml) { +pub fn fmtHtml(bytes: []const u8) std.fmt.Alt([]const u8, formatHtml) { return .{ .data = bytes }; } -fn formatHtml(bytes: []const u8, writer: *std.io.Writer) std.io.Writer.Error!void { +fn formatHtml(bytes: []const u8, writer: *std.Io.Writer) std.Io.Writer.Error!void { for (bytes) |b| { switch (b) { '<' => try writer.writeAll("<"), diff --git a/src/autodoc/wasm/snippet_render.zig b/src/autodoc/wasm/snippet_render.zig index 83fae55..62d65be 100644 --- a/src/autodoc/wasm/snippet_render.zig +++ b/src/autodoc/wasm/snippet_render.zig @@ -34,7 +34,7 @@ pub const Annotation = struct { pub fn codeSnippetHtml( ast: std.zig.Ast, file_index: Walk.File.Index, - out: std.ArrayListUnmanaged(u8).Writer, + out: *std.Io.Writer, // root_node: Ast.Node.Index, options: RenderSourceOptions, ) !void { @@ -43,7 +43,7 @@ pub fn codeSnippetHtml( // const ast = file.ast; const g = struct { - var field_access_buffer: std.ArrayListUnmanaged(u8) = .empty; + var field_access_buffer: std.ArrayList(u8) = .empty; }; const start_token = ast.firstToken(root_node); @@ -75,9 +75,8 @@ pub fn codeSnippetHtml( } } else if (between.len > 0) { if (options.collapse_whitespace) { - const list = out.context.self; - if (list.items.len > 0 and - list.items[list.items.len - 1] != ' ') + if (out.end > 0 and + out.buffer[out.end - 1] != ' ') { try out.writeByte(' '); } @@ -363,7 +362,7 @@ pub fn codeSnippetHtml( } fn appendUnindented( - out: std.ArrayListUnmanaged(u8).Writer, + out: *std.Io.Writer, s: []const u8, indent: usize, ) !void { @@ -373,12 +372,12 @@ fn appendUnindented( try appendEscaped(out, line); is_first_line = false; } else { - try out.writeAll("\n"); + try out.writeByte('\n'); try appendEscaped(out, unindent(line, indent)); }; } -pub fn appendEscaped(out: std.ArrayListUnmanaged(u8).Writer, s: []const u8) !void { +pub fn appendEscaped(out: *std.Io.Writer, s: []const u8) !void { for (s) |c| try switch (c) { '&' => out.writeAll("&"), '<' => out.writeAll("<"), @@ -390,7 +389,7 @@ pub fn appendEscaped(out: std.ArrayListUnmanaged(u8).Writer, s: []const u8) !voi fn walkFieldAccesses( file_index: Walk.File.Index, - out: *std.ArrayListUnmanaged(u8), + out: *std.ArrayList(u8), node: Ast.Node.Index, ) Oom!void { const ast = file_index.get_ast(); @@ -414,7 +413,7 @@ fn walkFieldAccesses( fn resolveIdentLink( file_index: Walk.File.Index, - out: *std.ArrayListUnmanaged(u8), + out: *std.ArrayList(u8), ident_token: Ast.TokenIndex, ) Oom!void { const decl_index = file_index.get().lookup_token(ident_token); @@ -436,7 +435,7 @@ fn unindent(s: []const u8, indent: usize) []const u8 { pub fn resolveDeclLink( decl_index: Decl.Index, - out: *std.ArrayListUnmanaged(u8), + out: *std.ArrayList(u8), ) Oom!void { const decl = decl_index.get(); switch (decl.categorize()) { @@ -452,7 +451,7 @@ pub fn tmpFile(bytes: []u8) !Walk.File.Index { defer ast.deinit(gpa); const token_offsets = ast.tokens.items(.start); - var rendered_err: std.ArrayListUnmanaged(u8) = .{}; + var rendered_err: std.ArrayList(u8) = .{}; defer rendered_err.deinit(gpa); for (ast.errors) |err| { const err_offset = token_offsets[err.token] + ast.errorOffset(err); diff --git a/src/bit_flags.zig b/src/bit_flags.zig index 32d3656..38b47b0 100644 --- a/src/bit_flags.zig +++ b/src/bit_flags.zig @@ -49,7 +49,7 @@ pub fn BitFlagsImpl(comptime T: type) type { return @bitCast(self); } - pub fn format(self: Self, writer: *std.io.Writer) !void { + pub fn format(self: Self, writer: *std.Io.Writer) !void { try writer.writeAll("{"); var count: BackingInt = 0; diff --git a/src/bounded_array.zig b/src/bounded_array.zig index 242147b..ee7b4aa 100644 --- a/src/bounded_array.zig +++ b/src/bounded_array.zig @@ -1,5 +1,5 @@ const std = @import("std"); -const Writer = std.io.Writer; +const Writer = std.Io.Writer; /// A collection structure, with an array and a length, to/from which bounded, /// variable-length slices can be written/read.