From 4aed226e07a911be88ed6e2f349796364d3327f7 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Wed, 19 Feb 2025 02:11:13 -0800 Subject: [PATCH] zig fmt compiling --- lib/std/http/WebSocket.zig | 6 ++--- lib/std/zig/render.zig | 9 ++++--- src/Package/Fetch/git.zig | 6 ++--- src/fmt.zig | 54 +++++++++++++++++++++++++------------- 4 files changed, 46 insertions(+), 29 deletions(-) diff --git a/lib/std/http/WebSocket.zig b/lib/std/http/WebSocket.zig index 8ab434ceae..9b198c4263 100644 --- a/lib/std/http/WebSocket.zig +++ b/lib/std/http/WebSocket.zig @@ -193,16 +193,14 @@ fn recvReadInt(ws: *WebSocket, comptime I: type) !I { }; } -pub const WriteError = std.http.Server.Response.WriteError; - -pub fn writeMessage(ws: *WebSocket, message: []const u8, opcode: Opcode) WriteError!void { +pub fn writeMessage(ws: *WebSocket, message: []const u8, opcode: Opcode) anyerror!void { const iovecs: [1]std.posix.iovec_const = .{ .{ .base = message.ptr, .len = message.len }, }; return writeMessagev(ws, &iovecs, opcode); } -pub fn writeMessagev(ws: *WebSocket, message: []const std.posix.iovec_const, opcode: Opcode) WriteError!void { +pub fn writeMessagev(ws: *WebSocket, message: []const std.posix.iovec_const, opcode: Opcode) anyerror!void { const total_len = l: { var total_len: u64 = 0; for (message) |iovec| total_len += iovec.len; diff --git a/lib/std/zig/render.zig b/lib/std/zig/render.zig index 893fc1635d..7bd6c928d7 100644 --- a/lib/std/zig/render.zig +++ b/lib/std/zig/render.zig @@ -1576,7 +1576,7 @@ fn renderBuiltinCall( defer r.gpa.free(new_string); try renderToken(r, builtin_token + 1, .none); // ( - try ais.print("\"{}\"", .{std.zig.fmtEscapes(new_string)}); + try ais.print("\"{f}\"", .{std.zig.fmtEscapes(new_string)}); return renderToken(r, str_lit_token + 1, space); // ) } } @@ -2888,7 +2888,7 @@ fn renderIdentifierContents(ais: *AutoIndentingStream, bytes: []const u8) !void .success => |codepoint| { if (codepoint <= 0x7f) { const buf = [1]u8{@as(u8, @intCast(codepoint))}; - try ais.print("{}", .{std.zig.fmtEscapes(&buf)}); + try ais.print("{f}", .{std.zig.fmtEscapes(&buf)}); } else { try ais.writeAll(escape_sequence); } @@ -2900,7 +2900,7 @@ fn renderIdentifierContents(ais: *AutoIndentingStream, bytes: []const u8) !void }, 0x00...('\\' - 1), ('\\' + 1)...0x7f => { const buf = [1]u8{byte}; - try ais.print("{}", .{std.zig.fmtEscapes(&buf)}); + try ais.print("{f}", .{std.zig.fmtEscapes(&buf)}); pos += 1; }, 0x80...0xff => { @@ -3305,8 +3305,9 @@ const AutoIndentingStream = struct { if (bytes[bytes.len - 1] == '\n') ais.resetLine(); } + /// Assumes that if the printed data ends with a newline, it is directly + /// contained in the format string. pub fn print(ais: *AutoIndentingStream, comptime format: []const u8, args: anytype) anyerror!void { - comptime assert(format[format.len - 1] != '}'); try ais.applyIndent(); if (ais.disabled_offset == null) try ais.underlying_writer.print(format, args); if (format[format.len - 1] == '\n') ais.resetLine(); diff --git a/src/Package/Fetch/git.zig b/src/Package/Fetch/git.zig index 1d4d0075c5..d8da704342 100644 --- a/src/Package/Fetch/git.zig +++ b/src/Package/Fetch/git.zig @@ -122,9 +122,9 @@ pub const Oid = union(Format) { pub fn format( oid: Oid, comptime fmt: []const u8, - options: std.fmt.FormatOptions, - writer: anytype, - ) @TypeOf(writer).Error!void { + options: std.fmt.Options, + writer: *std.io.BufferedWriter, + ) anyerror!void { _ = fmt; _ = options; try writer.print("{x}", .{oid.slice()}); diff --git a/src/fmt.zig b/src/fmt.zig index b0336823b9..c3056ee332 100644 --- a/src/fmt.zig +++ b/src/fmt.zig @@ -26,16 +26,13 @@ const Fmt = struct { color: Color, gpa: Allocator, arena: Allocator, - out_buffer: std.ArrayList(u8), + out_buffer: std.ArrayListUnmanaged(u8), + stdout: *std.io.BufferedWriter, const SeenMap = std.AutoHashMap(fs.File.INode, void); }; -pub fn run( - gpa: Allocator, - arena: Allocator, - args: []const []const u8, -) !void { +pub fn run(gpa: Allocator, arena: Allocator, args: []const []const u8) !void { var color: Color = .auto; var stdin_flag = false; var check_flag = false; @@ -52,8 +49,7 @@ pub fn run( const arg = args[i]; if (mem.startsWith(u8, arg, "-")) { if (mem.eql(u8, arg, "-h") or mem.eql(u8, arg, "--help")) { - const stdout = std.io.getStdOut().writer(); - try stdout.writeAll(usage_fmt); + try std.io.getStdOut().writeAll(usage_fmt); return process.cleanExit(); } else if (mem.eql(u8, arg, "--color")) { if (i + 1 >= args.len) { @@ -138,8 +134,11 @@ pub fn run( try std.zig.printAstErrorsToStderr(gpa, tree, "", color); process.exit(2); } - const formatted = try tree.render(gpa); - defer gpa.free(formatted); + var aw: std.io.AllocatingWriter = undefined; + const bw = aw.init(gpa); + defer aw.deinit(); + try tree.render(gpa, bw, .{}); + const formatted = aw.getWritten(); if (check_flag) { const code: u8 = @intFromBool(mem.eql(u8, formatted, source_code)); @@ -153,6 +152,12 @@ pub fn run( fatal("expected at least one source file argument", .{}); } + var stdout_buffer: [4096]u8 = undefined; + var stdout: std.io.BufferedWriter = .{ + .buffer = &stdout_buffer, + .unbuffered_writer = std.io.getStdOut().writer(), + }; + var fmt: Fmt = .{ .gpa = gpa, .arena = arena, @@ -161,10 +166,11 @@ pub fn run( .check_ast = check_ast_flag, .force_zon = force_zon, .color = color, - .out_buffer = std.ArrayList(u8).init(gpa), + .out_buffer = .empty, + .stdout = &stdout, }; defer fmt.seen.deinit(); - defer fmt.out_buffer.deinit(); + defer fmt.out_buffer.deinit(gpa); // Mark any excluded files/directories as already seen, // so that they are skipped later during actual processing @@ -322,15 +328,19 @@ fn fmtPathFile( // As a heuristic, we make enough capacity for the same as the input source. fmt.out_buffer.shrinkRetainingCapacity(0); - try fmt.out_buffer.ensureTotalCapacity(source_code.len); + try fmt.out_buffer.ensureTotalCapacity(gpa, source_code.len); - try tree.renderToArrayList(&fmt.out_buffer, .{}); + { + var aw: std.io.AllocatingWriter = undefined; + const bw = aw.fromArrayList(gpa, &fmt.out_buffer); + defer fmt.out_buffer = aw.toArrayList(); + try tree.render(gpa, bw, .{}); + } if (mem.eql(u8, fmt.out_buffer.items, source_code)) return; if (check_mode) { - const stdout = std.io.getStdOut().writer(); - try stdout.print("{s}\n", .{file_path}); + try fmt.stdout.print("{s}\n", .{file_path}); fmt.any_error = true; } else { var af = try dir.atomicFile(sub_path, .{ .mode = stat.mode }); @@ -338,8 +348,7 @@ fn fmtPathFile( try af.file.writeAll(fmt.out_buffer.items); try af.finish(); - const stdout = std.io.getStdOut().writer(); - try stdout.print("{s}\n", .{file_path}); + try fmt.stdout.print("{s}\n", .{file_path}); } } @@ -350,3 +359,12 @@ const process = std.process; const Allocator = std.mem.Allocator; const Color = std.zig.Color; const fatal = std.process.fatal; + +/// Provided for debugging/testing purposes; unused by the compiler. +pub fn main() !void { + const gpa = std.heap.smp_allocator; + var arena_instance = std.heap.ArenaAllocator.init(gpa); + const arena = arena_instance.allocator(); + const args = try process.argsAlloc(arena); + return run(gpa, arena, args[1..]); +}