refactor: lots more writergate fixes - first successful build

This commit is contained in:
CJ van den Berg 2025-09-25 22:01:29 +02:00
parent 5094aa8c85
commit bf0d4402ea
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9
48 changed files with 404 additions and 413 deletions

View file

@ -27,7 +27,7 @@ pub fn load_entries(palette: *Type) !usize {
defer palette.allocator.free(buffers);
for (buffers) |buffer| {
const indicator = tui.get_buffer_state_indicator(buffer);
(try palette.entries.addOne()).* = .{
(try palette.entries.addOne(palette.allocator)).* = .{
.label = buffer.get_file_path(),
.icon = buffer.file_type_icon orelse "",
.color = buffer.file_type_color,
@ -42,15 +42,15 @@ pub fn clear_entries(palette: *Type) void {
}
pub fn add_menu_entry(palette: *Type, entry: *Entry, matches: ?[]const usize) !void {
var value = std.ArrayList(u8).init(palette.allocator);
var value: std.Io.Writer.Allocating = .init(palette.allocator);
defer value.deinit();
const writer = value.writer();
const writer = &value.writer;
try cbor.writeValue(writer, entry.label);
try cbor.writeValue(writer, entry.icon);
try cbor.writeValue(writer, entry.color);
try cbor.writeValue(writer, entry.indicator);
try cbor.writeValue(writer, matches orelse &[_]usize{});
try palette.menu.add_item_with_handler(value.items, select);
try palette.menu.add_item_with_handler(value.written(), select);
palette.items += 1;
}

View file

@ -28,7 +28,7 @@ pub fn load_entries(palette: *Type) !usize {
const hint = hints.get(p.name) orelse "";
longest_description = @max(longest_description, p.meta.description.len);
longest_total = @max(longest_total, p.meta.description.len + hint.len + 1);
(try palette.entries.addOne()).* = .{
(try palette.entries.addOne(palette.allocator)).* = .{
.label = if (p.meta.description.len > 0) p.meta.description else p.name,
.name = p.name,
.hint = hint,
@ -41,14 +41,14 @@ pub fn load_entries(palette: *Type) !usize {
}
pub fn add_menu_entry(palette: *Type, entry: *Entry, matches: ?[]const usize) !void {
var value = std.ArrayList(u8).init(palette.allocator);
var value: std.Io.Writer.Allocating = .init(palette.allocator);
defer value.deinit();
const writer = value.writer();
const writer = &value.writer;
try cbor.writeValue(writer, entry.label);
try cbor.writeValue(writer, entry.hint);
try cbor.writeValue(writer, matches orelse &[_]usize{});
try cbor.writeValue(writer, entry.id);
try palette.menu.add_item_with_handler(value.items, select);
try palette.menu.add_item_with_handler(value.written(), select);
palette.items += 1;
}
@ -93,9 +93,10 @@ fn write_state(palette: *Type) !void {
const state_file = try std.fmt.bufPrint(&state_file_buffer, "{s}/{s}", .{ try root.get_state_dir(), "commands" });
var file = try std.fs.createFileAbsolute(state_file, .{ .truncate = true });
defer file.close();
var buffer = std.io.bufferedWriter(file.writer());
defer buffer.flush() catch {};
const writer = buffer.writer();
var buf: [4096]u8 = undefined;
var file_writer = file.writer(&buf);
const writer = &file_writer.interface;
defer writer.flush() catch {};
for (palette.entries.items) |cmd_| {
if (cmd_.used_time == 0) continue;

View file

@ -26,7 +26,7 @@ pub fn load_entries(palette: *Type) !usize {
while (iter.len > 0) {
var cbor_item: []const u8 = undefined;
if (!try cbor.matchValue(&iter, cbor.extract_cbor(&cbor_item))) return error.BadCompletion;
(try palette.entries.addOne()).* = .{ .cbor = cbor_item, .label = undefined, .sort_text = undefined };
(try palette.entries.addOne(palette.allocator)).* = .{ .cbor = cbor_item, .label = undefined, .sort_text = undefined };
}
var max_label_len: usize = 0;
@ -54,12 +54,12 @@ pub fn clear_entries(palette: *Type) void {
}
pub fn add_menu_entry(palette: *Type, entry: *Entry, matches: ?[]const usize) !void {
var value = std.ArrayList(u8).init(palette.allocator);
var value: std.Io.Writer.Allocating = .init(palette.allocator);
defer value.deinit();
const writer = value.writer();
const writer = &value.writer;
try writer.writeAll(entry.cbor);
try cbor.writeValue(writer, matches orelse &[_]usize{});
try palette.menu.add_item_with_handler(value.items, select);
try palette.menu.add_item_with_handler(value.written(), select);
palette.items += 1;
}

View file

@ -44,7 +44,7 @@ pub fn Variant(comptime command: []const u8, comptime label_: []const u8, allow_
for (file_type_config.get_all_names()) |file_type_name| {
const file_type = try file_type_config.get(file_type_name) orelse unreachable;
idx += 1;
(try palette.entries.addOne()).* = .{
(try palette.entries.addOne(palette.allocator)).* = .{
.label = file_type.description orelse file_type_config.default.description,
.name = file_type.name,
.icon = file_type.icon orelse file_type_config.default.icon,
@ -59,15 +59,15 @@ pub fn Variant(comptime command: []const u8, comptime label_: []const u8, allow_
}
pub fn add_menu_entry(palette: *Type, entry: *Entry, matches: ?[]const usize) !void {
var value = std.ArrayList(u8).init(palette.allocator);
var value: std.Io.Writer.Allocating = .init(palette.allocator);
defer value.deinit();
const writer = value.writer();
const writer = &value.writer;
try cbor.writeValue(writer, entry.label);
try cbor.writeValue(writer, entry.icon);
try cbor.writeValue(writer, entry.color);
try cbor.writeValue(writer, entry.name);
try cbor.writeValue(writer, matches orelse &[_]usize{});
try palette.menu.add_item_with_handler(value.items, select);
try palette.menu.add_item_with_handler(value.written(), select);
palette.items += 1;
}

View file

@ -38,7 +38,7 @@ pub fn load_entries(palette: *Type) !usize {
defer palette.allocator.free(fontfaces);
for (fontfaces) |fontface| {
idx += 1;
(try palette.entries.addOne()).* = .{ .label = fontface };
(try palette.entries.addOne(palette.allocator)).* = .{ .label = fontface };
if (previous_fontface) |previous_fontface_| if (std.mem.eql(u8, fontface, previous_fontface_)) {
palette.initial_selected = idx;
};
@ -47,12 +47,12 @@ pub fn load_entries(palette: *Type) !usize {
}
pub fn add_menu_entry(palette: *Type, entry: *Entry, matches: ?[]const usize) !void {
var value = std.ArrayList(u8).init(palette.allocator);
var value: std.Io.Writer.Allocating = .init(palette.allocator);
defer value.deinit();
const writer = value.writer();
const writer = &value.writer;
try cbor.writeValue(writer, entry.label);
try cbor.writeValue(writer, matches orelse &[_]usize{});
try palette.menu.add_item_with_handler(value.items, select);
try palette.menu.add_item_with_handler(value.written(), select);
palette.items += 1;
}

View file

@ -26,8 +26,9 @@ pub fn load_entries(palette: *Type) !usize {
const hints = if (tui.input_mode()) |m| m.keybind_hints else @panic("no keybind hints");
var longest_hint: usize = 0;
for (command.commands.items) |cmd_| if (cmd_) |p| {
var label_ = std.ArrayList(u8).init(palette.allocator);
const writer = label_.writer();
var label_: std.Io.Writer.Allocating = .init(palette.allocator);
defer label_.deinit();
const writer = &label_.writer;
try writer.writeAll(p.name);
if (p.meta.description.len > 0) try writer.print(" ({s})", .{p.meta.description});
if (p.meta.arguments.len > 0) {
@ -47,7 +48,7 @@ pub fn load_entries(palette: *Type) !usize {
const hint = hints.get(p.name) orelse "";
longest_hint = @max(longest_hint, hint.len);
(try palette.entries.addOne()).* = .{
(try palette.entries.addOne(palette.allocator)).* = .{
.label = try label_.toOwnedSlice(),
.hint = hint,
.id = p.id,
@ -57,14 +58,14 @@ pub fn load_entries(palette: *Type) !usize {
}
pub fn add_menu_entry(palette: *Type, entry: *Entry, matches: ?[]const usize) !void {
var value = std.ArrayList(u8).init(palette.allocator);
var value: std.Io.Writer.Allocating = .init(palette.allocator);
defer value.deinit();
const writer = value.writer();
const writer = &value.writer;
try cbor.writeValue(writer, entry.label);
try cbor.writeValue(writer, entry.hint);
try cbor.writeValue(writer, matches orelse &[_]usize{});
try cbor.writeValue(writer, entry.id);
try palette.menu.add_item_with_handler(value.items, select);
try palette.menu.add_item_with_handler(value.written(), select);
palette.items += 1;
}

View file

@ -139,15 +139,15 @@ fn add_item(
indicator: []const u8,
matches: ?[]const u8,
) !void {
var label = std.ArrayList(u8).init(self.allocator);
var label: std.Io.Writer.Allocating = .init(self.allocator);
defer label.deinit();
const writer = label.writer();
const writer = &label.writer;
try cbor.writeValue(writer, file_name);
try cbor.writeValue(writer, file_icon);
try cbor.writeValue(writer, file_color);
try cbor.writeValue(writer, indicator);
if (matches) |cb| _ = try writer.write(cb) else try cbor.writeValue(writer, &[_]usize{});
try self.menu.add_item_with_handler(label.items, menu_action_open_file);
try self.menu.add_item_with_handler(label.written(), menu_action_open_file);
}
fn receive_project_manager(self: *Self, _: tp.pid_ref, m: tp.message) MessageFilter.Error!bool {
@ -259,13 +259,13 @@ fn delete_code_point(self: *Self) !void {
fn insert_code_point(self: *Self, c: u32) !void {
var buf: [6]u8 = undefined;
const bytes = try input.ucs32_to_utf8(&[_]u32{c}, &buf);
try self.inputbox.text.appendSlice(buf[0..bytes]);
try self.inputbox.text.appendSlice(self.allocator, buf[0..bytes]);
self.inputbox.cursor = tui.egc_chunk_width(self.inputbox.text.items, 0, 8);
return self.start_query();
}
fn insert_bytes(self: *Self, bytes: []const u8) !void {
try self.inputbox.text.appendSlice(bytes);
try self.inputbox.text.appendSlice(self.allocator, bytes);
self.inputbox.cursor = tui.egc_chunk_width(self.inputbox.text.items, 0, 8);
return self.start_query();
}

View file

@ -43,7 +43,7 @@ pub fn load_entries_with_args(palette: *Type, ctx: command.Context) !usize {
return error.InvalidMessageField;
if (!try cbor.matchValue(&iter, cbor.extract(&open)))
return error.InvalidMessageField;
(try palette.entries.addOne()).* = .{ .label = try palette.allocator.dupe(u8, name_), .open = open };
(try palette.entries.addOne(palette.allocator)).* = .{ .label = try palette.allocator.dupe(u8, name_), .open = open };
}
return 1;
}
@ -53,13 +53,13 @@ pub fn clear_entries(palette: *Type) void {
}
pub fn add_menu_entry(palette: *Type, entry: *Entry, matches: ?[]const usize) !void {
var value = std.ArrayList(u8).init(palette.allocator);
var value: std.Io.Writer.Allocating = .init(palette.allocator);
defer value.deinit();
const writer = value.writer();
const writer = &value.writer;
try cbor.writeValue(writer, entry.label);
try cbor.writeValue(writer, if (entry.open) "-" else "");
try cbor.writeValue(writer, matches orelse &[_]usize{});
try palette.menu.add_item_with_handler(value.items, select);
try palette.menu.add_item_with_handler(value.written(), select);
palette.items += 1;
}

View file

@ -78,7 +78,7 @@ pub fn Create(options: type) type {
.icon = if (@hasDecl(options, "icon")) options.icon else null,
}))).dynamic_cast(InputBox.State(*Self)) orelse unreachable,
.view_rows = get_view_rows(tui.screen()),
.entries = std.ArrayList(Entry).init(allocator),
.entries = .empty,
};
if (self.menu.scrollbar) |scrollbar| scrollbar.style_factory = scrollbar_style;
self.longest_hint = if (@hasDecl(options, "load_entries_with_args"))
@ -103,7 +103,7 @@ pub fn Create(options: type) type {
self.commands.deinit();
if (@hasDecl(options, "deinit"))
options.deinit(self);
self.entries.deinit();
self.entries.deinit(self.allocator);
tui.message_filters().remove_ptr(self);
if (tui.mainview()) |mv| {
mv.floating_views.remove(self.menu.container_widget);
@ -270,7 +270,7 @@ pub fn Create(options: type) type {
}
}
fn query_entries(self: *Self, query: []const u8) error{OutOfMemory}!usize {
fn query_entries(self: *Self, query: []const u8) error{ OutOfMemory, WriteFailed }!usize {
var searcher = try fuzzig.Ascii.init(
self.allocator,
self.longest, // haystack max size
@ -285,12 +285,12 @@ pub fn Create(options: type) type {
matches: []const usize,
};
var matches = std.ArrayList(Match).init(self.allocator);
var matches: std.ArrayList(Match) = .empty;
for (self.entries.items) |*entry| {
const match = searcher.scoreMatches(entry.label, query);
if (match.score) |score|
(try matches.addOne()).* = .{
(try matches.addOne(self.allocator)).* = .{
.entry = entry,
.score = score,
.matches = try self.allocator.dupe(usize, match.matches),
@ -343,14 +343,14 @@ pub fn Create(options: type) type {
fn insert_code_point(self: *Self, c: u32) !void {
var buf: [6]u8 = undefined;
const bytes = try input.ucs32_to_utf8(&[_]u32{c}, &buf);
try self.inputbox.text.appendSlice(buf[0..bytes]);
try self.inputbox.text.appendSlice(self.allocator, buf[0..bytes]);
self.inputbox.cursor = tui.egc_chunk_width(self.inputbox.text.items, 0, 8);
self.view_pos = 0;
return self.start_query(0);
}
fn insert_bytes(self: *Self, bytes: []const u8) !void {
try self.inputbox.text.appendSlice(bytes);
try self.inputbox.text.appendSlice(self.allocator, bytes);
self.inputbox.cursor = tui.egc_chunk_width(self.inputbox.text.items, 0, 8);
self.view_pos = 0;
return self.start_query(0);

View file

@ -30,11 +30,11 @@ pub fn load_entries(palette: *Type) !usize {
while (len > 0) : (len -= 1) {
var task: []const u8 = undefined;
if (try cbor.matchValue(&iter, cbor.extract(&task))) {
(try palette.entries.addOne()).* = .{ .label = try palette.allocator.dupe(u8, task) };
(try palette.entries.addOne(palette.allocator)).* = .{ .label = try palette.allocator.dupe(u8, task) };
} else return error.InvalidTaskMessageField;
}
(try palette.entries.addOne()).* = .{ .label = "", .command = "add_task" };
(try palette.entries.addOne()).* = .{ .label = "", .command = "palette_menu_delete_item" };
(try palette.entries.addOne(palette.allocator)).* = .{ .label = "", .command = "add_task" };
(try palette.entries.addOne(palette.allocator)).* = .{ .label = "", .command = "palette_menu_delete_item" };
return if (palette.entries.items.len == 0) label.len else blk: {
var longest: usize = 0;
for (palette.entries.items) |item| longest = @max(longest, item.label.len);
@ -49,12 +49,12 @@ pub fn clear_entries(palette: *Type) void {
}
pub fn add_menu_entry(palette: *Type, entry: *Entry, matches: ?[]const usize) !void {
var value = std.ArrayList(u8).init(palette.allocator);
var value: std.Io.Writer.Allocating = .init(palette.allocator);
defer value.deinit();
const writer = value.writer();
const writer = &value.writer;
try cbor.writeValue(writer, entry);
try cbor.writeValue(writer, matches orelse &[_]usize{});
try palette.menu.add_item_with_handler(value.items, select);
try palette.menu.add_item_with_handler(value.written(), select);
palette.items += 1;
}

View file

@ -30,7 +30,7 @@ pub fn load_entries(palette: *Type) !usize {
previous_theme = tui.theme().name;
for (Widget.themes) |theme| {
idx += 1;
(try palette.entries.addOne()).* = .{
(try palette.entries.addOne(palette.allocator)).* = .{
.label = theme.description,
.name = theme.name,
};
@ -43,13 +43,13 @@ pub fn load_entries(palette: *Type) !usize {
}
pub fn add_menu_entry(palette: *Type, entry: *Entry, matches: ?[]const usize) !void {
var value = std.ArrayList(u8).init(palette.allocator);
var value: std.Io.Writer.Allocating = .init(palette.allocator);
defer value.deinit();
const writer = value.writer();
const writer = &value.writer;
try cbor.writeValue(writer, entry.label);
try cbor.writeValue(writer, entry.name);
try cbor.writeValue(writer, matches orelse &[_]usize{});
try palette.menu.add_item_with_handler(value.items, select);
try palette.menu.add_item_with_handler(value.written(), select);
palette.items += 1;
}