Add panel hierarchy styling
This commit is contained in:
+52
-1
@@ -417,7 +417,7 @@ pub const Client = struct {
|
||||
defer allocator.free(path);
|
||||
const header = try std.fmt.allocPrint(allocator, "panel {s}", .{path});
|
||||
defer allocator.free(header);
|
||||
try appendThemedRow(allocator, &out, header, self.viewport.width, ansi_text);
|
||||
try appendThemedRow(allocator, &out, header, self.viewport.width, ansi_panel_header);
|
||||
try out.append(allocator, '\n');
|
||||
body_lines_used += 1;
|
||||
|
||||
@@ -2589,6 +2589,8 @@ const ansi_syntax_number = "\x1b[38;2;231;168;78;48;2;25;22;33m";
|
||||
const ansi_diag_error = "\x1b[38;2;238;84;88;48;2;25;22;33m";
|
||||
const ansi_diag_warning = "\x1b[38;2;231;168;78;48;2;25;22;33m";
|
||||
const ansi_diag_info = "\x1b[38;2;121;155;224;48;2;25;22;33m";
|
||||
const ansi_panel_header = "\x1b[38;2;25;22;33;48;2;116;196;171m";
|
||||
const ansi_panel_section = "\x1b[38;2;235;119;84;48;2;25;22;33m";
|
||||
const ansi_diag_hint = "\x1b[38;2;116;196;171;48;2;25;22;33m";
|
||||
const ansi_success = "\x1b[38;2;116;196;171;48;2;25;22;33m";
|
||||
const ansi_stale = "\x1b[38;2;103;93;122;48;2;25;22;33m";
|
||||
@@ -2786,6 +2788,7 @@ fn panelRowStyle(row: []const u8) []const u8 {
|
||||
if (startsAny(row, &.{ "info:", "diagnostic:info", "stdout:", "job:status:running", "terminal:status:running" })) return ansi_diag_info;
|
||||
if (startsAny(row, &.{ "hint:", "diagnostic:hint" })) return ansi_diag_hint;
|
||||
if (startsAny(row, &.{ "provider:", "lsp-provider:", "language-provider:" })) return ansi_provider;
|
||||
if (startsAny(row, &.{ "lsp:hover:", "lsp:signature:", "lsp:param:", "pi_ask:", "pi_edit:", "pi_review:" })) return ansi_panel_section;
|
||||
if (startsAny(row, &.{ "missing:", "conflict:", "stale:", "job_status:idle", "terminal_status:idle" })) return ansi_stale;
|
||||
return ansi_text;
|
||||
}
|
||||
@@ -5609,3 +5612,51 @@ test "regular: appended panel rows carry semantic color identity" {
|
||||
try appendPanelRow(std.testing.allocator, &out, "provider:zig:zls:available", 72);
|
||||
try std.testing.expect(std.mem.indexOf(u8, out.items, ansi_provider) != null);
|
||||
}
|
||||
|
||||
test "regular: panel hierarchy uses header and section styles" {
|
||||
var client = try Client.init(std.testing.allocator, .{ .width = 56, .height = 8 });
|
||||
defer client.deinit();
|
||||
|
||||
try client.handleInput(" ");
|
||||
try client.handleInput("P");
|
||||
const frame = try client.render(std.testing.allocator);
|
||||
defer std.testing.allocator.free(frame);
|
||||
|
||||
try std.testing.expect(std.mem.indexOf(u8, frame, ansi_panel_header) != null);
|
||||
try std.testing.expectEqualStrings(ansi_panel_section, panelRowStyle("pi_ask:explain_current_buffer"));
|
||||
try std.testing.expect(std.mem.indexOf(u8, frame, "panel [pi]") != null);
|
||||
try std.testing.expect(std.mem.indexOf(u8, frame, "pi_ask:explain_current_buffer") != null);
|
||||
}
|
||||
|
||||
test "regular: hover and signature rows have readable panel hierarchy styles" {
|
||||
var client = try Client.init(std.testing.allocator, .{ .width = 64, .height = 8 });
|
||||
defer client.deinit();
|
||||
|
||||
const hover_json = "{\"result\":{\"contents\":{\"kind\":\"markdown\",\"value\":\"```zig\\nfn foo() void\\n```\\nsummary\"}}}";
|
||||
var hover_line: std.ArrayList(u8) = .empty;
|
||||
defer hover_line.deinit(std.testing.allocator);
|
||||
try hover_line.appendSlice(std.testing.allocator, "lsp_hover ");
|
||||
try hover_line.appendSlice(std.testing.allocator, hover_json);
|
||||
try client.handleTraceLine(hover_line.items);
|
||||
{
|
||||
const frame = try client.render(std.testing.allocator);
|
||||
defer std.testing.allocator.free(frame);
|
||||
try std.testing.expect(std.mem.indexOf(u8, frame, ansi_panel_header) != null);
|
||||
try std.testing.expect(std.mem.indexOf(u8, frame, "panel [lsp-hover]") != null);
|
||||
}
|
||||
|
||||
var signature_client = try Client.init(std.testing.allocator, .{ .width = 64, .height = 8 });
|
||||
defer signature_client.deinit();
|
||||
const signature_rows = [_][]const u8{
|
||||
"lsp:signature:foo(a:i32,b:bool)",
|
||||
"lsp:param:1:b_second",
|
||||
};
|
||||
try signature_client.openListRows("lsp-signature", signature_rows[0..], .none);
|
||||
{
|
||||
const frame = try signature_client.render(std.testing.allocator);
|
||||
defer std.testing.allocator.free(frame);
|
||||
try std.testing.expect(std.mem.indexOf(u8, frame, ansi_panel_header) != null);
|
||||
try std.testing.expect(std.mem.indexOf(u8, frame, "panel [lsp-signature]") != null);
|
||||
try std.testing.expectEqualStrings(ansi_panel_section, panelRowStyle("lsp:signature:foo(a:i32,b:bool)"));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user