refactor: limit maximum size of detail and description in completion dropdown

This commit is contained in:
CJ van den Berg 2025-12-24 00:40:58 +01:00
parent b5d137666f
commit f875dba810
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9
3 changed files with 14 additions and 6 deletions

View file

@ -20,6 +20,8 @@ pub const icon = "󱎸 ";
pub const modal_dim = false;
pub const placement = .primary_cursor;
pub const widget_type: Widget.Type = .dropdown;
pub var detail_limit: usize = 40;
pub var description_limit: usize = 25;
pub const Entry = struct {
label: []const u8,
@ -58,10 +60,10 @@ pub fn load_entries(self: *Type) !usize {
item.sort_text = values.sort_text;
var lines = std.mem.splitScalar(u8, values.label_description, '\n');
const label_description_len = if (lines.next()) |desc| desc.len else values.label_description.len;
const label_description_len: usize = if (lines.next()) |desc| desc.len else values.label_description.len;
max_label_len = @max(max_label_len, item.label.len);
max_description = @max(max_description, label_description_len + values.label_detail.len);
max_description = @max(max_description, @min(label_description_len, description_limit) + @min(values.label_detail.len, detail_limit) + 2);
}
const less_fn = struct {
@ -172,13 +174,15 @@ pub fn on_render_menu(_: *Type, button: *Type.ButtonType, theme: *const Widget.T
values.label,
icon_,
color,
values.label_detail,
values.label_description,
values.label_detail[0..@min(values.label_detail.len, detail_limit)],
values.label_description[0..@min(values.label_description.len, description_limit)],
matches_cbor,
button.active,
selected,
button.hover,
theme,
if (values.label_detail.len > detail_limit) "" else "",
if (values.label_description.len > description_limit) "" else "",
);
}

View file

@ -120,6 +120,8 @@ pub fn on_render_menu(_: *Type, button: *Type.ButtonType, theme: *const Widget.T
selected,
button.hover,
theme,
&.{},
&.{},
);
}

View file

@ -2167,6 +2167,8 @@ pub fn render_symbol(
selected: bool,
hover: bool,
theme_: *const Widget.Theme,
detail_suffix: []const u8,
description_suffix: []const u8,
) bool {
const style_base = theme_.editor_widget;
const style_symbol = if (active) theme_.editor_cursor else if (hover or selected) theme_.editor_selection else theme_.editor_widget;
@ -2190,12 +2192,12 @@ pub fn render_symbol(
_ = self.print("{s}", .{symbol}) catch {};
self.set_style(style_detail);
_ = self.print("{s}", .{detail}) catch {};
_ = self.print("{s}{s}", .{ detail, detail_suffix }) catch {};
var lines = std.mem.splitScalar(u8, description, '\n');
if (lines.next()) |desc| {
self.set_style(style_description);
_ = self.print_right(" {s} ", .{desc}) catch {};
_ = self.print_right(" {s}{s} ", .{ desc, description_suffix }) catch {};
}
var iter = matches_cbor;